Merge pull request #141 from WordOps/updating-configuration
updating configuration
This commit is contained in:
13
CHANGELOG.md
13
CHANGELOG.md
@@ -8,11 +8,22 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|||||||
|
|
||||||
### v3.9.x - [Unreleased]
|
### v3.9.x - [Unreleased]
|
||||||
|
|
||||||
|
### v3.9.8.10 - 2019-09-04
|
||||||
|
|
||||||
|
#### Changed
|
||||||
|
|
||||||
|
- Improve Let's Encrypt certificate issuance logging informations
|
||||||
|
- MariaDB configuration & optimization is now rendered from a template (can be protected against overwriting with .custom)
|
||||||
|
|
||||||
#### Fixed
|
#### Fixed
|
||||||
|
|
||||||
- Fix cheat.sh install [PR #139](https://github.com/WordOps/WordOps/pull/139)
|
- Fix cheat.sh install [PR #139](https://github.com/WordOps/WordOps/pull/139)
|
||||||
- sslutils error when trying to display SSL certificate expiration
|
- sslutils error when trying to display SSL certificate expiration
|
||||||
- Fix cheat.sh symbolink link check before creation
|
- Fix cheat.sh symbolic link check before creation
|
||||||
|
- subdomain detection with complex suffixes like com.br
|
||||||
|
- Fix mariadb install/upgrade when running mariadb-10.1
|
||||||
|
- Fix mariadb install/upgrade on raspbian and debian 8
|
||||||
|
- Fix mariadb tuning wrong pool_instance calculation
|
||||||
|
|
||||||
### v3.9.8.9 - 2019-09-03
|
### v3.9.8.9 - 2019-09-03
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
<br><img src="https://netdata.wordops.eu/netdata/api/v1/badge.svg?chart=web_log_wops.cc.requests_per_url&options=unaligned&dimensions=download&group=sum&after=-86400&label=today&units=installations&precision=0&value_color=%230055AA" alt="WordOps install" >
|
<br><img src="https://netdata.wordops.eu/netdata/api/v1/badge.svg?chart=web_log_wops.cc.requests_per_url&options=unaligned&dimensions=download&group=sum&after=-86400&label=today&units=installations&precision=0&value_color=%230055AA" alt="WordOps install" >
|
||||||
<a href="https://www.codacy.com/app/VirtuBox/WordOps?utm_source=github.com&utm_medium=referral&utm_content=WordOps/WordOps&utm_campaign=Badge_Grade"><img src="https://api.codacy.com/project/badge/Grade/fe9100fd2c634de7882ecec17f00a11a" alt="codacy"/></a>
|
<a href="https://www.codacy.com/app/VirtuBox/WordOps?utm_source=github.com&utm_medium=referral&utm_content=WordOps/WordOps&utm_campaign=Badge_Grade"><img src="https://api.codacy.com/project/badge/Grade/fe9100fd2c634de7882ecec17f00a11a" alt="codacy"/></a>
|
||||||
<a href="https://twitter.com/WordOps_" target="_blank"><img src="https://img.shields.io/badge/twitter-%40WordOps__-blue.svg?style=flat&logo=twitter" alt="Badge Twitter" /></a>
|
<a href="https://twitter.com/WordOps_" target="_blank"><img src="https://img.shields.io/badge/twitter-%40WordOps__-blue.svg?style=flat&logo=twitter" alt="Badge Twitter" /></a>
|
||||||
<a href="https://community.wordops.net/slack" target="_blank"><img src="https://img.shields.io/badge/slack-WordOps-4A154B.svg?style=flat&logo=slack" alt="Badge Slack" /></a>
|
<a href="https://chat.wordops.net" target="_blank"><img src="https://img.shields.io/badge/slack-WordOps-4A154B.svg?style=flat&logo=rocket.chat" alt="Badge Slack" /></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
|
|||||||
2
install
2
install
@@ -9,7 +9,7 @@
|
|||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
# wget -qO wo wops.cc && sudo bash wo
|
# wget -qO wo wops.cc && sudo bash wo
|
||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
# Version 3.9.8.9 - 2019-09-03
|
# Version 3.9.8.10 - 2019-09-04
|
||||||
# -------------------------------------------------------------------------
|
# -------------------------------------------------------------------------
|
||||||
|
|
||||||
# CONTENTS
|
# CONTENTS
|
||||||
|
|||||||
2
setup.py
2
setup.py
@@ -57,7 +57,7 @@ if not os.path.isfile('/root/.gitconfig'):
|
|||||||
shutil.copy2(os.path.expanduser("~")+'/.gitconfig', '/root/.gitconfig')
|
shutil.copy2(os.path.expanduser("~")+'/.gitconfig', '/root/.gitconfig')
|
||||||
|
|
||||||
setup(name='wo',
|
setup(name='wo',
|
||||||
version='3.9.8.9',
|
version='3.9.8.10',
|
||||||
description=long_description,
|
description=long_description,
|
||||||
long_description=long_description,
|
long_description=long_description,
|
||||||
classifiers=[],
|
classifiers=[],
|
||||||
|
|||||||
@@ -1,14 +1,16 @@
|
|||||||
"""Clean Plugin for WordOps."""
|
"""Clean Plugin for WordOps."""
|
||||||
|
|
||||||
from wo.core.shellexec import WOShellExec
|
|
||||||
from wo.core.aptget import WOAptGet
|
|
||||||
from wo.core.services import WOService
|
|
||||||
from wo.core.logging import Log
|
|
||||||
from cement.core.controller import CementBaseController, expose
|
|
||||||
from cement.core import handler, hook
|
|
||||||
import os
|
import os
|
||||||
import urllib.request
|
import urllib.request
|
||||||
|
|
||||||
|
from cement.core import handler, hook
|
||||||
|
from cement.core.controller import CementBaseController, expose
|
||||||
|
|
||||||
|
from wo.core.aptget import WOAptGet
|
||||||
|
from wo.core.logging import Log
|
||||||
|
from wo.core.services import WOService
|
||||||
|
from wo.core.shellexec import WOShellExec
|
||||||
|
|
||||||
|
|
||||||
def wo_clean_hook(app):
|
def wo_clean_hook(app):
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -1,21 +1,23 @@
|
|||||||
"""Debug Plugin for WordOps"""
|
"""Debug Plugin for WordOps"""
|
||||||
|
|
||||||
from cement.core.controller import CementBaseController, expose
|
|
||||||
from cement.core import handler, hook
|
|
||||||
from wo.core.aptget import WOAptGet
|
|
||||||
from wo.core.shellexec import WOShellExec
|
|
||||||
from wo.core.mysql import WOMysql
|
|
||||||
from wo.core.services import WOService
|
|
||||||
from wo.core.logging import Log
|
|
||||||
from wo.cli.plugins.site_functions import logwatch
|
|
||||||
from wo.core.variables import WOVariables
|
|
||||||
from wo.core.fileutils import WOFileUtils
|
|
||||||
from pynginxconfig import NginxConfig
|
|
||||||
import os
|
|
||||||
import configparser
|
import configparser
|
||||||
import glob
|
import glob
|
||||||
|
import os
|
||||||
import signal
|
import signal
|
||||||
|
|
||||||
|
from cement.core import handler, hook
|
||||||
|
from cement.core.controller import CementBaseController, expose
|
||||||
|
from pynginxconfig import NginxConfig
|
||||||
|
|
||||||
|
from wo.cli.plugins.site_functions import logwatch
|
||||||
|
from wo.core.aptget import WOAptGet
|
||||||
|
from wo.core.fileutils import WOFileUtils
|
||||||
|
from wo.core.logging import Log
|
||||||
|
from wo.core.mysql import WOMysql
|
||||||
|
from wo.core.services import WOService
|
||||||
|
from wo.core.shellexec import WOShellExec
|
||||||
|
from wo.core.variables import WOVariables
|
||||||
|
|
||||||
|
|
||||||
def wo_debug_hook(app):
|
def wo_debug_hook(app):
|
||||||
pass
|
pass
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from cement.core.controller import CementBaseController, expose
|
|
||||||
from cement.core import handler, hook
|
from cement.core import handler, hook
|
||||||
|
from cement.core.controller import CementBaseController, expose
|
||||||
|
|
||||||
from wo.core.logging import Log
|
from wo.core.logging import Log
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,296 +1,298 @@
|
|||||||
"""WOInfo Plugin for WordOps"""
|
"""WOInfo Plugin for WordOps"""
|
||||||
|
|
||||||
from cement.core.controller import CementBaseController, expose
|
import configparser
|
||||||
from cement.core import handler, hook
|
import os
|
||||||
from pynginxconfig import NginxConfig
|
|
||||||
from wo.core.aptget import WOAptGet
|
from cement.core import handler, hook
|
||||||
from wo.core.shellexec import WOShellExec
|
from cement.core.controller import CementBaseController, expose
|
||||||
from wo.core.logging import Log
|
from pynginxconfig import NginxConfig
|
||||||
import os
|
|
||||||
import configparser
|
from wo.core.aptget import WOAptGet
|
||||||
|
from wo.core.logging import Log
|
||||||
|
from wo.core.shellexec import WOShellExec
|
||||||
def wo_info_hook(app):
|
|
||||||
pass
|
|
||||||
|
def wo_info_hook(app):
|
||||||
|
pass
|
||||||
class WOInfoController(CementBaseController):
|
|
||||||
class Meta:
|
|
||||||
label = 'info'
|
class WOInfoController(CementBaseController):
|
||||||
stacked_on = 'base'
|
class Meta:
|
||||||
stacked_type = 'nested'
|
label = 'info'
|
||||||
description = ('Display configuration information related to Nginx,'
|
stacked_on = 'base'
|
||||||
' PHP and MySQL')
|
stacked_type = 'nested'
|
||||||
arguments = [
|
description = ('Display configuration information related to Nginx,'
|
||||||
(['--mysql'],
|
' PHP and MySQL')
|
||||||
dict(help='Get MySQL configuration information',
|
arguments = [
|
||||||
action='store_true')),
|
(['--mysql'],
|
||||||
(['--php'],
|
dict(help='Get MySQL configuration information',
|
||||||
dict(help='Get PHP 7.2 configuration information',
|
action='store_true')),
|
||||||
action='store_true')),
|
(['--php'],
|
||||||
(['--php73'],
|
dict(help='Get PHP 7.2 configuration information',
|
||||||
dict(help='Get PHP 7.3 configuration information',
|
action='store_true')),
|
||||||
action='store_true')),
|
(['--php73'],
|
||||||
(['--nginx'],
|
dict(help='Get PHP 7.3 configuration information',
|
||||||
dict(help='Get Nginx configuration information',
|
action='store_true')),
|
||||||
action='store_true')),
|
(['--nginx'],
|
||||||
]
|
dict(help='Get Nginx configuration information',
|
||||||
usage = "wo info [options]"
|
action='store_true')),
|
||||||
|
]
|
||||||
@expose(hide=True)
|
usage = "wo info [options]"
|
||||||
def info_nginx(self):
|
|
||||||
"""Display Nginx information"""
|
@expose(hide=True)
|
||||||
version = os.popen("/usr/sbin/nginx -v 2>&1 | "
|
def info_nginx(self):
|
||||||
"awk -F '/' '{print $2}' | "
|
"""Display Nginx information"""
|
||||||
"awk -F ' ' '{print $1}' | tr '\n' ' '").read()
|
version = os.popen("/usr/sbin/nginx -v 2>&1 | "
|
||||||
allow = os.popen("grep ^allow /etc/nginx/common/acl.conf | "
|
"awk -F '/' '{print $2}' | "
|
||||||
"cut -d' ' -f2 | cut -d';' -f1 | tr '\n' ' '").read()
|
"awk -F ' ' '{print $1}' | tr '\n' ' '").read()
|
||||||
nc = NginxConfig()
|
allow = os.popen("grep ^allow /etc/nginx/common/acl.conf | "
|
||||||
nc.loadf('/etc/nginx/nginx.conf')
|
"cut -d' ' -f2 | cut -d';' -f1 | tr '\n' ' '").read()
|
||||||
user = nc.get('user')[1]
|
nc = NginxConfig()
|
||||||
worker_processes = nc.get('worker_processes')[1]
|
nc.loadf('/etc/nginx/nginx.conf')
|
||||||
worker_connections = nc.get([('events',), 'worker_connections'])[1]
|
user = nc.get('user')[1]
|
||||||
keepalive_timeout = nc.get([('http',), 'keepalive_timeout'])[1]
|
worker_processes = nc.get('worker_processes')[1]
|
||||||
fastcgi_read_timeout = nc.get([('http',),
|
worker_connections = nc.get([('events',), 'worker_connections'])[1]
|
||||||
'fastcgi_read_timeout'])[1]
|
keepalive_timeout = nc.get([('http',), 'keepalive_timeout'])[1]
|
||||||
client_max_body_size = nc.get([('http',),
|
fastcgi_read_timeout = nc.get([('http',),
|
||||||
'client_max_body_size'])[1]
|
'fastcgi_read_timeout'])[1]
|
||||||
data = dict(version=version, allow=allow, user=user,
|
client_max_body_size = nc.get([('http',),
|
||||||
worker_processes=worker_processes,
|
'client_max_body_size'])[1]
|
||||||
keepalive_timeout=keepalive_timeout,
|
data = dict(version=version, allow=allow, user=user,
|
||||||
worker_connections=worker_connections,
|
worker_processes=worker_processes,
|
||||||
fastcgi_read_timeout=fastcgi_read_timeout,
|
keepalive_timeout=keepalive_timeout,
|
||||||
client_max_body_size=client_max_body_size)
|
worker_connections=worker_connections,
|
||||||
self.app.render((data), 'info_nginx.mustache')
|
fastcgi_read_timeout=fastcgi_read_timeout,
|
||||||
|
client_max_body_size=client_max_body_size)
|
||||||
@expose(hide=True)
|
self.app.render((data), 'info_nginx.mustache')
|
||||||
def info_php(self):
|
|
||||||
"""Display PHP information"""
|
@expose(hide=True)
|
||||||
version = os.popen("/usr/bin/php7.2 -v 2>/dev/null | "
|
def info_php(self):
|
||||||
"head -n1 | cut -d' ' -f2 |"
|
"""Display PHP information"""
|
||||||
" cut -d'+' -f1 | tr -d '\n'").read
|
version = os.popen("/usr/bin/php7.2 -v 2>/dev/null | "
|
||||||
config = configparser.ConfigParser()
|
"head -n1 | cut -d' ' -f2 |"
|
||||||
config.read('/etc/{0}/fpm/php.ini'.format("php/7.2"))
|
" cut -d'+' -f1 | tr -d '\n'").read
|
||||||
expose_php = config['PHP']['expose_php']
|
config = configparser.ConfigParser()
|
||||||
memory_limit = config['PHP']['memory_limit']
|
config.read('/etc/{0}/fpm/php.ini'.format("php/7.2"))
|
||||||
post_max_size = config['PHP']['post_max_size']
|
expose_php = config['PHP']['expose_php']
|
||||||
upload_max_filesize = config['PHP']['upload_max_filesize']
|
memory_limit = config['PHP']['memory_limit']
|
||||||
max_execution_time = config['PHP']['max_execution_time']
|
post_max_size = config['PHP']['post_max_size']
|
||||||
|
upload_max_filesize = config['PHP']['upload_max_filesize']
|
||||||
config.read('/etc/{0}/fpm/pool.d/www.conf'.format("php/7.2"))
|
max_execution_time = config['PHP']['max_execution_time']
|
||||||
www_listen = config['www']['listen']
|
|
||||||
www_ping_path = config['www']['ping.path']
|
config.read('/etc/{0}/fpm/pool.d/www.conf'.format("php/7.2"))
|
||||||
www_pm_status_path = config['www']['pm.status_path']
|
www_listen = config['www']['listen']
|
||||||
www_pm = config['www']['pm']
|
www_ping_path = config['www']['ping.path']
|
||||||
www_pm_max_requests = config['www']['pm.max_requests']
|
www_pm_status_path = config['www']['pm.status_path']
|
||||||
www_pm_max_children = config['www']['pm.max_children']
|
www_pm = config['www']['pm']
|
||||||
www_pm_start_servers = config['www']['pm.start_servers']
|
www_pm_max_requests = config['www']['pm.max_requests']
|
||||||
www_pm_min_spare_servers = config['www']['pm.min_spare_servers']
|
www_pm_max_children = config['www']['pm.max_children']
|
||||||
www_pm_max_spare_servers = config['www']['pm.max_spare_servers']
|
www_pm_start_servers = config['www']['pm.start_servers']
|
||||||
www_request_terminate_time = (config['www']
|
www_pm_min_spare_servers = config['www']['pm.min_spare_servers']
|
||||||
['request_terminate_timeout'])
|
www_pm_max_spare_servers = config['www']['pm.max_spare_servers']
|
||||||
try:
|
www_request_terminate_time = (config['www']
|
||||||
www_xdebug = (config['www']['php_admin_flag[xdebug.profiler_enable'
|
['request_terminate_timeout'])
|
||||||
'_trigger]'])
|
try:
|
||||||
except Exception as e:
|
www_xdebug = (config['www']['php_admin_flag[xdebug.profiler_enable'
|
||||||
Log.debug(self, "{0}".format(e))
|
'_trigger]'])
|
||||||
www_xdebug = 'off'
|
except Exception as e:
|
||||||
|
Log.debug(self, "{0}".format(e))
|
||||||
config.read('/etc/{0}/fpm/pool.d/debug.conf'.format("php/7.2"))
|
www_xdebug = 'off'
|
||||||
debug_listen = config['debug']['listen']
|
|
||||||
debug_ping_path = config['debug']['ping.path']
|
config.read('/etc/{0}/fpm/pool.d/debug.conf'.format("php/7.2"))
|
||||||
debug_pm_status_path = config['debug']['pm.status_path']
|
debug_listen = config['debug']['listen']
|
||||||
debug_pm = config['debug']['pm']
|
debug_ping_path = config['debug']['ping.path']
|
||||||
debug_pm_max_requests = config['debug']['pm.max_requests']
|
debug_pm_status_path = config['debug']['pm.status_path']
|
||||||
debug_pm_max_children = config['debug']['pm.max_children']
|
debug_pm = config['debug']['pm']
|
||||||
debug_pm_start_servers = config['debug']['pm.start_servers']
|
debug_pm_max_requests = config['debug']['pm.max_requests']
|
||||||
debug_pm_min_spare_servers = config['debug']['pm.min_spare_servers']
|
debug_pm_max_children = config['debug']['pm.max_children']
|
||||||
debug_pm_max_spare_servers = config['debug']['pm.max_spare_servers']
|
debug_pm_start_servers = config['debug']['pm.start_servers']
|
||||||
debug_request_terminate = (config['debug']
|
debug_pm_min_spare_servers = config['debug']['pm.min_spare_servers']
|
||||||
['request_terminate_timeout'])
|
debug_pm_max_spare_servers = config['debug']['pm.max_spare_servers']
|
||||||
try:
|
debug_request_terminate = (config['debug']
|
||||||
debug_xdebug = (config['debug']['php_admin_flag[xdebug.profiler_'
|
['request_terminate_timeout'])
|
||||||
'enable_trigger]'])
|
try:
|
||||||
except Exception as e:
|
debug_xdebug = (config['debug']['php_admin_flag[xdebug.profiler_'
|
||||||
Log.debug(self, "{0}".format(e))
|
'enable_trigger]'])
|
||||||
debug_xdebug = 'off'
|
except Exception as e:
|
||||||
|
Log.debug(self, "{0}".format(e))
|
||||||
data = dict(version=version, expose_php=expose_php,
|
debug_xdebug = 'off'
|
||||||
memory_limit=memory_limit, post_max_size=post_max_size,
|
|
||||||
upload_max_filesize=upload_max_filesize,
|
data = dict(version=version, expose_php=expose_php,
|
||||||
max_execution_time=max_execution_time,
|
memory_limit=memory_limit, post_max_size=post_max_size,
|
||||||
www_listen=www_listen, www_ping_path=www_ping_path,
|
upload_max_filesize=upload_max_filesize,
|
||||||
www_pm_status_path=www_pm_status_path, www_pm=www_pm,
|
max_execution_time=max_execution_time,
|
||||||
www_pm_max_requests=www_pm_max_requests,
|
www_listen=www_listen, www_ping_path=www_ping_path,
|
||||||
www_pm_max_children=www_pm_max_children,
|
www_pm_status_path=www_pm_status_path, www_pm=www_pm,
|
||||||
www_pm_start_servers=www_pm_start_servers,
|
www_pm_max_requests=www_pm_max_requests,
|
||||||
www_pm_min_spare_servers=www_pm_min_spare_servers,
|
www_pm_max_children=www_pm_max_children,
|
||||||
www_pm_max_spare_servers=www_pm_max_spare_servers,
|
www_pm_start_servers=www_pm_start_servers,
|
||||||
www_request_terminate_timeout=www_request_terminate_time,
|
www_pm_min_spare_servers=www_pm_min_spare_servers,
|
||||||
www_xdebug_profiler_enable_trigger=www_xdebug,
|
www_pm_max_spare_servers=www_pm_max_spare_servers,
|
||||||
debug_listen=debug_listen, debug_ping_path=debug_ping_path,
|
www_request_terminate_timeout=www_request_terminate_time,
|
||||||
debug_pm_status_path=debug_pm_status_path,
|
www_xdebug_profiler_enable_trigger=www_xdebug,
|
||||||
debug_pm=debug_pm,
|
debug_listen=debug_listen, debug_ping_path=debug_ping_path,
|
||||||
debug_pm_max_requests=debug_pm_max_requests,
|
debug_pm_status_path=debug_pm_status_path,
|
||||||
debug_pm_max_children=debug_pm_max_children,
|
debug_pm=debug_pm,
|
||||||
debug_pm_start_servers=debug_pm_start_servers,
|
debug_pm_max_requests=debug_pm_max_requests,
|
||||||
debug_pm_min_spare_servers=debug_pm_min_spare_servers,
|
debug_pm_max_children=debug_pm_max_children,
|
||||||
debug_pm_max_spare_servers=debug_pm_max_spare_servers,
|
debug_pm_start_servers=debug_pm_start_servers,
|
||||||
debug_request_terminate_timeout=debug_request_terminate,
|
debug_pm_min_spare_servers=debug_pm_min_spare_servers,
|
||||||
debug_xdebug_profiler_enable_trigger=debug_xdebug)
|
debug_pm_max_spare_servers=debug_pm_max_spare_servers,
|
||||||
self.app.render((data), 'info_php.mustache')
|
debug_request_terminate_timeout=debug_request_terminate,
|
||||||
|
debug_xdebug_profiler_enable_trigger=debug_xdebug)
|
||||||
@expose(hide=True)
|
self.app.render((data), 'info_php.mustache')
|
||||||
def info_php73(self):
|
|
||||||
"""Display PHP information"""
|
@expose(hide=True)
|
||||||
version = os.popen("/usr/bin/php7.3 -v 2>/dev/null | "
|
def info_php73(self):
|
||||||
"head -n1 | cut -d' ' -f2 |"
|
"""Display PHP information"""
|
||||||
" cut -d'+' -f1 | tr -d '\n'").read
|
version = os.popen("/usr/bin/php7.3 -v 2>/dev/null | "
|
||||||
config = configparser.ConfigParser()
|
"head -n1 | cut -d' ' -f2 |"
|
||||||
config.read('/etc/php/7.3/fpm/php.ini')
|
" cut -d'+' -f1 | tr -d '\n'").read
|
||||||
expose_php = config['PHP']['expose_php']
|
config = configparser.ConfigParser()
|
||||||
memory_limit = config['PHP']['memory_limit']
|
config.read('/etc/php/7.3/fpm/php.ini')
|
||||||
post_max_size = config['PHP']['post_max_size']
|
expose_php = config['PHP']['expose_php']
|
||||||
upload_max_filesize = config['PHP']['upload_max_filesize']
|
memory_limit = config['PHP']['memory_limit']
|
||||||
max_execution_time = config['PHP']['max_execution_time']
|
post_max_size = config['PHP']['post_max_size']
|
||||||
|
upload_max_filesize = config['PHP']['upload_max_filesize']
|
||||||
config.read('/etc/php/7.3/fpm/pool.d/www.conf')
|
max_execution_time = config['PHP']['max_execution_time']
|
||||||
www_listen = config['www']['listen']
|
|
||||||
www_ping_path = config['www']['ping.path']
|
config.read('/etc/php/7.3/fpm/pool.d/www.conf')
|
||||||
www_pm_status_path = config['www']['pm.status_path']
|
www_listen = config['www']['listen']
|
||||||
www_pm = config['www']['pm']
|
www_ping_path = config['www']['ping.path']
|
||||||
www_pm_max_requests = config['www']['pm.max_requests']
|
www_pm_status_path = config['www']['pm.status_path']
|
||||||
www_pm_max_children = config['www']['pm.max_children']
|
www_pm = config['www']['pm']
|
||||||
www_pm_start_servers = config['www']['pm.start_servers']
|
www_pm_max_requests = config['www']['pm.max_requests']
|
||||||
www_pm_min_spare_servers = config['www']['pm.min_spare_servers']
|
www_pm_max_children = config['www']['pm.max_children']
|
||||||
www_pm_max_spare_servers = config['www']['pm.max_spare_servers']
|
www_pm_start_servers = config['www']['pm.start_servers']
|
||||||
www_request_terminate_time = (config['www']
|
www_pm_min_spare_servers = config['www']['pm.min_spare_servers']
|
||||||
['request_terminate_timeout'])
|
www_pm_max_spare_servers = config['www']['pm.max_spare_servers']
|
||||||
try:
|
www_request_terminate_time = (config['www']
|
||||||
www_xdebug = (config['www']['php_admin_flag[xdebug.profiler_enable'
|
['request_terminate_timeout'])
|
||||||
'_trigger]'])
|
try:
|
||||||
except Exception as e:
|
www_xdebug = (config['www']['php_admin_flag[xdebug.profiler_enable'
|
||||||
Log.debug(self, "{0}".format(e))
|
'_trigger]'])
|
||||||
www_xdebug = 'off'
|
except Exception as e:
|
||||||
|
Log.debug(self, "{0}".format(e))
|
||||||
config.read('/etc/php/7.3/fpm/pool.d/debug.conf')
|
www_xdebug = 'off'
|
||||||
debug_listen = config['debug']['listen']
|
|
||||||
debug_ping_path = config['debug']['ping.path']
|
config.read('/etc/php/7.3/fpm/pool.d/debug.conf')
|
||||||
debug_pm_status_path = config['debug']['pm.status_path']
|
debug_listen = config['debug']['listen']
|
||||||
debug_pm = config['debug']['pm']
|
debug_ping_path = config['debug']['ping.path']
|
||||||
debug_pm_max_requests = config['debug']['pm.max_requests']
|
debug_pm_status_path = config['debug']['pm.status_path']
|
||||||
debug_pm_max_children = config['debug']['pm.max_children']
|
debug_pm = config['debug']['pm']
|
||||||
debug_pm_start_servers = config['debug']['pm.start_servers']
|
debug_pm_max_requests = config['debug']['pm.max_requests']
|
||||||
debug_pm_min_spare_servers = config['debug']['pm.min_spare_servers']
|
debug_pm_max_children = config['debug']['pm.max_children']
|
||||||
debug_pm_max_spare_servers = config['debug']['pm.max_spare_servers']
|
debug_pm_start_servers = config['debug']['pm.start_servers']
|
||||||
debug_request_terminate = (config['debug']
|
debug_pm_min_spare_servers = config['debug']['pm.min_spare_servers']
|
||||||
['request_terminate_timeout'])
|
debug_pm_max_spare_servers = config['debug']['pm.max_spare_servers']
|
||||||
try:
|
debug_request_terminate = (config['debug']
|
||||||
debug_xdebug = (config['debug']['php_admin_flag[xdebug.profiler_'
|
['request_terminate_timeout'])
|
||||||
'enable_trigger]'])
|
try:
|
||||||
except Exception as e:
|
debug_xdebug = (config['debug']['php_admin_flag[xdebug.profiler_'
|
||||||
Log.debug(self, "{0}".format(e))
|
'enable_trigger]'])
|
||||||
debug_xdebug = 'off'
|
except Exception as e:
|
||||||
|
Log.debug(self, "{0}".format(e))
|
||||||
data = dict(version=version, expose_php=expose_php,
|
debug_xdebug = 'off'
|
||||||
memory_limit=memory_limit, post_max_size=post_max_size,
|
|
||||||
upload_max_filesize=upload_max_filesize,
|
data = dict(version=version, expose_php=expose_php,
|
||||||
max_execution_time=max_execution_time,
|
memory_limit=memory_limit, post_max_size=post_max_size,
|
||||||
www_listen=www_listen, www_ping_path=www_ping_path,
|
upload_max_filesize=upload_max_filesize,
|
||||||
www_pm_status_path=www_pm_status_path, www_pm=www_pm,
|
max_execution_time=max_execution_time,
|
||||||
www_pm_max_requests=www_pm_max_requests,
|
www_listen=www_listen, www_ping_path=www_ping_path,
|
||||||
www_pm_max_children=www_pm_max_children,
|
www_pm_status_path=www_pm_status_path, www_pm=www_pm,
|
||||||
www_pm_start_servers=www_pm_start_servers,
|
www_pm_max_requests=www_pm_max_requests,
|
||||||
www_pm_min_spare_servers=www_pm_min_spare_servers,
|
www_pm_max_children=www_pm_max_children,
|
||||||
www_pm_max_spare_servers=www_pm_max_spare_servers,
|
www_pm_start_servers=www_pm_start_servers,
|
||||||
www_request_terminate_timeout=www_request_terminate_time,
|
www_pm_min_spare_servers=www_pm_min_spare_servers,
|
||||||
www_xdebug_profiler_enable_trigger=www_xdebug,
|
www_pm_max_spare_servers=www_pm_max_spare_servers,
|
||||||
debug_listen=debug_listen, debug_ping_path=debug_ping_path,
|
www_request_terminate_timeout=www_request_terminate_time,
|
||||||
debug_pm_status_path=debug_pm_status_path,
|
www_xdebug_profiler_enable_trigger=www_xdebug,
|
||||||
debug_pm=debug_pm,
|
debug_listen=debug_listen, debug_ping_path=debug_ping_path,
|
||||||
debug_pm_max_requests=debug_pm_max_requests,
|
debug_pm_status_path=debug_pm_status_path,
|
||||||
debug_pm_max_children=debug_pm_max_children,
|
debug_pm=debug_pm,
|
||||||
debug_pm_start_servers=debug_pm_start_servers,
|
debug_pm_max_requests=debug_pm_max_requests,
|
||||||
debug_pm_min_spare_servers=debug_pm_min_spare_servers,
|
debug_pm_max_children=debug_pm_max_children,
|
||||||
debug_pm_max_spare_servers=debug_pm_max_spare_servers,
|
debug_pm_start_servers=debug_pm_start_servers,
|
||||||
debug_request_terminate_timeout=debug_request_terminate,
|
debug_pm_min_spare_servers=debug_pm_min_spare_servers,
|
||||||
debug_xdebug_profiler_enable_trigger=debug_xdebug)
|
debug_pm_max_spare_servers=debug_pm_max_spare_servers,
|
||||||
self.app.render((data), 'info_php.mustache')
|
debug_request_terminate_timeout=debug_request_terminate,
|
||||||
|
debug_xdebug_profiler_enable_trigger=debug_xdebug)
|
||||||
@expose(hide=True)
|
self.app.render((data), 'info_php.mustache')
|
||||||
def info_mysql(self):
|
|
||||||
"""Display MySQL information"""
|
@expose(hide=True)
|
||||||
version = os.popen("/usr/bin/mysql -V | awk '{print($5)}' | "
|
def info_mysql(self):
|
||||||
"cut -d ',' "
|
"""Display MySQL information"""
|
||||||
"-f1 | tr -d '\n'").read()
|
version = os.popen("/usr/bin/mysql -V | awk '{print($5)}' | "
|
||||||
host = "localhost"
|
"cut -d ',' "
|
||||||
port = os.popen("/usr/bin/mysql -e \"show variables\" | "
|
"-f1 | tr -d '\n'").read()
|
||||||
"/bin/grep ^port | awk "
|
host = "localhost"
|
||||||
"'{print($2)}' | tr -d '\n'").read()
|
port = os.popen("/usr/bin/mysql -e \"show variables\" | "
|
||||||
wait_timeout = os.popen("/usr/bin/mysql -e \"show variables\" | grep "
|
"/bin/grep ^port | awk "
|
||||||
"^wait_timeout | awk '{print($2)}' | "
|
"'{print($2)}' | tr -d '\n'").read()
|
||||||
"tr -d '\n'").read()
|
wait_timeout = os.popen("/usr/bin/mysql -e \"show variables\" | grep "
|
||||||
interactive_timeout = os.popen("/usr/bin/mysql -e "
|
"^wait_timeout | awk '{print($2)}' | "
|
||||||
"\"show variables\" | grep "
|
"tr -d '\n'").read()
|
||||||
"^interactive_timeout | awk "
|
interactive_timeout = os.popen("/usr/bin/mysql -e "
|
||||||
"'{print($2)}' | tr -d '\n'").read()
|
"\"show variables\" | grep "
|
||||||
max_used_connections = os.popen("/usr/bin/mysql -e "
|
"^interactive_timeout | awk "
|
||||||
"\"show global status\" | "
|
"'{print($2)}' | tr -d '\n'").read()
|
||||||
"grep Max_used_connections | awk "
|
max_used_connections = os.popen("/usr/bin/mysql -e "
|
||||||
"'{print($2)}' | tr -d '\n'").read()
|
"\"show global status\" | "
|
||||||
datadir = os.popen("/usr/bin/mysql -e \"show variables\" | "
|
"grep Max_used_connections | awk "
|
||||||
"/bin/grep datadir | awk"
|
"'{print($2)}' | tr -d '\n'").read()
|
||||||
" '{print($2)}' | tr -d '\n'").read()
|
datadir = os.popen("/usr/bin/mysql -e \"show variables\" | "
|
||||||
socket = os.popen("/usr/bin/mysql -e \"show variables\" | "
|
"/bin/grep datadir | awk"
|
||||||
"/bin/grep \"^socket\" | "
|
" '{print($2)}' | tr -d '\n'").read()
|
||||||
"awk '{print($2)}' | tr -d '\n'").read()
|
socket = os.popen("/usr/bin/mysql -e \"show variables\" | "
|
||||||
data = dict(version=version, host=host, port=port,
|
"/bin/grep \"^socket\" | "
|
||||||
wait_timeout=wait_timeout,
|
"awk '{print($2)}' | tr -d '\n'").read()
|
||||||
interactive_timeout=interactive_timeout,
|
data = dict(version=version, host=host, port=port,
|
||||||
max_used_connections=max_used_connections,
|
wait_timeout=wait_timeout,
|
||||||
datadir=datadir, socket=socket)
|
interactive_timeout=interactive_timeout,
|
||||||
self.app.render((data), 'info_mysql.mustache')
|
max_used_connections=max_used_connections,
|
||||||
|
datadir=datadir, socket=socket)
|
||||||
@expose(hide=True)
|
self.app.render((data), 'info_mysql.mustache')
|
||||||
def default(self):
|
|
||||||
"""default function for info"""
|
@expose(hide=True)
|
||||||
if (not self.app.pargs.nginx and not self.app.pargs.php and
|
def default(self):
|
||||||
not self.app.pargs.mysql and not self.app.pargs.php73):
|
"""default function for info"""
|
||||||
self.app.pargs.nginx = True
|
if (not self.app.pargs.nginx and not self.app.pargs.php and
|
||||||
self.app.pargs.php = True
|
not self.app.pargs.mysql and not self.app.pargs.php73):
|
||||||
self.app.pargs.mysql = True
|
self.app.pargs.nginx = True
|
||||||
if WOAptGet.is_installed(self, 'php7.3-fpm'):
|
self.app.pargs.php = True
|
||||||
self.app.pargs.php73 = True
|
self.app.pargs.mysql = True
|
||||||
|
if WOAptGet.is_installed(self, 'php7.3-fpm'):
|
||||||
if self.app.pargs.nginx:
|
self.app.pargs.php73 = True
|
||||||
if (WOAptGet.is_installed(self, 'nginx-custom') or
|
|
||||||
WOAptGet.is_installed(self, 'nginx-wo')):
|
if self.app.pargs.nginx:
|
||||||
self.info_nginx()
|
if (WOAptGet.is_installed(self, 'nginx-custom') or
|
||||||
else:
|
WOAptGet.is_installed(self, 'nginx-wo')):
|
||||||
Log.error(self, "Nginx is not installed")
|
self.info_nginx()
|
||||||
|
else:
|
||||||
if self.app.pargs.php:
|
Log.error(self, "Nginx is not installed")
|
||||||
if WOAptGet.is_installed(self, 'php7.2-fpm'):
|
|
||||||
self.info_php()
|
if self.app.pargs.php:
|
||||||
else:
|
if WOAptGet.is_installed(self, 'php7.2-fpm'):
|
||||||
Log.error(self, "PHP 7.2 is not installed")
|
self.info_php()
|
||||||
|
else:
|
||||||
if self.app.pargs.php73:
|
Log.error(self, "PHP 7.2 is not installed")
|
||||||
if WOAptGet.is_installed(self, 'php7.3-fpm'):
|
|
||||||
self.info_php73()
|
if self.app.pargs.php73:
|
||||||
else:
|
if WOAptGet.is_installed(self, 'php7.3-fpm'):
|
||||||
Log.error(self, "PHP 7.3 is not installed")
|
self.info_php73()
|
||||||
|
else:
|
||||||
if self.app.pargs.mysql:
|
Log.error(self, "PHP 7.3 is not installed")
|
||||||
if WOShellExec.cmd_exec(self, "/usr/bin/mysqladmin ping"):
|
|
||||||
self.info_mysql()
|
if self.app.pargs.mysql:
|
||||||
else:
|
if WOShellExec.cmd_exec(self, "/usr/bin/mysqladmin ping"):
|
||||||
Log.error(self, "MySQL is not installed")
|
self.info_mysql()
|
||||||
|
else:
|
||||||
|
Log.error(self, "MySQL is not installed")
|
||||||
def load(app):
|
|
||||||
# register the plugin class.. this only happens if the plugin is enabled
|
|
||||||
handler.register(WOInfoController)
|
def load(app):
|
||||||
|
# register the plugin class.. this only happens if the plugin is enabled
|
||||||
# register a hook (function) to run after arguments are parsed.
|
handler.register(WOInfoController)
|
||||||
hook.register('post_argument_parsing', wo_info_hook)
|
|
||||||
|
# register a hook (function) to run after arguments are parsed.
|
||||||
|
hook.register('post_argument_parsing', wo_info_hook)
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import os
|
|||||||
|
|
||||||
from cement.core import handler, hook
|
from cement.core import handler, hook
|
||||||
from cement.core.controller import CementBaseController, expose
|
from cement.core.controller import CementBaseController, expose
|
||||||
|
|
||||||
from wo.cli.plugins.site_functions import logwatch
|
from wo.cli.plugins.site_functions import logwatch
|
||||||
from wo.core.fileutils import WOFileUtils
|
from wo.core.fileutils import WOFileUtils
|
||||||
from wo.core.logging import Log
|
from wo.core.logging import Log
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
from cement.core import handler, hook
|
from cement.core import handler, hook
|
||||||
from cement.core.controller import CementBaseController, expose
|
from cement.core.controller import CementBaseController, expose
|
||||||
|
|
||||||
from wo.core.aptget import WOAptGet
|
from wo.core.aptget import WOAptGet
|
||||||
from wo.core.logging import Log
|
from wo.core.logging import Log
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
from sqlalchemy import Column, DateTime, String, Integer, Boolean, func
|
from sqlalchemy import Boolean, Column, DateTime, Integer, String, func
|
||||||
|
|
||||||
from wo.core.database import Base
|
from wo.core.database import Base
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,15 @@
|
|||||||
from cement.core.controller import CementBaseController, expose
|
import getpass
|
||||||
|
import random
|
||||||
|
import string
|
||||||
|
|
||||||
from cement.core import handler, hook
|
from cement.core import handler, hook
|
||||||
|
from cement.core.controller import CementBaseController, expose
|
||||||
|
|
||||||
|
from wo.core.git import WOGit
|
||||||
|
from wo.core.logging import Log
|
||||||
|
from wo.core.services import WOService
|
||||||
from wo.core.shellexec import WOShellExec
|
from wo.core.shellexec import WOShellExec
|
||||||
from wo.core.variables import WOVariables
|
from wo.core.variables import WOVariables
|
||||||
from wo.core.logging import Log
|
|
||||||
from wo.core.git import WOGit
|
|
||||||
from wo.core.services import WOService
|
|
||||||
import string
|
|
||||||
import random
|
|
||||||
import getpass
|
|
||||||
|
|
||||||
|
|
||||||
def wo_secure_hook(app):
|
def wo_secure_hook(app):
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from cement.core.controller import CementBaseController, expose
|
|||||||
from wo.cli.plugins.site_functions import *
|
from wo.cli.plugins.site_functions import *
|
||||||
from wo.cli.plugins.sitedb import (addNewSite, deleteSiteInfo, getAllsites,
|
from wo.cli.plugins.sitedb import (addNewSite, deleteSiteInfo, getAllsites,
|
||||||
getSiteInfo, updateSiteInfo)
|
getSiteInfo, updateSiteInfo)
|
||||||
from wo.core.domainvalidate import GetDomainlevel, ValidateDomain
|
from wo.core.domainvalidate import DMN
|
||||||
from wo.core.fileutils import WOFileUtils
|
from wo.core.fileutils import WOFileUtils
|
||||||
from wo.core.git import WOGit
|
from wo.core.git import WOGit
|
||||||
from wo.core.logging import Log
|
from wo.core.logging import Log
|
||||||
@@ -57,7 +57,7 @@ class WOSiteController(CementBaseController):
|
|||||||
|
|
||||||
pargs.site_name = pargs.site_name.strip()
|
pargs.site_name = pargs.site_name.strip()
|
||||||
# validate domain name
|
# validate domain name
|
||||||
(wo_domain, wo_www_domain) = ValidateDomain(pargs.site_name)
|
(wo_domain, wo_www_domain) = DMN.validatedomain(self, pargs.site_name)
|
||||||
|
|
||||||
# check if site exists
|
# check if site exists
|
||||||
if not check_domain_exists(self, wo_domain):
|
if not check_domain_exists(self, wo_domain):
|
||||||
@@ -94,7 +94,7 @@ class WOSiteController(CementBaseController):
|
|||||||
Log.debug(self, str(e))
|
Log.debug(self, str(e))
|
||||||
Log.error(self, 'could not input site name')
|
Log.error(self, 'could not input site name')
|
||||||
pargs.site_name = pargs.site_name.strip()
|
pargs.site_name = pargs.site_name.strip()
|
||||||
(wo_domain, wo_www_domain) = ValidateDomain(pargs.site_name)
|
(wo_domain, wo_www_domain) = DMN.validatedomain(self, pargs.site_name)
|
||||||
# check if site exists
|
# check if site exists
|
||||||
if not check_domain_exists(self, wo_domain):
|
if not check_domain_exists(self, wo_domain):
|
||||||
Log.error(self, "site {0} does not exist".format(wo_domain))
|
Log.error(self, "site {0} does not exist".format(wo_domain))
|
||||||
@@ -134,8 +134,8 @@ class WOSiteController(CementBaseController):
|
|||||||
Log.debug(self, str(e))
|
Log.debug(self, str(e))
|
||||||
Log.error(self, 'could not input site name')
|
Log.error(self, 'could not input site name')
|
||||||
pargs.site_name = pargs.site_name.strip()
|
pargs.site_name = pargs.site_name.strip()
|
||||||
(wo_domain, wo_www_domain) = ValidateDomain(pargs.site_name)
|
(wo_domain, wo_www_domain) = DMN.validatedomain(self, pargs.site_name)
|
||||||
(wo_domain_type, wo_root_domain) = GetDomainlevel(wo_domain)
|
(wo_domain_type, wo_root_domain) = DMN.getdomainlevel(self, wo_domain)
|
||||||
wo_db_name = ''
|
wo_db_name = ''
|
||||||
wo_db_user = ''
|
wo_db_user = ''
|
||||||
wo_db_pass = ''
|
wo_db_pass = ''
|
||||||
@@ -163,9 +163,9 @@ class WOSiteController(CementBaseController):
|
|||||||
if os.path.islink("{0}/conf/nginx/ssl.conf"
|
if os.path.islink("{0}/conf/nginx/ssl.conf"
|
||||||
.format(wo_site_webroot)):
|
.format(wo_site_webroot)):
|
||||||
sslexpiry = str(
|
sslexpiry = str(
|
||||||
SSL.getExpirationDate(self, wo_root_domain))
|
SSL.getexpirationdays(self, wo_root_domain))
|
||||||
else:
|
else:
|
||||||
sslexpiry = str(SSL.getExpirationDate(self, wo_domain))
|
sslexpiry = str(SSL.getexpirationdays(self, wo_domain))
|
||||||
else:
|
else:
|
||||||
sslprovider = ''
|
sslprovider = ''
|
||||||
sslexpiry = ''
|
sslexpiry = ''
|
||||||
@@ -186,7 +186,7 @@ class WOSiteController(CementBaseController):
|
|||||||
def log(self):
|
def log(self):
|
||||||
pargs = self.app.pargs
|
pargs = self.app.pargs
|
||||||
pargs.site_name = pargs.site_name.strip()
|
pargs.site_name = pargs.site_name.strip()
|
||||||
(wo_domain, wo_www_domain) = ValidateDomain(pargs.site_name)
|
(wo_domain, wo_www_domain) = DMN.validatedomain(self, pargs.site_name)
|
||||||
wo_site_webroot = getSiteInfo(self, wo_domain).site_path
|
wo_site_webroot = getSiteInfo(self, wo_domain).site_path
|
||||||
|
|
||||||
if not check_domain_exists(self, wo_domain):
|
if not check_domain_exists(self, wo_domain):
|
||||||
@@ -208,7 +208,7 @@ class WOSiteController(CementBaseController):
|
|||||||
Log.error(self, 'could not input site name')
|
Log.error(self, 'could not input site name')
|
||||||
# TODO Write code for wo site edit command here
|
# TODO Write code for wo site edit command here
|
||||||
pargs.site_name = pargs.site_name.strip()
|
pargs.site_name = pargs.site_name.strip()
|
||||||
(wo_domain, wo_www_domain) = ValidateDomain(pargs.site_name)
|
(wo_domain, wo_www_domain) = DMN.validatedomain(self, pargs.site_name)
|
||||||
|
|
||||||
if not check_domain_exists(self, wo_domain):
|
if not check_domain_exists(self, wo_domain):
|
||||||
Log.error(self, "site {0} does not exist".format(wo_domain))
|
Log.error(self, "site {0} does not exist".format(wo_domain))
|
||||||
@@ -239,7 +239,7 @@ class WOSiteController(CementBaseController):
|
|||||||
Log.error(self, 'Unable to read input, please try again')
|
Log.error(self, 'Unable to read input, please try again')
|
||||||
|
|
||||||
pargs.site_name = pargs.site_name.strip()
|
pargs.site_name = pargs.site_name.strip()
|
||||||
(wo_domain, wo_www_domain) = ValidateDomain(pargs.site_name)
|
(wo_domain, wo_www_domain) = DMN.validatedomain(self, pargs.site_name)
|
||||||
|
|
||||||
if not check_domain_exists(self, wo_domain):
|
if not check_domain_exists(self, wo_domain):
|
||||||
Log.error(self, "site {0} does not exist".format(wo_domain))
|
Log.error(self, "site {0} does not exist".format(wo_domain))
|
||||||
@@ -280,7 +280,7 @@ class WOSiteEditController(CementBaseController):
|
|||||||
Log.error(self, 'Unable to read input, Please try again')
|
Log.error(self, 'Unable to read input, Please try again')
|
||||||
|
|
||||||
pargs.site_name = pargs.site_name.strip()
|
pargs.site_name = pargs.site_name.strip()
|
||||||
(wo_domain, wo_www_domain) = ValidateDomain(pargs.site_name)
|
(wo_domain, wo_www_domain) = DMN.validatedomain(self, pargs.site_name)
|
||||||
|
|
||||||
if not check_domain_exists(self, wo_domain):
|
if not check_domain_exists(self, wo_domain):
|
||||||
Log.error(self, "site {0} does not exist".format(wo_domain))
|
Log.error(self, "site {0} does not exist".format(wo_domain))
|
||||||
@@ -425,7 +425,7 @@ class WOSiteCreateController(CementBaseController):
|
|||||||
Log.error(self, "Unable to input site name, Please try again!")
|
Log.error(self, "Unable to input site name, Please try again!")
|
||||||
|
|
||||||
pargs.site_name = pargs.site_name.strip()
|
pargs.site_name = pargs.site_name.strip()
|
||||||
(wo_domain, wo_www_domain) = ValidateDomain(pargs.site_name)
|
(wo_domain, wo_www_domain) = DMN.validatedomain(self, pargs.site_name)
|
||||||
if not wo_domain.strip():
|
if not wo_domain.strip():
|
||||||
Log.error(self, "Invalid domain name, "
|
Log.error(self, "Invalid domain name, "
|
||||||
"Provide valid domain name")
|
"Provide valid domain name")
|
||||||
@@ -718,7 +718,7 @@ class WOSiteCreateController(CementBaseController):
|
|||||||
"`tail /var/log/wo/wordops.log` and please try again")
|
"`tail /var/log/wo/wordops.log` and please try again")
|
||||||
|
|
||||||
if pargs.letsencrypt:
|
if pargs.letsencrypt:
|
||||||
(wo_domain_type, wo_root_domain) = GetDomainlevel(wo_domain)
|
(wo_domain_type, wo_root_domain) = DMN.getdomainlevel(self, wo_domain)
|
||||||
data['letsencrypt'] = True
|
data['letsencrypt'] = True
|
||||||
letsencrypt = True
|
letsencrypt = True
|
||||||
if data['letsencrypt'] is True:
|
if data['letsencrypt'] is True:
|
||||||
@@ -745,9 +745,9 @@ class WOSiteCreateController(CementBaseController):
|
|||||||
# check if a wildcard cert for the root domain exist
|
# check if a wildcard cert for the root domain exist
|
||||||
Log.debug(self, "checkWildcardExist on *.{0}"
|
Log.debug(self, "checkWildcardExist on *.{0}"
|
||||||
.format(wo_root_domain))
|
.format(wo_root_domain))
|
||||||
isWildcard = checkWildcardExist(self, wo_root_domain)
|
iswildcard = SSL.checkwildcardexist(self, wo_root_domain)
|
||||||
Log.debug(self, "isWildcard = {0}".format(isWildcard))
|
Log.debug(self, "iswildcard = {0}".format(iswildcard))
|
||||||
if isWildcard:
|
if iswildcard:
|
||||||
Log.info(self, "Using existing Wildcard SSL "
|
Log.info(self, "Using existing Wildcard SSL "
|
||||||
"certificate from {0} to secure {1}"
|
"certificate from {0} to secure {1}"
|
||||||
.format(wo_root_domain, wo_domain))
|
.format(wo_root_domain, wo_domain))
|
||||||
@@ -769,7 +769,7 @@ class WOSiteCreateController(CementBaseController):
|
|||||||
if pargs.hsts:
|
if pargs.hsts:
|
||||||
setupHsts(self, wo_domain)
|
setupHsts(self, wo_domain)
|
||||||
|
|
||||||
site_url_https(self, wo_domain)
|
SSL.siteurlhttps(self, wo_domain)
|
||||||
if not WOService.reload_service(self, 'nginx'):
|
if not WOService.reload_service(self, 'nginx'):
|
||||||
Log.error(self, "service nginx reload failed. "
|
Log.error(self, "service nginx reload failed. "
|
||||||
"check issues with `nginx -t` command")
|
"check issues with `nginx -t` command")
|
||||||
@@ -931,7 +931,7 @@ class WOSiteUpdateController(CementBaseController):
|
|||||||
Log.error(self, 'Unable to input site name, Please try again!')
|
Log.error(self, 'Unable to input site name, Please try again!')
|
||||||
|
|
||||||
pargs.site_name = pargs.site_name.strip()
|
pargs.site_name = pargs.site_name.strip()
|
||||||
(wo_domain, wo_www_domain) = ValidateDomain(pargs.site_name)
|
(wo_domain, wo_www_domain) = DMN.validatedomain(self, pargs.site_name)
|
||||||
wo_site_webroot = WOVariables.wo_webroot + wo_domain
|
wo_site_webroot = WOVariables.wo_webroot + wo_domain
|
||||||
check_site = getSiteInfo(self, wo_domain)
|
check_site = getSiteInfo(self, wo_domain)
|
||||||
|
|
||||||
@@ -1004,21 +1004,23 @@ class WOSiteUpdateController(CementBaseController):
|
|||||||
data['currcachetype'] = oldcachetype
|
data['currcachetype'] = oldcachetype
|
||||||
|
|
||||||
if stype == 'php':
|
if stype == 'php':
|
||||||
data = dict(site_name=wo_domain, www_domain=wo_www_domain,
|
data = dict(
|
||||||
static=False, basic=True, wp=False, wpfc=False,
|
site_name=wo_domain, www_domain=wo_www_domain,
|
||||||
wpsc=False, wpredis=False, wprocket=False, wpce=False,
|
static=False, basic=True, wp=False, wpfc=False,
|
||||||
multisite=False, wpsubdir=False, webroot=wo_site_webroot,
|
wpsc=False, wpredis=False, wprocket=False, wpce=False,
|
||||||
currsitetype=oldsitetype, currcachetype=oldcachetype)
|
multisite=False, wpsubdir=False, webroot=wo_site_webroot,
|
||||||
|
currsitetype=oldsitetype, currcachetype=oldcachetype)
|
||||||
|
|
||||||
elif stype in ['mysql', 'wp', 'wpsubdir', 'wpsubdomain']:
|
elif stype in ['mysql', 'wp', 'wpsubdir', 'wpsubdomain']:
|
||||||
|
|
||||||
data = dict(site_name=wo_domain, www_domain=wo_www_domain,
|
data = dict(
|
||||||
static=False, basic=True, wp=False, wpfc=False,
|
site_name=wo_domain, www_domain=wo_www_domain,
|
||||||
wpsc=False, wpredis=False, wprocket=False, wpce=False,
|
static=False, basic=True, wp=False, wpfc=False,
|
||||||
multisite=False, wpsubdir=False, webroot=wo_site_webroot,
|
wpsc=False, wpredis=False, wprocket=False, wpce=False,
|
||||||
wo_db_name='', wo_db_user='', wo_db_pass='',
|
multisite=False, wpsubdir=False, webroot=wo_site_webroot,
|
||||||
wo_db_host='',
|
wo_db_name='', wo_db_user='', wo_db_pass='',
|
||||||
currsitetype=oldsitetype, currcachetype=oldcachetype)
|
wo_db_host='',
|
||||||
|
currsitetype=oldsitetype, currcachetype=oldcachetype)
|
||||||
|
|
||||||
if stype in ['wp', 'wpsubdir', 'wpsubdomain']:
|
if stype in ['wp', 'wpsubdir', 'wpsubdomain']:
|
||||||
data['wp'] = True
|
data['wp'] = True
|
||||||
@@ -1031,10 +1033,11 @@ class WOSiteUpdateController(CementBaseController):
|
|||||||
|
|
||||||
if pargs.php73:
|
if pargs.php73:
|
||||||
if not data:
|
if not data:
|
||||||
data = dict(site_name=wo_domain, www_domain=wo_www_domain,
|
data = dict(
|
||||||
currsitetype=oldsitetype,
|
site_name=wo_domain, www_domain=wo_www_domain,
|
||||||
currcachetype=oldcachetype,
|
currsitetype=oldsitetype,
|
||||||
webroot=wo_site_webroot)
|
currcachetype=oldcachetype,
|
||||||
|
webroot=wo_site_webroot)
|
||||||
stype = oldsitetype
|
stype = oldsitetype
|
||||||
cache = oldcachetype
|
cache = oldcachetype
|
||||||
if oldsitetype == 'html' or oldsitetype == 'proxy':
|
if oldsitetype == 'html' or oldsitetype == 'proxy':
|
||||||
@@ -1126,7 +1129,7 @@ class WOSiteUpdateController(CementBaseController):
|
|||||||
pargs.php73 = False
|
pargs.php73 = False
|
||||||
|
|
||||||
if pargs.letsencrypt:
|
if pargs.letsencrypt:
|
||||||
(wo_domain_type, wo_root_domain) = GetDomainlevel(wo_domain)
|
(wo_domain_type, wo_root_domain) = DMN.getdomainlevel(self, wo_domain)
|
||||||
if pargs.letsencrypt == 'on':
|
if pargs.letsencrypt == 'on':
|
||||||
data['letsencrypt'] = True
|
data['letsencrypt'] = True
|
||||||
letsencrypt = True
|
letsencrypt = True
|
||||||
@@ -1174,7 +1177,7 @@ class WOSiteUpdateController(CementBaseController):
|
|||||||
|
|
||||||
# --letsencrypt=renew code goes here
|
# --letsencrypt=renew code goes here
|
||||||
if pargs.letsencrypt == "renew" and not pargs.all:
|
if pargs.letsencrypt == "renew" and not pargs.all:
|
||||||
expiry_days = SSL.getExpirationDays(self, wo_domain)
|
expiry_days = SSL.getexpirationdays(self, wo_domain)
|
||||||
min_expiry_days = 45
|
min_expiry_days = 45
|
||||||
if check_ssl:
|
if check_ssl:
|
||||||
if (expiry_days <= min_expiry_days):
|
if (expiry_days <= min_expiry_days):
|
||||||
@@ -1196,12 +1199,12 @@ class WOSiteUpdateController(CementBaseController):
|
|||||||
"check issues with `nginx -t` command")
|
"check issues with `nginx -t` command")
|
||||||
Log.info(self, "SUCCESS: Certificate was successfully renewed For"
|
Log.info(self, "SUCCESS: Certificate was successfully renewed For"
|
||||||
" https://{0}".format(wo_domain))
|
" https://{0}".format(wo_domain))
|
||||||
if (SSL.getExpirationDays(self, wo_domain) > 0):
|
if (SSL.getexpirationdays(self, wo_domain) > 0):
|
||||||
Log.info(self, "Your cert will expire within " +
|
Log.info(self, "Your cert will expire within " +
|
||||||
str(SSL.getExpirationDays(self, wo_domain)) +
|
str(SSL.getexpirationdays(self, wo_domain)) +
|
||||||
" days.")
|
" days.")
|
||||||
Log.info(self, "Expiration date: " +
|
Log.info(self, "Expiration date: " +
|
||||||
str(SSL.getExpirationDate(self, wo_domain)))
|
str(SSL.getexpirationdate(self, wo_domain)))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
Log.warn(
|
Log.warn(
|
||||||
@@ -1236,12 +1239,12 @@ class WOSiteUpdateController(CementBaseController):
|
|||||||
self, "You have more than 45 days with the current "
|
self, "You have more than 45 days with the current "
|
||||||
"certificate - refusing to run.\n")
|
"certificate - refusing to run.\n")
|
||||||
|
|
||||||
if (SSL.getExpirationDays(self, wo_domain) > 0):
|
if (SSL.getexpirationdays(self, wo_domain) > 0):
|
||||||
Log.info(self, "Your cert will expire within " +
|
Log.info(self, "Your cert will expire within " +
|
||||||
str(SSL.getExpirationDays(self, wo_domain)) +
|
str(SSL.getexpirationdays(self, wo_domain)) +
|
||||||
" days.")
|
" days.")
|
||||||
Log.info(self, "Expiration date: \n\n" +
|
Log.info(self, "Expiration date: \n\n" +
|
||||||
str(SSL.getExpirationDate(self, wo_domain)))
|
str(SSL.getexpirationdate(self, wo_domain)))
|
||||||
return 0
|
return 0
|
||||||
# else:
|
# else:
|
||||||
# Log.warn(self, "Your cert already EXPIRED !
|
# Log.warn(self, "Your cert already EXPIRED !
|
||||||
@@ -1354,11 +1357,11 @@ class WOSiteUpdateController(CementBaseController):
|
|||||||
# check if a wildcard cert for the root domain exist
|
# check if a wildcard cert for the root domain exist
|
||||||
Log.debug(self, "checkWildcardExist on *.{0}"
|
Log.debug(self, "checkWildcardExist on *.{0}"
|
||||||
.format(wo_root_domain))
|
.format(wo_root_domain))
|
||||||
isWildcard = checkWildcardExist(self, wo_root_domain)
|
iswildcard = SSL.checkwildcardexist(self, wo_root_domain)
|
||||||
Log.debug(self, "isWildcard = {0}".format(isWildcard))
|
Log.debug(self, "iswildcard = {0}".format(iswildcard))
|
||||||
if not os.path.isfile("{0}/conf/nginx/ssl.conf.disabled"):
|
if not os.path.isfile("{0}/conf/nginx/ssl.conf.disabled"):
|
||||||
if wo_subdomain:
|
if wo_subdomain:
|
||||||
if isWildcard:
|
if iswildcard:
|
||||||
Log.info(self, "Using existing Wildcard SSL "
|
Log.info(self, "Using existing Wildcard SSL "
|
||||||
"certificate from {0} to secure {1}"
|
"certificate from {0} to secure {1}"
|
||||||
.format(wo_root_domain, wo_domain))
|
.format(wo_root_domain, wo_domain))
|
||||||
@@ -1375,9 +1378,6 @@ class WOSiteUpdateController(CementBaseController):
|
|||||||
else:
|
else:
|
||||||
setupLetsEncrypt(self, wo_domain, wo_subdomain,
|
setupLetsEncrypt(self, wo_domain, wo_subdomain,
|
||||||
wo_wildcard, wo_dns, wo_acme_dns)
|
wo_wildcard, wo_dns, wo_acme_dns)
|
||||||
|
|
||||||
httpsRedirect(self, wo_domain, True, wo_wildcard)
|
|
||||||
site_url_https(self, wo_domain)
|
|
||||||
else:
|
else:
|
||||||
WOFileUtils.mvfile(self, "{0}/conf/nginx/ssl.conf.disabled"
|
WOFileUtils.mvfile(self, "{0}/conf/nginx/ssl.conf.disabled"
|
||||||
.format(wo_site_webroot),
|
.format(wo_site_webroot),
|
||||||
@@ -1389,8 +1389,8 @@ class WOSiteUpdateController(CementBaseController):
|
|||||||
'/etc/nginx/conf.d/force-ssl-{0}.conf'
|
'/etc/nginx/conf.d/force-ssl-{0}.conf'
|
||||||
.format(wo_domain))
|
.format(wo_domain))
|
||||||
|
|
||||||
httpsRedirect(self, wo_domain, True, wo_wildcard)
|
httpsRedirect(self, wo_domain, True, wo_wildcard)
|
||||||
site_url_https(self, wo_domain)
|
SSL.siteurlhttps(self, wo_domain)
|
||||||
|
|
||||||
if not WOService.reload_service(self, 'nginx'):
|
if not WOService.reload_service(self, 'nginx'):
|
||||||
Log.error(self, "service nginx reload failed. "
|
Log.error(self, "service nginx reload failed. "
|
||||||
@@ -1398,20 +1398,20 @@ class WOSiteUpdateController(CementBaseController):
|
|||||||
Log.info(self, "Congratulations! Successfully "
|
Log.info(self, "Congratulations! Successfully "
|
||||||
"Configured SSL for Site "
|
"Configured SSL for Site "
|
||||||
" https://{0}".format(wo_domain))
|
" https://{0}".format(wo_domain))
|
||||||
if wo_subdomain and isWildcard:
|
if wo_subdomain and iswildcard:
|
||||||
if (SSL.getExpirationDays(self, wo_root_domain) > 0):
|
if (SSL.getexpirationdays(self, wo_root_domain) > 0):
|
||||||
Log.info(
|
Log.info(
|
||||||
self, "Your cert will expire within " +
|
self, "Your cert will expire within " +
|
||||||
str(SSL.getExpirationDays(self, wo_root_domain)) +
|
str(SSL.getexpirationdays(self, wo_root_domain)) +
|
||||||
" days.")
|
" days.")
|
||||||
else:
|
else:
|
||||||
Log.warn(
|
Log.warn(
|
||||||
self, "Your cert already EXPIRED ! "
|
self, "Your cert already EXPIRED ! "
|
||||||
".PLEASE renew soon . ")
|
".PLEASE renew soon . ")
|
||||||
else:
|
else:
|
||||||
if (SSL.getExpirationDays(self, wo_domain) > 0):
|
if (SSL.getexpirationdays(self, wo_domain) > 0):
|
||||||
Log.info(self, "Your cert will expire within " +
|
Log.info(self, "Your cert will expire within " +
|
||||||
str(SSL.getExpirationDays(self, wo_domain)) +
|
str(SSL.getexpirationdays(self, wo_domain)) +
|
||||||
" days.")
|
" days.")
|
||||||
else:
|
else:
|
||||||
Log.warn(
|
Log.warn(
|
||||||
@@ -1575,26 +1575,27 @@ class WOSiteUpdateController(CementBaseController):
|
|||||||
(data['wpfc'])) or (oldsitetype == 'wp' and
|
(data['wpfc'])) or (oldsitetype == 'wp' and
|
||||||
data['multisite'] and data['wpfc'])):
|
data['multisite'] and data['wpfc'])):
|
||||||
try:
|
try:
|
||||||
plugin_data_object = {"log_level": "INFO",
|
plugin_data_object = {
|
||||||
"log_filesize": 5,
|
"log_level": "INFO",
|
||||||
"enable_purge": 1,
|
"log_filesize": 5,
|
||||||
"enable_map": "0",
|
"enable_purge": 1,
|
||||||
"enable_log": 0,
|
"enable_map": "0",
|
||||||
"enable_stamp": 1,
|
"enable_log": 0,
|
||||||
"purge_homepage_on_new": 1,
|
"enable_stamp": 1,
|
||||||
"purge_homepage_on_edit": 1,
|
"purge_homepage_on_new": 1,
|
||||||
"purge_homepage_on_del": 1,
|
"purge_homepage_on_edit": 1,
|
||||||
"purge_archive_on_new": 1,
|
"purge_homepage_on_del": 1,
|
||||||
"purge_archive_on_edit": 0,
|
"purge_archive_on_new": 1,
|
||||||
"purge_archive_on_del": 0,
|
"purge_archive_on_edit": 0,
|
||||||
"purge_archive_on_new_comment": 0,
|
"purge_archive_on_del": 0,
|
||||||
"purge_archive_on_deleted_comment": 0,
|
"purge_archive_on_new_comment": 0,
|
||||||
"purge_page_on_mod": 1,
|
"purge_archive_on_deleted_comment": 0,
|
||||||
"purge_page_on_new_comment": 1,
|
"purge_page_on_mod": 1,
|
||||||
"purge_page_on_deleted_comment": 1,
|
"purge_page_on_new_comment": 1,
|
||||||
"cache_method": "enable_fastcgi",
|
"purge_page_on_deleted_comment": 1,
|
||||||
"purge_method": "get_request",
|
"cache_method": "enable_fastcgi",
|
||||||
"redis_hostname": "127.0.0.1",
|
"purge_method": "get_request",
|
||||||
|
"redis_hostname": "127.0.0.1",
|
||||||
"redis_port": "6379",
|
"redis_port": "6379",
|
||||||
"redis_prefix": "nginx-cache:"}
|
"redis_prefix": "nginx-cache:"}
|
||||||
plugin_data = json.dumps(plugin_data_object)
|
plugin_data = json.dumps(plugin_data_object)
|
||||||
@@ -1616,26 +1617,27 @@ class WOSiteUpdateController(CementBaseController):
|
|||||||
data['multisite'] and
|
data['multisite'] and
|
||||||
data['wpredis'])):
|
data['wpredis'])):
|
||||||
try:
|
try:
|
||||||
plugin_data_object = {"log_level": "INFO",
|
plugin_data_object = {
|
||||||
"log_filesize": 5,
|
"log_level": "INFO",
|
||||||
"enable_purge": 1,
|
"log_filesize": 5,
|
||||||
"enable_map": "0",
|
"enable_purge": 1,
|
||||||
"enable_log": 0,
|
"enable_map": "0",
|
||||||
"enable_stamp": 1,
|
"enable_log": 0,
|
||||||
"purge_homepage_on_new": 1,
|
"enable_stamp": 1,
|
||||||
"purge_homepage_on_edit": 1,
|
"purge_homepage_on_new": 1,
|
||||||
"purge_homepage_on_del": 1,
|
"purge_homepage_on_edit": 1,
|
||||||
"purge_archive_on_new": 1,
|
"purge_homepage_on_del": 1,
|
||||||
"purge_archive_on_edit": 0,
|
"purge_archive_on_new": 1,
|
||||||
"purge_archive_on_del": 0,
|
"purge_archive_on_edit": 0,
|
||||||
"purge_archive_on_new_comment": 0,
|
"purge_archive_on_del": 0,
|
||||||
"purge_archive_on_deleted_comment": 0,
|
"purge_archive_on_new_comment": 0,
|
||||||
"purge_page_on_mod": 1,
|
"purge_archive_on_deleted_comment": 0,
|
||||||
"purge_page_on_new_comment": 1,
|
"purge_page_on_mod": 1,
|
||||||
"purge_page_on_deleted_comment": 1,
|
"purge_page_on_new_comment": 1,
|
||||||
"cache_method": "enable_redis",
|
"purge_page_on_deleted_comment": 1,
|
||||||
"purge_method": "get_request",
|
"cache_method": "enable_redis",
|
||||||
"redis_hostname": "127.0.0.1",
|
"purge_method": "get_request",
|
||||||
|
"redis_hostname": "127.0.0.1",
|
||||||
"redis_port": "6379",
|
"redis_port": "6379",
|
||||||
"redis_prefix": "nginx-cache:"}
|
"redis_prefix": "nginx-cache:"}
|
||||||
plugin_data = json.dumps(plugin_data_object)
|
plugin_data = json.dumps(plugin_data_object)
|
||||||
@@ -1653,26 +1655,27 @@ class WOSiteUpdateController(CementBaseController):
|
|||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
# disable nginx-helper
|
# disable nginx-helper
|
||||||
plugin_data_object = {"log_level": "INFO",
|
plugin_data_object = {
|
||||||
"log_filesize": 5,
|
"log_level": "INFO",
|
||||||
"enable_purge": 0,
|
"log_filesize": 5,
|
||||||
"enable_map": 0,
|
"enable_purge": 0,
|
||||||
"enable_log": 0,
|
"enable_map": 0,
|
||||||
"enable_stamp": 0,
|
"enable_log": 0,
|
||||||
"purge_homepage_on_new": 1,
|
"enable_stamp": 0,
|
||||||
"purge_homepage_on_edit": 1,
|
"purge_homepage_on_new": 1,
|
||||||
"purge_homepage_on_del": 1,
|
"purge_homepage_on_edit": 1,
|
||||||
"purge_archive_on_new": 1,
|
"purge_homepage_on_del": 1,
|
||||||
"purge_archive_on_edit": 0,
|
"purge_archive_on_new": 1,
|
||||||
"purge_archive_on_del": 0,
|
"purge_archive_on_edit": 0,
|
||||||
"purge_archive_on_new_comment": 0,
|
"purge_archive_on_del": 0,
|
||||||
"purge_archive_on_deleted_comment": 0,
|
"purge_archive_on_new_comment": 0,
|
||||||
"purge_page_on_mod": 1,
|
"purge_archive_on_deleted_comment": 0,
|
||||||
"purge_page_on_new_comment": 1,
|
"purge_page_on_mod": 1,
|
||||||
"purge_page_on_deleted_comment": 1,
|
"purge_page_on_new_comment": 1,
|
||||||
"cache_method": "enable_redis",
|
"purge_page_on_deleted_comment": 1,
|
||||||
"purge_method": "get_request",
|
"cache_method": "enable_redis",
|
||||||
"redis_hostname": "127.0.0.1",
|
"purge_method": "get_request",
|
||||||
|
"redis_hostname": "127.0.0.1",
|
||||||
"redis_port": "6379",
|
"redis_port": "6379",
|
||||||
"redis_prefix": "nginx-cache:"}
|
"redis_prefix": "nginx-cache:"}
|
||||||
plugin_data = json.dumps(plugin_data_object)
|
plugin_data = json.dumps(plugin_data_object)
|
||||||
@@ -1688,24 +1691,26 @@ class WOSiteUpdateController(CementBaseController):
|
|||||||
"and please try again")
|
"and please try again")
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
if ((oldcachetype in ['wpsc', 'basic', 'wpfc', 'wprocket', 'wpredis'] and
|
if ((oldcachetype in ['wpsc', 'basic',
|
||||||
|
'wpfc', 'wprocket', 'wpredis'] and
|
||||||
(data['wpce'])) or (oldsitetype == 'wp' and
|
(data['wpce'])) or (oldsitetype == 'wp' and
|
||||||
data['multisite'] and
|
data['multisite'] and
|
||||||
data['wpce'])):
|
data['wpce'])):
|
||||||
try:
|
try:
|
||||||
installwp_plugin(self, 'cache-enabler', data)
|
installwp_plugin(self, 'cache-enabler', data)
|
||||||
# setup cache-enabler
|
# setup cache-enabler
|
||||||
plugin_data_object = {"expires": 24,
|
plugin_data_object = {
|
||||||
"new_post": 1,
|
"expires": 24,
|
||||||
"new_comment": 0,
|
"new_post": 1,
|
||||||
"webp": 0,
|
"new_comment": 0,
|
||||||
"clear_on_upgrade": 1,
|
"webp": 0,
|
||||||
"compress": 0,
|
"clear_on_upgrade": 1,
|
||||||
"excl_ids": "",
|
"compress": 0,
|
||||||
"excl_regexp": "",
|
"excl_ids": "",
|
||||||
"excl_cookies": "",
|
"excl_regexp": "",
|
||||||
"incl_attributes": "",
|
"excl_cookies": "",
|
||||||
"minify_html": 1}
|
"incl_attributes": "",
|
||||||
|
"minify_html": 1}
|
||||||
plugin_data = json.dumps(plugin_data_object)
|
plugin_data = json.dumps(plugin_data_object)
|
||||||
setupwp_plugin(self, 'cache-enabler',
|
setupwp_plugin(self, 'cache-enabler',
|
||||||
'cache-enabler', plugin_data, data)
|
'cache-enabler', plugin_data, data)
|
||||||
@@ -1853,7 +1858,7 @@ class WOSiteDeleteController(CementBaseController):
|
|||||||
Log.error(self, 'could not input site name')
|
Log.error(self, 'could not input site name')
|
||||||
|
|
||||||
pargs.site_name = pargs.site_name.strip()
|
pargs.site_name = pargs.site_name.strip()
|
||||||
(wo_domain, wo_www_domain) = ValidateDomain(pargs.site_name)
|
(wo_domain, wo_www_domain) = DMN.validatedomain(self, pargs.site_name)
|
||||||
wo_db_name = ''
|
wo_db_name = ''
|
||||||
wo_prompt = ''
|
wo_prompt = ''
|
||||||
wo_nginx_prompt = ''
|
wo_nginx_prompt = ''
|
||||||
|
|||||||
@@ -1,23 +1,22 @@
|
|||||||
import getpass
|
import getpass
|
||||||
import glob
|
import glob
|
||||||
|
import json
|
||||||
import os
|
import os
|
||||||
import random
|
import random
|
||||||
import json
|
|
||||||
import re
|
import re
|
||||||
import string
|
import string
|
||||||
import subprocess
|
import subprocess
|
||||||
import csv
|
|
||||||
from subprocess import CalledProcessError
|
from subprocess import CalledProcessError
|
||||||
|
|
||||||
from wo.cli.plugins.sitedb import getSiteInfo
|
from wo.cli.plugins.sitedb import getSiteInfo
|
||||||
from wo.cli.plugins.stack import WOStackController
|
from wo.cli.plugins.stack import WOStackController
|
||||||
|
from wo.cli.plugins.stack_pref import post_pref
|
||||||
from wo.core.aptget import WOAptGet
|
from wo.core.aptget import WOAptGet
|
||||||
from wo.core.fileutils import WOFileUtils
|
from wo.core.fileutils import WOFileUtils
|
||||||
from wo.core.git import WOGit
|
from wo.core.git import WOGit
|
||||||
from wo.core.logging import Log
|
from wo.core.logging import Log
|
||||||
from wo.core.mysql import WOMysql
|
from wo.core.mysql import WOMysql
|
||||||
from wo.core.services import WOService
|
from wo.core.services import WOService
|
||||||
from wo.cli.plugins.stack_pref import post_pref
|
|
||||||
from wo.core.shellexec import CommandExecutionError, WOShellExec
|
from wo.core.shellexec import CommandExecutionError, WOShellExec
|
||||||
from wo.core.sslutils import SSL
|
from wo.core.sslutils import SSL
|
||||||
from wo.core.variables import WOVariables
|
from wo.core.variables import WOVariables
|
||||||
@@ -864,7 +863,17 @@ def site_package_check(self, stype):
|
|||||||
if stype in ['mysql', 'wp', 'wpsubdir', 'wpsubdomain']:
|
if stype in ['mysql', 'wp', 'wpsubdir', 'wpsubdomain']:
|
||||||
Log.debug(self, "Setting apt_packages variable for MySQL")
|
Log.debug(self, "Setting apt_packages variable for MySQL")
|
||||||
if not WOShellExec.cmd_exec(self, "/usr/bin/mysqladmin ping"):
|
if not WOShellExec.cmd_exec(self, "/usr/bin/mysqladmin ping"):
|
||||||
apt_packages = apt_packages + WOVariables.wo_mysql
|
if not WOVariables.wo_distro == 'raspbian':
|
||||||
|
if (not WOVariables.wo_platform_codename == 'jessie'):
|
||||||
|
wo_mysql = ["mariadb-server", "percona-toolkit",
|
||||||
|
"python3-mysqldb", "mariadb-backup"]
|
||||||
|
else:
|
||||||
|
wo_mysql = ["mariadb-server", "percona-toolkit",
|
||||||
|
"python3-mysql.connector"]
|
||||||
|
else:
|
||||||
|
wo_mysql = ["mariadb-server", "percona-toolkit",
|
||||||
|
"python3-mysqldb"]
|
||||||
|
apt_packages = apt_packages + wo_mysql
|
||||||
|
|
||||||
if stype in ['wp', 'wpsubdir', 'wpsubdomain']:
|
if stype in ['wp', 'wpsubdir', 'wpsubdomain']:
|
||||||
Log.debug(self, "Setting packages variable for WP-CLI")
|
Log.debug(self, "Setting packages variable for WP-CLI")
|
||||||
@@ -877,7 +886,7 @@ def site_package_check(self, stype):
|
|||||||
if self.app.pargs.wpredis:
|
if self.app.pargs.wpredis:
|
||||||
Log.debug(self, "Setting apt_packages variable for redis")
|
Log.debug(self, "Setting apt_packages variable for redis")
|
||||||
if not WOAptGet.is_installed(self, 'redis-server'):
|
if not WOAptGet.is_installed(self, 'redis-server'):
|
||||||
apt_packages = apt_packages + WOVariables.wo_redis
|
apt_packages = apt_packages + ["redis-server"]
|
||||||
|
|
||||||
if self.app.pargs.php73:
|
if self.app.pargs.php73:
|
||||||
Log.debug(self, "Setting apt_packages variable for PHP 7.3")
|
Log.debug(self, "Setting apt_packages variable for PHP 7.3")
|
||||||
@@ -1290,37 +1299,6 @@ def removeAcmeConf(self, domain):
|
|||||||
WOService.restart_service(self, "nginx")
|
WOService.restart_service(self, "nginx")
|
||||||
|
|
||||||
|
|
||||||
def site_url_https(self, domain):
|
|
||||||
if os.path.isfile('/var/www/{0}/wp-config.php'.format(domain)):
|
|
||||||
wo_site_webroot = ('/var/www/{0}'.format(domain))
|
|
||||||
Log.info(self, "Checking if site url already "
|
|
||||||
"use https, please wait...")
|
|
||||||
WOFileUtils.chdir(self, '{0}/htdocs/'.format(wo_site_webroot))
|
|
||||||
wo_siteurl = \
|
|
||||||
WOShellExec.cmd_exec_stdout(self,
|
|
||||||
"{0} option get siteurl "
|
|
||||||
.format(WOVariables.wo_wpcli_path) +
|
|
||||||
"--allow-root --quiet")
|
|
||||||
test_url = re.split(":", wo_siteurl)
|
|
||||||
if not (test_url[0] == 'https'):
|
|
||||||
try:
|
|
||||||
WOShellExec.cmd_exec(self, "{0} option update siteurl "
|
|
||||||
"\'https://{1}\' --allow-root".format(
|
|
||||||
WOVariables.wo_wpcli_path, domain))
|
|
||||||
WOShellExec.cmd_exec(self, "{0} option update home "
|
|
||||||
"\'https://{1}\' --allow-root".format(
|
|
||||||
WOVariables.wo_wpcli_path, domain))
|
|
||||||
except CommandExecutionError as e:
|
|
||||||
Log.debug(self, "{0}".format(e))
|
|
||||||
raise SiteError("migration to https failed")
|
|
||||||
Log.info(
|
|
||||||
self, "Site address updated "
|
|
||||||
"successfully to https://{0}".format(domain))
|
|
||||||
else:
|
|
||||||
Log.info(
|
|
||||||
self, "Site address was already using https")
|
|
||||||
|
|
||||||
|
|
||||||
def doCleanupAction(self, domain='', webroot='', dbname='', dbuser='',
|
def doCleanupAction(self, domain='', webroot='', dbname='', dbuser='',
|
||||||
dbhost=''):
|
dbhost=''):
|
||||||
"""
|
"""
|
||||||
@@ -1350,7 +1328,7 @@ def doCleanupAction(self, domain='', webroot='', dbname='', dbuser='',
|
|||||||
|
|
||||||
|
|
||||||
def setupLetsEncrypt(self, wo_domain_name, subdomain=False, wildcard=False,
|
def setupLetsEncrypt(self, wo_domain_name, subdomain=False, wildcard=False,
|
||||||
wo_dns=False, wo_acme_dns='dns_cf', backend=False):
|
wo_dns=False, wo_acme_dns='dns_cf'):
|
||||||
|
|
||||||
if os.path.isfile("/etc/letsencrypt/"
|
if os.path.isfile("/etc/letsencrypt/"
|
||||||
"renewal/{0}_ecc/"
|
"renewal/{0}_ecc/"
|
||||||
@@ -1371,11 +1349,12 @@ def setupLetsEncrypt(self, wo_domain_name, subdomain=False, wildcard=False,
|
|||||||
self, "Validation : DNS mode with {0}".format(wo_acme_dns))
|
self, "Validation : DNS mode with {0}".format(wo_acme_dns))
|
||||||
else:
|
else:
|
||||||
acme_mode = "-w /var/www/html"
|
acme_mode = "-w /var/www/html"
|
||||||
validation_mode = "Subdomain Webroot challenge"
|
validation_mode = "Webroot challenge"
|
||||||
Log.debug(self, "Validation : Webroot mode")
|
Log.debug(self, "Validation : Webroot mode")
|
||||||
if subdomain:
|
if subdomain:
|
||||||
Log.info(self, "Issuing subdomain SSL cert with acme.sh")
|
Log.info(self, "Certificate type: Subdomain")
|
||||||
Log.info(self, "Validation mode : {0}".format(validation_mode))
|
Log.info(self, "Validation mode : {0}".format(validation_mode))
|
||||||
|
Log.wait(self, "Issuing SSL certificate with acme.sh")
|
||||||
ssl = WOShellExec.cmd_exec(self, "{0} ".format(wo_acme_exec) +
|
ssl = WOShellExec.cmd_exec(self, "{0} ".format(wo_acme_exec) +
|
||||||
"--issue "
|
"--issue "
|
||||||
"-d {0} {1} "
|
"-d {0} {1} "
|
||||||
@@ -1384,8 +1363,9 @@ def setupLetsEncrypt(self, wo_domain_name, subdomain=False, wildcard=False,
|
|||||||
acme_mode,
|
acme_mode,
|
||||||
keylenght))
|
keylenght))
|
||||||
elif wildcard:
|
elif wildcard:
|
||||||
Log.info(self, "Issuing Wildcard SSL cert with acme.sh")
|
Log.info(self, "Certificate type: Wildcard")
|
||||||
Log.info(self, "Validation mode : {0}".format(validation_mode))
|
Log.info(self, "Validation mode : {0}".format(validation_mode))
|
||||||
|
Log.wait(self, "Issuing SSL certificate with acme.sh")
|
||||||
ssl = WOShellExec.cmd_exec(self, "{0} ".format(wo_acme_exec) +
|
ssl = WOShellExec.cmd_exec(self, "{0} ".format(wo_acme_exec) +
|
||||||
"--issue "
|
"--issue "
|
||||||
"-d {0} -d '*.{0}' --dns {1} "
|
"-d {0} -d '*.{0}' --dns {1} "
|
||||||
@@ -1394,8 +1374,9 @@ def setupLetsEncrypt(self, wo_domain_name, subdomain=False, wildcard=False,
|
|||||||
wo_acme_dns,
|
wo_acme_dns,
|
||||||
keylenght))
|
keylenght))
|
||||||
else:
|
else:
|
||||||
Log.info(self, "Issuing domain SSL cert with acme.sh")
|
Log.info(self, "Certificate type: Domain + www")
|
||||||
Log.info(self, "Validation mode : {0}".format(validation_mode))
|
Log.info(self, "Validation mode : {0}".format(validation_mode))
|
||||||
|
Log.wait(self, "Issuing SSL certificate with acme.sh")
|
||||||
ssl = WOShellExec.cmd_exec(self, "{0} ".format(wo_acme_exec) +
|
ssl = WOShellExec.cmd_exec(self, "{0} ".format(wo_acme_exec) +
|
||||||
"--issue "
|
"--issue "
|
||||||
"-d {0} -d www.{0} {1} "
|
"-d {0} -d www.{0} {1} "
|
||||||
@@ -1403,7 +1384,8 @@ def setupLetsEncrypt(self, wo_domain_name, subdomain=False, wildcard=False,
|
|||||||
.format(wo_domain_name,
|
.format(wo_domain_name,
|
||||||
acme_mode, keylenght))
|
acme_mode, keylenght))
|
||||||
if ssl:
|
if ssl:
|
||||||
Log.info(self, "Deploying SSL cert with acme.sh")
|
Log.valide(self, "Issuing SSL certificate with acme.sh")
|
||||||
|
Log.wait(self, "Deploying SSL cert with acme.sh")
|
||||||
Log.debug(self, "Cert deployment for domain: {0}"
|
Log.debug(self, "Cert deployment for domain: {0}"
|
||||||
.format(wo_domain_name))
|
.format(wo_domain_name))
|
||||||
try:
|
try:
|
||||||
@@ -1423,21 +1405,22 @@ def setupLetsEncrypt(self, wo_domain_name, subdomain=False, wildcard=False,
|
|||||||
"service nginx restart\" "
|
"service nginx restart\" "
|
||||||
.format(WOVariables.wo_ssl_live,
|
.format(WOVariables.wo_ssl_live,
|
||||||
wo_domain_name))
|
wo_domain_name))
|
||||||
Log.info(
|
Log.valide(self, "Deploying SSL cert with acme.sh")
|
||||||
self, "Adding /var/www/{0}/conf/nginx/ssl.conf"
|
if os.path.isdir('/var/www/{0}/conf/nginx'
|
||||||
.format(wo_domain_name))
|
.format(wo_domain_name)):
|
||||||
|
|
||||||
sslconf = open("/var/www/{0}/conf/nginx/ssl.conf"
|
sslconf = open("/var/www/{0}/conf/nginx/ssl.conf"
|
||||||
.format(wo_domain_name),
|
.format(wo_domain_name),
|
||||||
encoding='utf-8', mode='w')
|
encoding='utf-8', mode='w')
|
||||||
sslconf.write("listen 443 ssl http2;\n"
|
sslconf.write(
|
||||||
"listen [::]:443 ssl http2;\n"
|
"listen 443 ssl http2;\n"
|
||||||
"ssl_certificate {0}/{1}/fullchain.pem;\n"
|
"listen [::]:443 ssl http2;\n"
|
||||||
"ssl_certificate_key {0}/{1}/key.pem;\n"
|
"ssl_certificate {0}/{1}/fullchain.pem;\n"
|
||||||
"ssl_trusted_certificate {0}/{1}/ca.pem;\n"
|
"ssl_certificate_key {0}/{1}/key.pem;\n"
|
||||||
"ssl_stapling_verify on;\n"
|
"ssl_trusted_certificate {0}/{1}/ca.pem;\n"
|
||||||
.format(WOVariables.wo_ssl_live, wo_domain_name))
|
"ssl_stapling_verify on;\n"
|
||||||
sslconf.close()
|
.format(WOVariables.wo_ssl_live, wo_domain_name))
|
||||||
|
sslconf.close()
|
||||||
# updateSiteInfo(self, wo_domain_name, ssl=True)
|
# updateSiteInfo(self, wo_domain_name, ssl=True)
|
||||||
if not WOFileUtils.grep(self, '/var/www/22222/conf/nginx/ssl.conf',
|
if not WOFileUtils.grep(self, '/var/www/22222/conf/nginx/ssl.conf',
|
||||||
'/etc/letsencrypt'):
|
'/etc/letsencrypt'):
|
||||||
@@ -1466,34 +1449,6 @@ def setupLetsEncrypt(self, wo_domain_name, subdomain=False, wildcard=False,
|
|||||||
"you are running Let\'s Encrypt Client "
|
"you are running Let\'s Encrypt Client "
|
||||||
"\n to allow it to verify the site automatically.")
|
"\n to allow it to verify the site automatically.")
|
||||||
|
|
||||||
# check if a wildcard exist to secure a new subdomain
|
|
||||||
|
|
||||||
|
|
||||||
def checkWildcardExist(self, wo_domain_name):
|
|
||||||
|
|
||||||
wo_acme_exec = ("/etc/letsencrypt/acme.sh --config-home "
|
|
||||||
"'/etc/letsencrypt/config'")
|
|
||||||
# export certificates list from acme.sh
|
|
||||||
WOShellExec.cmd_exec(self, "{0} ".format(wo_acme_exec) +
|
|
||||||
"--list --listraw > /var/lib/wo/cert.csv")
|
|
||||||
|
|
||||||
# define new csv dialect
|
|
||||||
csv.register_dialect('acmeconf', delimiter='|')
|
|
||||||
# open file
|
|
||||||
certfile = open('/var/lib/wo/cert.csv', mode='r', encoding='utf-8')
|
|
||||||
reader = csv.reader(certfile, 'acmeconf')
|
|
||||||
wo_wildcard_domain = ("*.{0}".format(wo_domain_name))
|
|
||||||
for row in reader:
|
|
||||||
if wo_wildcard_domain in row[2]:
|
|
||||||
isWildcard = True
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
isWildcard = False
|
|
||||||
certfile.close()
|
|
||||||
|
|
||||||
return isWildcard
|
|
||||||
|
|
||||||
|
|
||||||
# copy wildcard certificate to a subdomain
|
# copy wildcard certificate to a subdomain
|
||||||
|
|
||||||
|
|
||||||
@@ -1537,9 +1492,9 @@ def renewLetsEncrypt(self, wo_domain_name):
|
|||||||
if not ssl:
|
if not ssl:
|
||||||
Log.error(self, "ERROR : Let's Encrypt certificate renewal FAILED!",
|
Log.error(self, "ERROR : Let's Encrypt certificate renewal FAILED!",
|
||||||
False)
|
False)
|
||||||
if (SSL.getExpirationDays(self, wo_domain_name) > 0):
|
if (SSL.getexpirationdays(self, wo_domain_name) > 0):
|
||||||
Log.error(self, "Your current certificate will expire within " +
|
Log.error(self, "Your current certificate will expire within " +
|
||||||
str(SSL.getExpirationDays(self, wo_domain_name)) +
|
str(SSL.getexpirationdays(self, wo_domain_name)) +
|
||||||
" days.", False)
|
" days.", False)
|
||||||
else:
|
else:
|
||||||
Log.error(self, "Your current certificate already expired!", False)
|
Log.error(self, "Your current certificate already expired!", False)
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
from sqlalchemy import Column, DateTime, String, Integer, Boolean
|
from sqlalchemy import (Boolean, Column, DateTime, ForeignKey, Integer, String,
|
||||||
from sqlalchemy import ForeignKey, func
|
func)
|
||||||
from sqlalchemy.orm import relationship, backref
|
|
||||||
from sqlalchemy.ext.declarative import declarative_base
|
from sqlalchemy.ext.declarative import declarative_base
|
||||||
from wo.core.logging import Log
|
from sqlalchemy.orm import backref, relationship
|
||||||
from wo.core.database import db_session
|
|
||||||
from wo.cli.plugins.models import SiteDB
|
from wo.cli.plugins.models import SiteDB
|
||||||
|
from wo.core.database import db_session
|
||||||
|
from wo.core.logging import Log
|
||||||
|
|
||||||
|
|
||||||
def addNewSite(self, site, stype, cache, path,
|
def addNewSite(self, site, stype, cache, path,
|
||||||
|
|||||||
@@ -115,6 +115,7 @@ class WOStackController(CementBaseController):
|
|||||||
empty_packages = []
|
empty_packages = []
|
||||||
wo_webroot = "/var/www/"
|
wo_webroot = "/var/www/"
|
||||||
pargs = self.app.pargs
|
pargs = self.app.pargs
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# Default action for stack installation
|
# Default action for stack installation
|
||||||
if ((not pargs.web) and (not pargs.admin) and
|
if ((not pargs.web) and (not pargs.admin) and
|
||||||
@@ -190,7 +191,7 @@ class WOStackController(CementBaseController):
|
|||||||
if pargs.redis:
|
if pargs.redis:
|
||||||
pargs.php = True
|
pargs.php = True
|
||||||
if not WOAptGet.is_installed(self, 'redis-server'):
|
if not WOAptGet.is_installed(self, 'redis-server'):
|
||||||
apt_packages = apt_packages + WOVariables.wo_redis
|
apt_packages = apt_packages + ["redis-server"]
|
||||||
|
|
||||||
else:
|
else:
|
||||||
Log.info(self, "Redis already installed")
|
Log.info(self, "Redis already installed")
|
||||||
@@ -227,7 +228,17 @@ class WOStackController(CementBaseController):
|
|||||||
pargs.mysqltuner = True
|
pargs.mysqltuner = True
|
||||||
Log.debug(self, "Setting apt_packages variable for MySQL")
|
Log.debug(self, "Setting apt_packages variable for MySQL")
|
||||||
if not WOShellExec.cmd_exec(self, "mysqladmin ping"):
|
if not WOShellExec.cmd_exec(self, "mysqladmin ping"):
|
||||||
apt_packages = apt_packages + WOVariables.wo_mysql
|
if not WOVariables.wo_distro == 'raspbian':
|
||||||
|
if (not WOVariables.wo_platform_codename == 'jessie'):
|
||||||
|
wo_mysql = ["mariadb-server", "percona-toolkit",
|
||||||
|
"python3-mysqldb", "mariadb-backup"]
|
||||||
|
else:
|
||||||
|
wo_mysql = ["mariadb-server", "percona-toolkit",
|
||||||
|
"python3-mysql.connector"]
|
||||||
|
else:
|
||||||
|
wo_mysql = ["mariadb-server", "percona-toolkit",
|
||||||
|
"python3-mysqldb"]
|
||||||
|
apt_packages = apt_packages + wo_mysql
|
||||||
else:
|
else:
|
||||||
Log.debug(self, "MySQL already installed and alive")
|
Log.debug(self, "MySQL already installed and alive")
|
||||||
Log.info(self, "MySQL already installed and alive")
|
Log.info(self, "MySQL already installed and alive")
|
||||||
@@ -484,11 +495,15 @@ class WOStackController(CementBaseController):
|
|||||||
# wo_mem = int(memsplit[0])
|
# wo_mem = int(memsplit[0])
|
||||||
# if (wo_mem < 4000000):
|
# if (wo_mem < 4000000):
|
||||||
# WOSwap.add(self)
|
# WOSwap.add(self)
|
||||||
Log.info(self, "Updating apt-cache, please wait...")
|
Log.wait(self, "Updating apt-cache ")
|
||||||
WOAptGet.update(self)
|
WOAptGet.update(self)
|
||||||
Log.info(self, "Installing packages, please wait...")
|
Log.valide(self, "Updating apt-cache ")
|
||||||
|
Log.wait(self, "Installing APT packages ")
|
||||||
WOAptGet.install(self, apt_packages)
|
WOAptGet.install(self, apt_packages)
|
||||||
|
Log.valide(self, "Installing APT packages ")
|
||||||
|
Log.wait(self, "Configuring APT packages ")
|
||||||
post_pref(self, apt_packages, empty_packages)
|
post_pref(self, apt_packages, empty_packages)
|
||||||
|
Log.valide(self, "Configuring APT packages ")
|
||||||
if (packages):
|
if (packages):
|
||||||
Log.debug(self, "Downloading following: {0}".format(packages))
|
Log.debug(self, "Downloading following: {0}".format(packages))
|
||||||
WODownload.download(self, packages)
|
WODownload.download(self, packages)
|
||||||
@@ -533,7 +548,7 @@ class WOStackController(CementBaseController):
|
|||||||
pargs.proftpd = True
|
pargs.proftpd = True
|
||||||
pargs.utils = True
|
pargs.utils = True
|
||||||
pargs.redis = True
|
pargs.redis = True
|
||||||
packages = packages + ['/var/www/22222/htdocs/*']
|
packages = packages + ['/var/www/22222/htdocs']
|
||||||
|
|
||||||
if pargs.web:
|
if pargs.web:
|
||||||
pargs.nginx = True
|
pargs.nginx = True
|
||||||
@@ -581,12 +596,13 @@ class WOStackController(CementBaseController):
|
|||||||
# REDIS
|
# REDIS
|
||||||
if pargs.redis:
|
if pargs.redis:
|
||||||
Log.debug(self, "Remove apt_packages variable of Redis")
|
Log.debug(self, "Remove apt_packages variable of Redis")
|
||||||
apt_packages = apt_packages + WOVariables.wo_redis
|
apt_packages = apt_packages + ["redis-server"]
|
||||||
|
|
||||||
# MariaDB
|
# MariaDB
|
||||||
if pargs.mysql:
|
if pargs.mysql:
|
||||||
Log.debug(self, "Removing apt_packages variable of MySQL")
|
Log.debug(self, "Removing apt_packages variable of MySQL")
|
||||||
apt_packages = apt_packages + WOVariables.wo_mysql
|
apt_packages = apt_packages + ['mariadb-server', 'mysql-common',
|
||||||
|
'mariadb-client']
|
||||||
|
|
||||||
# mysqlclient
|
# mysqlclient
|
||||||
if pargs.mysqlclient:
|
if pargs.mysqlclient:
|
||||||
@@ -691,7 +707,7 @@ class WOStackController(CementBaseController):
|
|||||||
if (set(["nginx-custom"]).issubset(set(apt_packages))):
|
if (set(["nginx-custom"]).issubset(set(apt_packages))):
|
||||||
WOService.stop_service(self, 'nginx')
|
WOService.stop_service(self, 'nginx')
|
||||||
|
|
||||||
if (set(WOVariables.wo_mysql).issubset(set(apt_packages))):
|
if (set(["mariadb-server"]).issubset(set(apt_packages))):
|
||||||
WOMysql.backupAll(self)
|
WOMysql.backupAll(self)
|
||||||
WOService.stop_service(self, 'mysql')
|
WOService.stop_service(self, 'mysql')
|
||||||
|
|
||||||
@@ -709,14 +725,15 @@ class WOStackController(CementBaseController):
|
|||||||
errormsg='', log=False)
|
errormsg='', log=False)
|
||||||
|
|
||||||
if (packages):
|
if (packages):
|
||||||
Log.info(self, "Removing packages, please wait...")
|
Log.wait(self, "Removing packages ")
|
||||||
WOFileUtils.remove(self, packages)
|
WOFileUtils.remove(self, packages)
|
||||||
|
Log.valide(self, "Removing packages ")
|
||||||
if (apt_packages):
|
if (apt_packages):
|
||||||
Log.debug(self, "Removing apt_packages")
|
Log.debug(self, "Removing apt_packages")
|
||||||
Log.info(self, "Removing apt packages, please wait...")
|
Log.wait(self, "Removing APT packages ")
|
||||||
WOAptGet.remove(self, apt_packages)
|
WOAptGet.remove(self, apt_packages)
|
||||||
WOAptGet.auto_remove(self)
|
WOAptGet.auto_remove(self)
|
||||||
|
Log.valide(self, "Removing APT packages ")
|
||||||
|
|
||||||
Log.info(self, "Successfully removed packages")
|
Log.info(self, "Successfully removed packages")
|
||||||
|
|
||||||
@@ -751,7 +768,7 @@ class WOStackController(CementBaseController):
|
|||||||
pargs.proftpd = True
|
pargs.proftpd = True
|
||||||
pargs.utils = True
|
pargs.utils = True
|
||||||
pargs.redis = True
|
pargs.redis = True
|
||||||
packages = packages + ['/var/www/22222/htdocs/*']
|
packages = packages + ['/var/www/22222/htdocs']
|
||||||
|
|
||||||
if pargs.web:
|
if pargs.web:
|
||||||
pargs.nginx = True
|
pargs.nginx = True
|
||||||
@@ -799,12 +816,13 @@ class WOStackController(CementBaseController):
|
|||||||
# REDIS
|
# REDIS
|
||||||
if pargs.redis:
|
if pargs.redis:
|
||||||
Log.debug(self, "Remove apt_packages variable of Redis")
|
Log.debug(self, "Remove apt_packages variable of Redis")
|
||||||
apt_packages = apt_packages + WOVariables.wo_redis
|
apt_packages = apt_packages + ["redis-server"]
|
||||||
|
|
||||||
# MariaDB
|
# MariaDB
|
||||||
if pargs.mysql:
|
if pargs.mysql:
|
||||||
Log.debug(self, "Removing apt_packages variable of MySQL")
|
Log.debug(self, "Removing apt_packages variable of MySQL")
|
||||||
apt_packages = apt_packages + WOVariables.wo_mysql
|
apt_packages = apt_packages + ['mariadb-server', 'mysql-common',
|
||||||
|
'mariadb-client']
|
||||||
|
|
||||||
# mysqlclient
|
# mysqlclient
|
||||||
if pargs.mysqlclient:
|
if pargs.mysqlclient:
|
||||||
@@ -916,7 +934,7 @@ class WOStackController(CementBaseController):
|
|||||||
if (set(["fail2ban"]).issubset(set(apt_packages))):
|
if (set(["fail2ban"]).issubset(set(apt_packages))):
|
||||||
WOService.stop_service(self, 'fail2ban')
|
WOService.stop_service(self, 'fail2ban')
|
||||||
|
|
||||||
if (set(WOVariables.wo_mysql).issubset(set(apt_packages))):
|
if (set(["mariadb-server"]).issubset(set(apt_packages))):
|
||||||
WOMysql.backupAll(self)
|
WOMysql.backupAll(self)
|
||||||
WOService.stop_service(self, 'mysql')
|
WOService.stop_service(self, 'mysql')
|
||||||
|
|
||||||
@@ -934,15 +952,15 @@ class WOStackController(CementBaseController):
|
|||||||
"uninstaller.sh -y -f")
|
"uninstaller.sh -y -f")
|
||||||
|
|
||||||
if (apt_packages):
|
if (apt_packages):
|
||||||
Log.info(self, "Purging apt packages, please wait...")
|
Log.wait(self, "Purging APT Packages ")
|
||||||
WOAptGet.remove(self, apt_packages, purge=True)
|
WOAptGet.remove(self, apt_packages, purge=True)
|
||||||
WOAptGet.auto_remove(self)
|
WOAptGet.auto_remove(self)
|
||||||
|
Log.valide(self, "Purging APT Packages ")
|
||||||
|
|
||||||
if (packages):
|
if (packages):
|
||||||
Log.info(self, "Purging packages, please wait...")
|
Log.wait(self, "Purging Packages ")
|
||||||
WOFileUtils.remove(self, packages)
|
WOFileUtils.remove(self, packages)
|
||||||
WOAptGet.auto_remove(self)
|
Log.valide(self, "Purging Packages ")
|
||||||
|
|
||||||
Log.info(self, "Successfully purged packages")
|
Log.info(self, "Successfully purged packages")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ class WOStackMigrateController(CementBaseController):
|
|||||||
log=False)
|
log=False)
|
||||||
|
|
||||||
# Install MariaDB
|
# Install MariaDB
|
||||||
apt_packages = WOVariables.wo_mysql
|
apt_packages = ["mariadb-server"]
|
||||||
|
|
||||||
Log.info(self, "Updating apt-cache, hang on...")
|
Log.info(self, "Updating apt-cache, hang on...")
|
||||||
WOAptGet.update(self)
|
WOAptGet.update(self)
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ from wo.core.apt_repo import WORepo
|
|||||||
from wo.core.aptget import WOAptGet
|
from wo.core.aptget import WOAptGet
|
||||||
from wo.core.checkfqdn import check_fqdn_ip
|
from wo.core.checkfqdn import check_fqdn_ip
|
||||||
from wo.core.cron import WOCron
|
from wo.core.cron import WOCron
|
||||||
from wo.core.domainvalidate import GetDomainlevel
|
|
||||||
from wo.core.extract import WOExtract
|
from wo.core.extract import WOExtract
|
||||||
from wo.core.fileutils import WOFileUtils
|
from wo.core.fileutils import WOFileUtils
|
||||||
from wo.core.git import WOGit
|
from wo.core.git import WOGit
|
||||||
@@ -29,8 +28,9 @@ from wo.core.variables import WOVariables
|
|||||||
def pre_pref(self, apt_packages):
|
def pre_pref(self, apt_packages):
|
||||||
"""Pre settings to do before installation packages"""
|
"""Pre settings to do before installation packages"""
|
||||||
|
|
||||||
if (set(WOVariables.wo_mysql).issubset(set(apt_packages)) or
|
if (set(["mariadb-server"]).issubset(set(apt_packages)) or
|
||||||
set(WOVariables.wo_mysql_client).issubset(set(apt_packages))):
|
set(["mariadb-client"]).issubset(set(apt_packages)) or
|
||||||
|
set(["mariadb-backup"]).issubset((set(apt_packages)))):
|
||||||
# add mariadb repository excepted on raspbian and ubuntu 19.04
|
# add mariadb repository excepted on raspbian and ubuntu 19.04
|
||||||
if (not WOVariables.wo_distro == 'raspbian'):
|
if (not WOVariables.wo_distro == 'raspbian'):
|
||||||
Log.info(self, "Adding repository for MySQL, please wait...")
|
Log.info(self, "Adding repository for MySQL, please wait...")
|
||||||
@@ -47,7 +47,7 @@ def pre_pref(self, apt_packages):
|
|||||||
keyserver="keyserver.ubuntu.com")
|
keyserver="keyserver.ubuntu.com")
|
||||||
WORepo.add_key(self, '0xF1656F24C74CD1D8',
|
WORepo.add_key(self, '0xF1656F24C74CD1D8',
|
||||||
keyserver="keyserver.ubuntu.com")
|
keyserver="keyserver.ubuntu.com")
|
||||||
if set(WOVariables.wo_mysql).issubset(set(apt_packages)):
|
if set(["mariadb-server"]).issubset(set(apt_packages)):
|
||||||
# generate random 24 characters root password
|
# generate random 24 characters root password
|
||||||
chars = ''.join(random.sample(string.ascii_letters, 24))
|
chars = ''.join(random.sample(string.ascii_letters, 24))
|
||||||
|
|
||||||
@@ -139,7 +139,7 @@ def pre_pref(self, apt_packages):
|
|||||||
Log.debug(self, 'Adding deb.sury GPG key')
|
Log.debug(self, 'Adding deb.sury GPG key')
|
||||||
WORepo.add_key(self, WOVariables.wo_php_key)
|
WORepo.add_key(self, WOVariables.wo_php_key)
|
||||||
# add redis repository
|
# add redis repository
|
||||||
if set(WOVariables.wo_redis).issubset(set(apt_packages)):
|
if set(['redis-server']).issubset(set(apt_packages)):
|
||||||
Log.info(self, "Adding repository for Redis, please wait...")
|
Log.info(self, "Adding repository for Redis, please wait...")
|
||||||
if WOVariables.wo_distro == 'ubuntu':
|
if WOVariables.wo_distro == 'ubuntu':
|
||||||
Log.debug(self, 'Adding ppa for redis')
|
Log.debug(self, 'Adding ppa for redis')
|
||||||
@@ -189,7 +189,7 @@ def post_pref(self, apt_packages, packages, upgrade=False):
|
|||||||
'\t$request_filename;\n')
|
'\t$request_filename;\n')
|
||||||
try:
|
try:
|
||||||
data = dict(php="9000", debug="9001",
|
data = dict(php="9000", debug="9001",
|
||||||
php7="9070", debug7="9170")
|
php7="9070", debug7="9170")
|
||||||
WOTemplate.render(
|
WOTemplate.render(
|
||||||
self, '{0}/upstream.conf'.format(ngxcnf),
|
self, '{0}/upstream.conf'.format(ngxcnf),
|
||||||
'upstream.mustache', data, overwrite=True)
|
'upstream.mustache', data, overwrite=True)
|
||||||
@@ -876,7 +876,7 @@ def post_pref(self, apt_packages, packages, upgrade=False):
|
|||||||
WOService.restart_service(self, 'php7.3-fpm')
|
WOService.restart_service(self, 'php7.3-fpm')
|
||||||
|
|
||||||
# create mysql config if it doesn't exist
|
# create mysql config if it doesn't exist
|
||||||
if set(WOVariables.wo_mysql).issubset(set(apt_packages)):
|
if set(["mariadb-server"]).issubset(set(apt_packages)):
|
||||||
if not os.path.isfile("/etc/mysql/my.cnf"):
|
if not os.path.isfile("/etc/mysql/my.cnf"):
|
||||||
config = ("[mysqld]\nwait_timeout = 30\n"
|
config = ("[mysqld]\nwait_timeout = 30\n"
|
||||||
"interactive_timeout=60\nperformance_schema = 0"
|
"interactive_timeout=60\nperformance_schema = 0"
|
||||||
@@ -885,101 +885,36 @@ def post_pref(self, apt_packages, packages, upgrade=False):
|
|||||||
encoding='utf-8', mode='w')
|
encoding='utf-8', mode='w')
|
||||||
config_file.write(config)
|
config_file.write(config)
|
||||||
config_file.close()
|
config_file.close()
|
||||||
elif (not WOFileUtils.grep(self, "/etc/mysql/my.cnf", "WordOps")):
|
else:
|
||||||
Log.info(self, "Tuning MariaDB configuration")
|
Log.info(self, "Tuning MariaDB configuration")
|
||||||
with open("/etc/mysql/my.cnf",
|
if not os.path.isfile("/etc/mysql/my.cnf.default-pkg"):
|
||||||
"a") as mysql_file:
|
WOFileUtils.copyfile(self, "/etc/mysql/my.cnf",
|
||||||
mysql_file.write("\n# WordOps v3.9.8\n")
|
"/etc/mysql/my.cnf.default-pkg")
|
||||||
wo_ram = psutil.virtual_memory().total / (1024 * 1024)
|
wo_ram = psutil.virtual_memory().total / (1024 * 1024)
|
||||||
# set InnoDB variable depending on the RAM available
|
# set InnoDB variable depending on the RAM available
|
||||||
wo_ram_innodb = int(wo_ram*0.3)
|
wo_ram_innodb = int(wo_ram*0.3)
|
||||||
wo_ram_log_buffer = int(wo_ram_innodb*0.25)
|
wo_ram_log_buffer = int(wo_ram_innodb*0.25)
|
||||||
wo_ram_log_size = int(wo_ram_log_buffer*0.5)
|
wo_ram_log_size = int(wo_ram_log_buffer*0.5)
|
||||||
|
if (wo_ram < 2000):
|
||||||
|
wo_innodb_instance = int(1)
|
||||||
|
tmp_table_size = int(32)
|
||||||
|
elif (wo_ram > 2000) and (wo_ram < 64000):
|
||||||
|
wo_innodb_instance = int(wo_ram/1000)
|
||||||
|
tmp_table_size = int(128)
|
||||||
|
elif (wo_ram > 64000):
|
||||||
|
wo_innodb_instance = int(64)
|
||||||
|
tmp_table_size = int(256)
|
||||||
|
data = dict(
|
||||||
|
tmp_table_size=tmp_table_size, inno_log=wo_ram_log_size,
|
||||||
|
inno_buffer=wo_ram_innodb,
|
||||||
|
inno_log_buffer=wo_ram_log_buffer,
|
||||||
|
innodb_instances=wo_innodb_instance)
|
||||||
|
WOTemplate.render(
|
||||||
|
self, '/etc/mysql/my.cnf', 'my.mustache', data)
|
||||||
# replacing default values
|
# replacing default values
|
||||||
Log.debug(self, "Tuning MySQL configuration")
|
Log.debug(self, "Tuning MySQL configuration")
|
||||||
# set innodb_buffer_pool_instances depending
|
# set innodb_buffer_pool_instances depending
|
||||||
# on the amount of RAM
|
# on the amount of RAM
|
||||||
if (wo_ram_innodb > 1000) and (wo_ram_innodb < 64000):
|
|
||||||
wo_innodb_instance = int(
|
|
||||||
wo_ram_innodb/1000)
|
|
||||||
elif (wo_ram_innodb < 1000):
|
|
||||||
wo_innodb_instance = int(1)
|
|
||||||
elif (wo_ram_innodb > 64000):
|
|
||||||
wo_innodb_instance = int(64)
|
|
||||||
WOFileUtils.searchreplace(self, "/etc/mysql/my.cnf",
|
|
||||||
"innodb_buffer_pool_size = 256M",
|
|
||||||
"innodb_buffer_pool_size "
|
|
||||||
"= {0}M\n"
|
|
||||||
"innodb_buffer_pool_instances "
|
|
||||||
"= {1}\n"
|
|
||||||
.format(wo_ram_innodb,
|
|
||||||
wo_innodb_instance))
|
|
||||||
WOFileUtils.searchreplace(self, "/etc/mysql/my.cnf",
|
|
||||||
"innodb_log_buffer_size = 8M",
|
|
||||||
"innodb_log_buffer_size = {0}M"
|
|
||||||
.format(wo_ram_log_buffer))
|
|
||||||
WOFileUtils.searchreplace(self, "/etc/mysql/my.cnf",
|
|
||||||
"#innodb_log_file_size = 50M",
|
|
||||||
"innodb_log_file_size = {0}M"
|
|
||||||
.format(wo_ram_log_size))
|
|
||||||
WOFileUtils.searchreplace(self,
|
|
||||||
"/etc/mysql/my.cnf",
|
|
||||||
"wait_timeout "
|
|
||||||
"= 600",
|
|
||||||
"wait_timeout "
|
|
||||||
"= 120\n"
|
|
||||||
"skip-name-resolve = 1\n")
|
|
||||||
# disabling mariadb binlog
|
|
||||||
WOFileUtils.searchreplace(self,
|
|
||||||
"/etc/mysql/my.cnf",
|
|
||||||
"log_bin "
|
|
||||||
"= /var/log/mysql/"
|
|
||||||
"mariadb-bin",
|
|
||||||
"#log_bin "
|
|
||||||
" = /var/log/"
|
|
||||||
"mysql/mariadb-bin")
|
|
||||||
WOFileUtils.searchreplace(self, "/etc/mysql/my.cnf",
|
|
||||||
'log_bin_index '
|
|
||||||
"= /var/log/mysql/"
|
|
||||||
"mariadb-bin.index",
|
|
||||||
"#log_bin_index "
|
|
||||||
"= /var/log/mysql/"
|
|
||||||
"mariadb-bin.index")
|
|
||||||
WOFileUtils.searchreplace(self, "/etc/mysql/my.cnf",
|
|
||||||
"expire_logs_days = 10",
|
|
||||||
"#expire_logs_days "
|
|
||||||
"= 10")
|
|
||||||
WOFileUtils.searchreplace(self, "/etc/mysql/my.cnf",
|
|
||||||
"max_binlog_size "
|
|
||||||
"= 100M",
|
|
||||||
"#max_binlog_size "
|
|
||||||
"= 100M")
|
|
||||||
WOFileUtils.searchreplace(self, "/etc/mysql/my.cnf",
|
|
||||||
"innodb_open_files ="
|
|
||||||
" 400",
|
|
||||||
"innodb_open_files ="
|
|
||||||
" 16000")
|
|
||||||
WOFileUtils.searchreplace(self, "/etc/mysql/my.cnf",
|
|
||||||
"innodb_io_capacity ="
|
|
||||||
" 400",
|
|
||||||
"innodb_io_capacity ="
|
|
||||||
" 16000")
|
|
||||||
WOFileUtils.searchreplace(self, "/etc/mysql/my.cnf",
|
|
||||||
"query_cache_size = 64M",
|
|
||||||
"query_cache_size = 0")
|
|
||||||
WOFileUtils.searchreplace(self, "/etc/mysql/my.cnf",
|
|
||||||
"#query_cache_type = DEMAND",
|
|
||||||
"query_cache_type = 0")
|
|
||||||
WOFileUtils.searchreplace(self, "/etc/mysql/my.cnf",
|
|
||||||
"#open-files-limit = 2000",
|
|
||||||
"open-files-limit = 10000")
|
|
||||||
WOFileUtils.searchreplace(self, "/etc/mysql/my.cnf",
|
|
||||||
"table_open_cache = 400",
|
|
||||||
"table_open_cache = 16000")
|
|
||||||
WOFileUtils.searchreplace(self, "/etc/mysql/my.cnf",
|
|
||||||
"max_allowed_packet = 16M",
|
|
||||||
"max_allowed_packet = 64M\n")
|
|
||||||
|
|
||||||
WOService.stop_service(self, 'mysql')
|
WOService.stop_service(self, 'mysql')
|
||||||
WOFileUtils.mvfile(self, '/var/lib/mysql/ib_logfile0',
|
WOFileUtils.mvfile(self, '/var/lib/mysql/ib_logfile0',
|
||||||
'/var/lib/mysql/ib_logfile0.bak')
|
'/var/lib/mysql/ib_logfile0.bak')
|
||||||
@@ -1106,7 +1041,7 @@ def post_pref(self, apt_packages, packages, upgrade=False):
|
|||||||
WOService.reload_service(self, 'proftpd')
|
WOService.reload_service(self, 'proftpd')
|
||||||
|
|
||||||
# Redis configuration
|
# Redis configuration
|
||||||
if set(WOVariables.wo_redis).issubset(set(apt_packages)):
|
if set(['redus-server']).issubset(set(apt_packages)):
|
||||||
if os.path.isfile("/etc/nginx/conf.d/upstream.conf"):
|
if os.path.isfile("/etc/nginx/conf.d/upstream.conf"):
|
||||||
if not WOFileUtils.grep(self, "/etc/nginx/conf.d/"
|
if not WOFileUtils.grep(self, "/etc/nginx/conf.d/"
|
||||||
"upstream.conf",
|
"upstream.conf",
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import os
|
|||||||
|
|
||||||
from cement.core import handler, hook
|
from cement.core import handler, hook
|
||||||
from cement.core.controller import CementBaseController, expose
|
from cement.core.controller import CementBaseController, expose
|
||||||
|
|
||||||
from wo.core.aptget import WOAptGet
|
from wo.core.aptget import WOAptGet
|
||||||
from wo.core.logging import Log
|
from wo.core.logging import Log
|
||||||
from wo.core.services import WOService
|
from wo.core.services import WOService
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import shutil
|
|||||||
|
|
||||||
from cement.core import handler, hook
|
from cement.core import handler, hook
|
||||||
from cement.core.controller import CementBaseController, expose
|
from cement.core.controller import CementBaseController, expose
|
||||||
|
|
||||||
from wo.cli.plugins.stack_pref import post_pref, pre_pref
|
from wo.cli.plugins.stack_pref import post_pref, pre_pref
|
||||||
from wo.core.aptget import WOAptGet
|
from wo.core.aptget import WOAptGet
|
||||||
from wo.core.download import WODownload
|
from wo.core.download import WODownload
|
||||||
@@ -87,8 +88,6 @@ class WOStackUpgradeController(CementBaseController):
|
|||||||
if pargs.web:
|
if pargs.web:
|
||||||
if WOAptGet.is_installed(self, 'nginx-custom'):
|
if WOAptGet.is_installed(self, 'nginx-custom'):
|
||||||
pargs.nginx = True
|
pargs.nginx = True
|
||||||
else:
|
|
||||||
Log.info(self, "Nginx is not already installed")
|
|
||||||
pargs.php = True
|
pargs.php = True
|
||||||
pargs.mysql = True
|
pargs.mysql = True
|
||||||
pargs.wpcli = True
|
pargs.wpcli = True
|
||||||
@@ -121,13 +120,13 @@ class WOStackUpgradeController(CementBaseController):
|
|||||||
|
|
||||||
if pargs.mysql:
|
if pargs.mysql:
|
||||||
if WOAptGet.is_installed(self, 'mariadb-server'):
|
if WOAptGet.is_installed(self, 'mariadb-server'):
|
||||||
apt_packages = apt_packages + WOVariables.wo_mysql
|
apt_packages = apt_packages + ['mariadb-server']
|
||||||
else:
|
else:
|
||||||
Log.info(self, "MariaDB is not installed")
|
Log.info(self, "MariaDB is not installed")
|
||||||
|
|
||||||
if pargs.redis:
|
if pargs.redis:
|
||||||
if WOAptGet.is_installed(self, 'redis-server'):
|
if WOAptGet.is_installed(self, 'redis-server'):
|
||||||
apt_packages = apt_packages + WOVariables.wo_redis
|
apt_packages = apt_packages + ['redis-server']
|
||||||
else:
|
else:
|
||||||
Log.info(self, "Redis is not installed")
|
Log.info(self, "Redis is not installed")
|
||||||
|
|
||||||
@@ -204,8 +203,12 @@ class WOStackUpgradeController(CementBaseController):
|
|||||||
'/etc/apt/preferences.d/nginx-block'):
|
'/etc/apt/preferences.d/nginx-block'):
|
||||||
WOAptGet.install(self, nginx_packages)
|
WOAptGet.install(self, nginx_packages)
|
||||||
|
|
||||||
|
Log.wait(self, "Upgrading APT Packages ")
|
||||||
WOAptGet.install(self, apt_packages)
|
WOAptGet.install(self, apt_packages)
|
||||||
|
Log.valide(self, "Upgrading APT Packages ")
|
||||||
|
Log.wait(self, "Configuring APT Packages ")
|
||||||
post_pref(self, nginx_packages, [], True)
|
post_pref(self, nginx_packages, [], True)
|
||||||
|
Log.valide(self, "Configuring APT Packages ")
|
||||||
post_pref(self, apt_packages, [], True)
|
post_pref(self, apt_packages, [], True)
|
||||||
# Post Actions after package updates
|
# Post Actions after package updates
|
||||||
|
|
||||||
@@ -226,7 +229,7 @@ class WOStackUpgradeController(CementBaseController):
|
|||||||
WOFileUtils.chmod(self, "/usr/local/bin/wp", 0o775)
|
WOFileUtils.chmod(self, "/usr/local/bin/wp", 0o775)
|
||||||
|
|
||||||
if pargs.netdata:
|
if pargs.netdata:
|
||||||
Log.info(self, "Upgrading Netdata, please wait...")
|
Log.wait(self, "Upgrading Netdata ")
|
||||||
if os.path.isdir('/opt/netdata'):
|
if os.path.isdir('/opt/netdata'):
|
||||||
WOShellExec.cmd_exec(
|
WOShellExec.cmd_exec(
|
||||||
self, "bash /opt/netdata/usr/"
|
self, "bash /opt/netdata/usr/"
|
||||||
@@ -237,6 +240,7 @@ class WOStackUpgradeController(CementBaseController):
|
|||||||
self, "bash /usr/"
|
self, "bash /usr/"
|
||||||
"libexec/netdata/netdata-"
|
"libexec/netdata/netdata-"
|
||||||
"updater.sh")
|
"updater.sh")
|
||||||
|
Log.valide(self, "Upgrading Netdata ")
|
||||||
|
|
||||||
if pargs.dashboard:
|
if pargs.dashboard:
|
||||||
Log.debug(self, "Extracting wo-dashboard.tar.gz "
|
Log.debug(self, "Extracting wo-dashboard.tar.gz "
|
||||||
@@ -252,16 +256,17 @@ class WOStackUpgradeController(CementBaseController):
|
|||||||
WOVariables.wo_php_user, recursive=True)
|
WOVariables.wo_php_user, recursive=True)
|
||||||
|
|
||||||
if pargs.composer:
|
if pargs.composer:
|
||||||
Log.info(self, "Upgrading Composer, please wait...")
|
Log.wait(self, "Upgrading Composer ")
|
||||||
WOShellExec.cmd_exec(self, "php -q /var/lib/wo"
|
WOShellExec.cmd_exec(self, "php -q /var/lib/wo"
|
||||||
"/tmp/composer-install "
|
"/tmp/composer-install "
|
||||||
"--install-dir=/var/lib/wo/tmp/")
|
"--install-dir=/var/lib/wo/tmp/")
|
||||||
shutil.copyfile('/var/lib/wo/tmp/composer.phar',
|
shutil.copyfile('/var/lib/wo/tmp/composer.phar',
|
||||||
'/usr/local/bin/composer')
|
'/usr/local/bin/composer')
|
||||||
WOFileUtils.chmod(self, "/usr/local/bin/composer", 0o775)
|
WOFileUtils.chmod(self, "/usr/local/bin/composer", 0o775)
|
||||||
|
Log.valide(self, "Upgrading Composer ")
|
||||||
|
|
||||||
if pargs.phpmyadmin:
|
if pargs.phpmyadmin:
|
||||||
Log.info(self, "Upgrading phpMyAdmin, please wait...")
|
Log.wait(self, "Upgrading phpMyAdmin ")
|
||||||
WOExtract.extract(self, '/var/lib/wo/tmp/pma.tar.gz',
|
WOExtract.extract(self, '/var/lib/wo/tmp/pma.tar.gz',
|
||||||
'/var/lib/wo/tmp/')
|
'/var/lib/wo/tmp/')
|
||||||
shutil.copyfile(('{0}22222/htdocs/db/pma'
|
shutil.copyfile(('{0}22222/htdocs/db/pma'
|
||||||
@@ -282,6 +287,7 @@ class WOStackUpgradeController(CementBaseController):
|
|||||||
.format(WOVariables.wo_webroot),
|
.format(WOVariables.wo_webroot),
|
||||||
WOVariables.wo_php_user,
|
WOVariables.wo_php_user,
|
||||||
WOVariables.wo_php_user, recursive=True)
|
WOVariables.wo_php_user, recursive=True)
|
||||||
|
Log.valide(self, "Upgrading phpMyAdmin ")
|
||||||
|
|
||||||
Log.info(self, "Successfully updated packages")
|
Log.info(self, "Successfully updated packages")
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import glob
|
|||||||
|
|
||||||
from cement.core import handler, hook
|
from cement.core import handler, hook
|
||||||
from cement.core.controller import CementBaseController, expose
|
from cement.core.controller import CementBaseController, expose
|
||||||
|
|
||||||
from wo.cli.plugins.sitedb import getAllsites, updateSiteInfo
|
from wo.cli.plugins.sitedb import getAllsites, updateSiteInfo
|
||||||
from wo.core.fileutils import WOFileUtils
|
from wo.core.fileutils import WOFileUtils
|
||||||
from wo.core.logging import Log
|
from wo.core.logging import Log
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import time
|
|||||||
|
|
||||||
from cement.core import handler, hook
|
from cement.core import handler, hook
|
||||||
from cement.core.controller import CementBaseController, expose
|
from cement.core.controller import CementBaseController, expose
|
||||||
|
|
||||||
from wo.core.download import WODownload
|
from wo.core.download import WODownload
|
||||||
from wo.core.logging import Log
|
from wo.core.logging import Log
|
||||||
|
|
||||||
|
|||||||
195
wo/cli/templates/my.mustache
Normal file
195
wo/cli/templates/my.mustache
Normal file
@@ -0,0 +1,195 @@
|
|||||||
|
# MariaDB database server configuration file.
|
||||||
|
#
|
||||||
|
# You can copy this file to one of:
|
||||||
|
# - "/etc/mysql/my.cnf" to set global options,
|
||||||
|
# - "~/.my.cnf" to set user-specific options.
|
||||||
|
#
|
||||||
|
# One can use all long options that the program supports.
|
||||||
|
# Run program with --help to get a list of available options and with
|
||||||
|
# --print-defaults to see which it would actually understand and use.
|
||||||
|
#
|
||||||
|
# For explanations see
|
||||||
|
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
|
||||||
|
|
||||||
|
# This will be passed to all mysql clients
|
||||||
|
# It has been reported that passwords should be enclosed with ticks/quotes
|
||||||
|
# escpecially if they contain "#" chars...
|
||||||
|
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
|
||||||
|
[client]
|
||||||
|
port = 3306
|
||||||
|
socket = /var/run/mysqld/mysqld.sock
|
||||||
|
|
||||||
|
# Here is entries for some specific programs
|
||||||
|
# The following values assume you have at least 32M ram
|
||||||
|
|
||||||
|
# This was formally known as [safe_mysqld]. Both versions are currently parsed.
|
||||||
|
[mysqld_safe]
|
||||||
|
socket = /var/run/mysqld/mysqld.sock
|
||||||
|
nice = 0
|
||||||
|
|
||||||
|
[mysqld]
|
||||||
|
#
|
||||||
|
# * Basic Settings
|
||||||
|
#
|
||||||
|
user = mysql
|
||||||
|
pid-file = /var/run/mysqld/mysqld.pid
|
||||||
|
socket = /var/run/mysqld/mysqld.sock
|
||||||
|
port = 3306
|
||||||
|
basedir = /usr
|
||||||
|
datadir = /var/lib/mysql
|
||||||
|
tmpdir = /tmp
|
||||||
|
lc_messages_dir = /usr/share/mysql
|
||||||
|
lc_messages = en_US
|
||||||
|
skip-external-locking
|
||||||
|
skip-name-resolve = 1
|
||||||
|
#
|
||||||
|
# Instead of skip-networking the default is now to listen only on
|
||||||
|
# localhost which is more compatible and is not less secure.
|
||||||
|
bind-address = ::ffff:127.0.0.1
|
||||||
|
#
|
||||||
|
# * Fine Tuning
|
||||||
|
#
|
||||||
|
max_connections = 100
|
||||||
|
connect_timeout = 5
|
||||||
|
wait_timeout = 60
|
||||||
|
max_allowed_packet = 64M
|
||||||
|
thread_cache_size = 128
|
||||||
|
sort_buffer_size = 4M
|
||||||
|
bulk_insert_buffer_size = 16M
|
||||||
|
tmp_table_size = {{tmp_table_size}}M
|
||||||
|
max_heap_table_size = {{tmp_table_size}}M
|
||||||
|
#
|
||||||
|
# * MyISAM
|
||||||
|
#
|
||||||
|
# This replaces the startup script and checks MyISAM tables if needed
|
||||||
|
# the first time they are touched. On error, make copy and try a repair.
|
||||||
|
myisam_recover_options = BACKUP
|
||||||
|
key_buffer_size = 128M
|
||||||
|
open-files-limit = 500000
|
||||||
|
table_open_cache = 16000
|
||||||
|
myisam_sort_buffer_size = 512M
|
||||||
|
concurrent_insert = 2
|
||||||
|
read_buffer_size = 2M
|
||||||
|
read_rnd_buffer_size = 1M
|
||||||
|
#
|
||||||
|
# * Query Cache Configuration
|
||||||
|
#
|
||||||
|
# Cache only tiny result sets, so we can fit more in the query cache.
|
||||||
|
query_cache_limit = 128K
|
||||||
|
query_cache_size = 0
|
||||||
|
# for more write intensive setups, set to DEMAND or OFF
|
||||||
|
query_cache_type = 0
|
||||||
|
#
|
||||||
|
# * Logging and Replication
|
||||||
|
#
|
||||||
|
# Both location gets rotated by the cronjob.
|
||||||
|
# Be aware that this log type is a performance killer.
|
||||||
|
# As of 5.1 you can enable the log at runtime!
|
||||||
|
#general_log_file = /var/log/mysql/mysql.log
|
||||||
|
#general_log = 1
|
||||||
|
#
|
||||||
|
# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf.
|
||||||
|
#
|
||||||
|
# we do want to know about network errors and such
|
||||||
|
log_warnings = 2
|
||||||
|
#
|
||||||
|
# Enable the slow query log to see queries with especially long duration
|
||||||
|
slow_query_log = 1
|
||||||
|
slow_query_log_file = /var/log/mysql/mariadb-slow.log
|
||||||
|
long_query_time = 10
|
||||||
|
#log_slow_rate_limit = 1000
|
||||||
|
log_slow_verbosity = query_plan
|
||||||
|
|
||||||
|
#log-queries-not-using-indexes
|
||||||
|
#log_slow_admin_statements
|
||||||
|
#
|
||||||
|
# The following can be used as easy to replay backup logs or for replication.
|
||||||
|
# note: if you are setting up a replication slave, see README.Debian about
|
||||||
|
# other settings you may need to change.
|
||||||
|
#server-id = 1
|
||||||
|
#report_host = master1
|
||||||
|
#auto_increment_increment = 2
|
||||||
|
#auto_increment_offset = 1
|
||||||
|
#log_bin = /var/log/mysql/mariadb-bin
|
||||||
|
#log_bin_index = /var/log/mysql/mariadb-bin.index
|
||||||
|
# not fab for performance, but safer
|
||||||
|
#sync_binlog = 1
|
||||||
|
#expire_logs_days = 10
|
||||||
|
#max_binlog_size = 100M
|
||||||
|
transaction_isolation = READ-COMMITTED
|
||||||
|
binlog_format = ROW
|
||||||
|
|
||||||
|
# slaves
|
||||||
|
#relay_log = /var/log/mysql/relay-bin
|
||||||
|
#relay_log_index = /var/log/mysql/relay-bin.index
|
||||||
|
#relay_log_info_file = /var/log/mysql/relay-bin.info
|
||||||
|
#log_slave_updates
|
||||||
|
#read_only
|
||||||
|
#
|
||||||
|
# If applications support it, this stricter sql_mode prevents some
|
||||||
|
# mistakes like inserting invalid dates etc.
|
||||||
|
#sql_mode = NO_ENGINE_SUBSTITUTION,TRADITIONAL
|
||||||
|
#
|
||||||
|
# * InnoDB
|
||||||
|
#
|
||||||
|
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
|
||||||
|
# Read the manual for more InnoDB related options. There are many!
|
||||||
|
default_storage_engine = InnoDB
|
||||||
|
# you can't just change log file size, requires special procedure
|
||||||
|
innodb_log_file_size = {{inno_log}}M
|
||||||
|
innodb_buffer_pool_size = {{inno_buffer}}M
|
||||||
|
innodb_log_buffer_size = {{inno_log_buffer}}M
|
||||||
|
innodb_file_per_table = 1
|
||||||
|
innodb_open_files = 500000
|
||||||
|
innodb_io_capacity = 500000
|
||||||
|
innodb_flush_method = O_DIRECT
|
||||||
|
innodb_buffer_pool_instances = {{innodb_instances}}
|
||||||
|
#
|
||||||
|
# * Security Features
|
||||||
|
#
|
||||||
|
# Read the manual, too, if you want chroot!
|
||||||
|
# chroot = /var/lib/mysql/
|
||||||
|
#
|
||||||
|
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
|
||||||
|
#
|
||||||
|
# ssl-ca=/etc/mysql/cacert.pem
|
||||||
|
# ssl-cert=/etc/mysql/server-cert.pem
|
||||||
|
# ssl-key=/etc/mysql/server-key.pem
|
||||||
|
|
||||||
|
#
|
||||||
|
# * Galera-related settings
|
||||||
|
#
|
||||||
|
[galera]
|
||||||
|
# Mandatory settings
|
||||||
|
#wsrep_on=ON
|
||||||
|
#wsrep_provider=
|
||||||
|
#wsrep_cluster_address=
|
||||||
|
#binlog_format=row
|
||||||
|
#default_storage_engine=InnoDB
|
||||||
|
#innodb_autoinc_lock_mode=2
|
||||||
|
#
|
||||||
|
# Allow server to accept connections on all interfaces.
|
||||||
|
#
|
||||||
|
#bind-address=0.0.0.0
|
||||||
|
#
|
||||||
|
# Optional setting
|
||||||
|
#wsrep_slave_threads=1
|
||||||
|
#innodb_flush_log_at_trx_commit=0
|
||||||
|
|
||||||
|
[mysqldump]
|
||||||
|
quick
|
||||||
|
quote-names
|
||||||
|
max_allowed_packet = 64M
|
||||||
|
|
||||||
|
[mysql]
|
||||||
|
#no-auto-rehash # faster start of mysql but no tab completion
|
||||||
|
|
||||||
|
[isamchk]
|
||||||
|
key_buffer = 16M
|
||||||
|
|
||||||
|
#
|
||||||
|
# * IMPORTANT: Additional settings that can override those from this file!
|
||||||
|
# The files must end with '.cnf', otherwise they'll be ignored.
|
||||||
|
#
|
||||||
|
!include /etc/mysql/mariadb.cnf
|
||||||
|
!includedir /etc/mysql/conf.d/
|
||||||
@@ -1,11 +1,13 @@
|
|||||||
"""WordOps Swap Creation"""
|
"""WordOps Swap Creation"""
|
||||||
from wo.core.shellexec import WOShellExec
|
|
||||||
from wo.core.fileutils import WOFileUtils
|
|
||||||
from wo.core.aptget import WOAptGet
|
|
||||||
from wo.core.logging import Log
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import psutil
|
import psutil
|
||||||
|
|
||||||
|
from wo.core.aptget import WOAptGet
|
||||||
|
from wo.core.fileutils import WOFileUtils
|
||||||
|
from wo.core.logging import Log
|
||||||
|
from wo.core.shellexec import WOShellExec
|
||||||
|
|
||||||
|
|
||||||
class WOSwap():
|
class WOSwap():
|
||||||
"""Manage Swap"""
|
"""Manage Swap"""
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
"""WordOps packages repository operations"""
|
"""WordOps packages repository operations"""
|
||||||
|
import os
|
||||||
|
|
||||||
|
from wo.core.logging import Log
|
||||||
from wo.core.shellexec import WOShellExec
|
from wo.core.shellexec import WOShellExec
|
||||||
from wo.core.variables import WOVariables
|
from wo.core.variables import WOVariables
|
||||||
from wo.core.logging import Log
|
|
||||||
import os
|
|
||||||
|
|
||||||
|
|
||||||
class WORepo():
|
class WORepo():
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
"""WordOps package installation using apt-get module."""
|
"""WordOps package installation using apt-get module."""
|
||||||
import apt
|
|
||||||
import sys
|
|
||||||
import subprocess
|
import subprocess
|
||||||
from wo.core.logging import Log
|
import sys
|
||||||
|
|
||||||
|
from sh import ErrorReturnCode, apt_get
|
||||||
|
|
||||||
|
import apt
|
||||||
from wo.core.apt_repo import WORepo
|
from wo.core.apt_repo import WORepo
|
||||||
from sh import apt_get
|
from wo.core.logging import Log
|
||||||
from sh import ErrorReturnCode
|
|
||||||
|
|
||||||
|
|
||||||
class WOAptGet():
|
class WOAptGet():
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
|
import requests
|
||||||
|
|
||||||
from wo.core.shellexec import WOShellExec
|
from wo.core.shellexec import WOShellExec
|
||||||
from wo.core.variables import WOVariables
|
from wo.core.variables import WOVariables
|
||||||
import requests
|
|
||||||
|
|
||||||
|
|
||||||
def check_fqdn(self, wo_host):
|
def check_fqdn(self, wo_host):
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
from wo.core.shellexec import WOShellExec
|
|
||||||
from wo.core.logging import Log
|
from wo.core.logging import Log
|
||||||
|
from wo.core.shellexec import WOShellExec
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Set CRON on LINUX system.
|
Set CRON on LINUX system.
|
||||||
|
|||||||
@@ -1,54 +1,52 @@
|
|||||||
"""WordOps domain validation module."""
|
"""WordOps domain validation module."""
|
||||||
from urllib.parse import urlparse
|
|
||||||
import os
|
import os
|
||||||
|
from urllib.parse import urlparse
|
||||||
|
|
||||||
|
|
||||||
def ValidateDomain(url):
|
class DMN():
|
||||||
"""
|
|
||||||
This function returns domain name removing http:// and https://
|
|
||||||
returns domain name only with or without www as user provided.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# Check if http:// or https:// present remove it if present
|
def validatedomain(self, url):
|
||||||
domain_name = url.split('/')
|
"""
|
||||||
if 'http:' in domain_name or 'https:' in domain_name:
|
This function returns domain name removing http:// and https://
|
||||||
domain_name = domain_name[2]
|
returns domain name only with or without www as user provided.
|
||||||
else:
|
"""
|
||||||
domain_name = domain_name[0]
|
|
||||||
www_domain_name = domain_name.split('.')
|
|
||||||
final_domain = ''
|
|
||||||
if www_domain_name[0] == 'www':
|
|
||||||
final_domain = '.'.join(www_domain_name[1:])
|
|
||||||
else:
|
|
||||||
final_domain = domain_name
|
|
||||||
|
|
||||||
return (final_domain, domain_name)
|
# Check if http:// or https:// present remove it if present
|
||||||
|
domain_name = url.split('/')
|
||||||
|
if 'http:' in domain_name or 'https:' in domain_name:
|
||||||
|
domain_name = domain_name[2]
|
||||||
|
else:
|
||||||
|
domain_name = domain_name[0]
|
||||||
|
www_domain_name = domain_name.split('.')
|
||||||
|
final_domain = ''
|
||||||
|
if www_domain_name[0] == 'www':
|
||||||
|
final_domain = '.'.join(www_domain_name[1:])
|
||||||
|
else:
|
||||||
|
final_domain = domain_name
|
||||||
|
|
||||||
|
return (final_domain, domain_name)
|
||||||
|
|
||||||
def GetDomainlevel(domain):
|
def getdomainlevel(self, domain):
|
||||||
"""
|
"""
|
||||||
This function returns the domain type : domain, subdomain,
|
This function returns the domain type : domain, subdomain,
|
||||||
"""
|
"""
|
||||||
domain_name = domain.lower().split('.')
|
domain_name = domain.lower().strip().split('.')
|
||||||
if domain_name[0] == 'www':
|
if domain_name[0] == 'www':
|
||||||
domain_name = domain_name[1:]
|
domain_name = domain_name[1:]
|
||||||
domain_type = ''
|
domain_type = ''
|
||||||
if os.path.isfile("/var/lib/wo/public_suffix_list.dat"):
|
if os.path.isfile("/var/lib/wo/public_suffix_list.dat"):
|
||||||
# Read mode opens a file for reading only.
|
# Read mode opens a file for reading only.
|
||||||
Suffix_file = open(
|
suffix_file = open(
|
||||||
"/var/lib/wo/public_suffix_list.dat", encoding='utf-8', )
|
"/var/lib/wo/public_suffix_list.dat", encoding='utf-8', )
|
||||||
# Read all the lines into a list.
|
# Read all the lines into a list.
|
||||||
for domain_suffix in Suffix_file:
|
for domain_suffix in suffix_file:
|
||||||
if (str(domain_suffix).strip()) == ('.'.join(domain_name[1:])):
|
if (str(domain_suffix).strip()) == ('.'.join(domain_name[1:])):
|
||||||
domain_type = 'domain'
|
domain_type = 'domain'
|
||||||
root_domain = ('.'.join(domain_name[0:]))
|
root_domain = ('.'.join(domain_name[0:]))
|
||||||
break
|
break
|
||||||
elif (str(domain_suffix).strip()) == ('.'.join(domain_name[2:])):
|
else:
|
||||||
domain_type = 'subdomain'
|
domain_type = 'subdomain'
|
||||||
root_domain = ('.'.join(domain_name[1:]))
|
root_domain = ('.'.join(domain_name[1:]))
|
||||||
break
|
suffix_file.close()
|
||||||
else:
|
|
||||||
domain_type = 'other'
|
|
||||||
Suffix_file.close()
|
|
||||||
|
|
||||||
return (domain_type, root_domain)
|
return (domain_type, root_domain)
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
"""WordOps download core classes."""
|
"""WordOps download core classes."""
|
||||||
import urllib.request
|
|
||||||
import urllib.error
|
|
||||||
import os
|
import os
|
||||||
|
import urllib.error
|
||||||
|
import urllib.request
|
||||||
|
|
||||||
from wo.core.logging import Log
|
from wo.core.logging import Log
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
"""WordOps Extract Core """
|
"""WordOps Extract Core """
|
||||||
import tarfile
|
|
||||||
import os
|
import os
|
||||||
|
import tarfile
|
||||||
|
|
||||||
from wo.core.logging import Log
|
from wo.core.logging import Log
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
"""WordOps file utils core classes."""
|
"""WordOps file utils core classes."""
|
||||||
import shutil
|
import fileinput
|
||||||
import os
|
import os
|
||||||
import pwd
|
import pwd
|
||||||
import fileinput
|
import shutil
|
||||||
|
|
||||||
from wo.core.logging import Log
|
from wo.core.logging import Log
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
"""WordOps GIT module"""
|
"""WordOps GIT module"""
|
||||||
from sh import git, ErrorReturnCode
|
|
||||||
from wo.core.logging import Log
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
from sh import ErrorReturnCode, git
|
||||||
|
|
||||||
|
from wo.core.logging import Log
|
||||||
|
|
||||||
|
|
||||||
class WOGit:
|
class WOGit:
|
||||||
"""Intialization of core variables"""
|
"""Intialization of core variables"""
|
||||||
|
|||||||
@@ -45,3 +45,35 @@ class Log:
|
|||||||
Logs debug messages into log file
|
Logs debug messages into log file
|
||||||
"""
|
"""
|
||||||
self.app.log.debug(Log.HEADER + msg + Log.ENDC)
|
self.app.log.debug(Log.HEADER + msg + Log.ENDC)
|
||||||
|
|
||||||
|
def wait(self, msg, end='\r', log=True):
|
||||||
|
"""
|
||||||
|
Logs info messages with validation step
|
||||||
|
"""
|
||||||
|
print(
|
||||||
|
Log.OKBLUE + msg +
|
||||||
|
" [" + Log.ENDC + ".." + Log.OKBLUE + "]" + Log.ENDC, end=end)
|
||||||
|
if log:
|
||||||
|
self.app.log.info(Log.OKBLUE + msg + Log.ENDC)
|
||||||
|
|
||||||
|
def valide(self, msg, end='\n', log=True):
|
||||||
|
"""
|
||||||
|
Logs info messages after validation step
|
||||||
|
"""
|
||||||
|
print(
|
||||||
|
Log.OKBLUE + msg +
|
||||||
|
" [" + Log.ENDC + Log.OKGREEN + "OK" +
|
||||||
|
Log.ENDC + Log.OKBLUE + "]" + Log.ENDC, end=end)
|
||||||
|
if log:
|
||||||
|
self.app.log.info(Log.OKGREEN + msg + Log.ENDC)
|
||||||
|
|
||||||
|
def failed(self, msg, end='\n', log=True):
|
||||||
|
"""
|
||||||
|
Logs info messages after validation step
|
||||||
|
"""
|
||||||
|
print(
|
||||||
|
Log.OKBLUE + msg +
|
||||||
|
" [" + Log.ENDC + Log.FAIL + "OK" +
|
||||||
|
Log.ENDC + Log.OKBLUE + "]" + Log.ENDC, end=end)
|
||||||
|
if log:
|
||||||
|
self.app.log.info(Log.FAIL + msg + Log.ENDC)
|
||||||
|
|||||||
@@ -3,10 +3,11 @@
|
|||||||
Real time log files watcher supporting log rotation.
|
Real time log files watcher supporting log rotation.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
|
||||||
import time
|
|
||||||
import errno
|
import errno
|
||||||
|
import os
|
||||||
import stat
|
import stat
|
||||||
|
import time
|
||||||
|
|
||||||
from wo.core.logging import Log
|
from wo.core.logging import Log
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
"""WordOps MySQL core classes."""
|
"""WordOps MySQL core classes."""
|
||||||
import pymysql
|
|
||||||
from pymysql import connections, DatabaseError, Error
|
|
||||||
from os.path import expanduser
|
|
||||||
import os
|
import os
|
||||||
|
from os.path import expanduser
|
||||||
|
|
||||||
|
import pymysql
|
||||||
|
from pymysql import DatabaseError, Error, connections
|
||||||
|
|
||||||
from wo.core.logging import Log
|
from wo.core.logging import Log
|
||||||
from wo.core.variables import WOVariables
|
from wo.core.variables import WOVariables
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
"""WordOps Hash Bucket Calculator"""
|
"""WordOps Hash Bucket Calculator"""
|
||||||
from wo.core.fileutils import WOFileUtils
|
import fileinput
|
||||||
import math
|
import math
|
||||||
import os
|
import os
|
||||||
import fileinput
|
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
|
from wo.core.fileutils import WOFileUtils
|
||||||
|
|
||||||
|
|
||||||
def hashbucket(self):
|
def hashbucket(self):
|
||||||
# Check Nginx Hashbucket error
|
# Check Nginx Hashbucket error
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import smtplib
|
|
||||||
import os
|
import os
|
||||||
from email.mime.multipart import MIMEMultipart
|
import smtplib
|
||||||
|
from email import encoders
|
||||||
from email.mime.base import MIMEBase
|
from email.mime.base import MIMEBase
|
||||||
|
from email.mime.multipart import MIMEMultipart
|
||||||
from email.mime.text import MIMEText
|
from email.mime.text import MIMEText
|
||||||
from email.utils import COMMASPACE, formatdate
|
from email.utils import COMMASPACE, formatdate
|
||||||
from email import encoders
|
|
||||||
|
|
||||||
|
|
||||||
def WOSendMail(send_from, send_to, subject, text, files, server="localhost",
|
def WOSendMail(send_from, send_to, subject, text, files, server="localhost",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
"""WordOps Service Manager"""
|
"""WordOps Service Manager"""
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
from wo.core.logging import Log
|
from wo.core.logging import Log
|
||||||
|
|
||||||
|
|
||||||
@@ -15,21 +16,21 @@ class WOService():
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
if service_name in ['nginx']:
|
if service_name in ['nginx']:
|
||||||
|
Log.wait(self, "Testing Nginx configuration ")
|
||||||
# Check Nginx configuration before executing command
|
# Check Nginx configuration before executing command
|
||||||
sub = subprocess.Popen('nginx -t', stdout=subprocess.PIPE,
|
sub = subprocess.Popen('nginx -t', stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE, shell=True)
|
stderr=subprocess.PIPE, shell=True)
|
||||||
output, error_output = sub.communicate()
|
output, error_output = sub.communicate()
|
||||||
if 'emerg' not in str(error_output):
|
if 'emerg' not in str(error_output):
|
||||||
|
Log.valide(self, "Testing Nginx configuration ")
|
||||||
|
Log.wait(self, "Starting Nginx ")
|
||||||
service_cmd = ('service {0} start'.format(service_name))
|
service_cmd = ('service {0} start'.format(service_name))
|
||||||
retcode = subprocess.getstatusoutput(service_cmd)
|
retcode = subprocess.getstatusoutput(service_cmd)
|
||||||
if retcode[0] == 0:
|
if retcode[0] == 0:
|
||||||
Log.info(self, "Starting Nginx " +
|
Log.valide(self, "Starting Nginx ")
|
||||||
"[" + Log.ENDC + "OK" + Log.OKBLUE + "]")
|
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
Log.info(
|
Log.failed(self, "Testing Nginx configuration ")
|
||||||
self, "Starting Nginx " + "[" + Log.FAIL +
|
|
||||||
"Failed" + Log.OKBLUE+"]")
|
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
service_cmd = ('service {0} start'.format(service_name))
|
service_cmd = ('service {0} start'.format(service_name))
|
||||||
@@ -76,32 +77,35 @@ class WOService():
|
|||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
if service_name in ['nginx']:
|
if service_name in ['nginx']:
|
||||||
|
Log.wait(self, "Testing Nginx configuration ")
|
||||||
# Check Nginx configuration before executing command
|
# Check Nginx configuration before executing command
|
||||||
sub = subprocess.Popen('nginx -t', stdout=subprocess.PIPE,
|
sub = subprocess.Popen('nginx -t', stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE, shell=True)
|
stderr=subprocess.PIPE, shell=True)
|
||||||
output, error_output = sub.communicate()
|
output, error_output = sub.communicate()
|
||||||
if 'emerg' not in str(error_output):
|
if 'emerg' not in str(error_output):
|
||||||
|
Log.valide(self, "Testing Nginx configuration ")
|
||||||
|
Log.wait(self, "Restarting Nginx ")
|
||||||
service_cmd = ('service {0} restart'.format(service_name))
|
service_cmd = ('service {0} restart'.format(service_name))
|
||||||
retcode = subprocess.getstatusoutput(service_cmd)
|
retcode = subprocess.getstatusoutput(service_cmd)
|
||||||
if retcode[0] == 0:
|
if retcode[0] == 0:
|
||||||
Log.info(self, "Restarting Nginx " +
|
Log.valide(self, "Restarting Nginx ")
|
||||||
"[" + Log.ENDC + "OK" + Log.OKBLUE + "]")
|
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
Log.info(self, "Restarting Nginx " + "[" + Log.FAIL +
|
Log.failed(self, "Testing Nginx configuration ")
|
||||||
"Failed" + Log.OKBLUE+"]")
|
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
service_cmd = ('service {0} restart'.format(service_name))
|
service_cmd = ('service {0} restart'.format(service_name))
|
||||||
Log.info(self, "Restart : {0:10}".format(
|
Log.wait(self, "Restarting {0:10}".format(
|
||||||
service_name), end='')
|
service_name))
|
||||||
retcode = subprocess.getstatusoutput(service_cmd)
|
retcode = subprocess.getstatusoutput(service_cmd)
|
||||||
if retcode[0] == 0:
|
if retcode[0] == 0:
|
||||||
Log.info(self, "[" + Log.ENDC + "OK" + Log.OKBLUE + "]")
|
Log.valide(self, "Restarting {0:10}".format(
|
||||||
|
service_name))
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
Log.debug(self, "{0}".format(retcode[1]))
|
Log.debug(self, "{0}".format(retcode[1]))
|
||||||
Log.info(self, "[" + Log.FAIL + "Failed" + Log.OKBLUE+"]")
|
Log.failed(self, "Restarting {0:10}".format(
|
||||||
|
service_name))
|
||||||
return False
|
return False
|
||||||
except OSError as e:
|
except OSError as e:
|
||||||
Log.debug(self, "{0} {1}".format(e.errno, e.strerror))
|
Log.debug(self, "{0} {1}".format(e.errno, e.strerror))
|
||||||
@@ -116,31 +120,33 @@ class WOService():
|
|||||||
try:
|
try:
|
||||||
if service_name in ['nginx']:
|
if service_name in ['nginx']:
|
||||||
# Check Nginx configuration before executing command
|
# Check Nginx configuration before executing command
|
||||||
|
Log.wait(self, "Testing Nginx configuration ")
|
||||||
sub = subprocess.Popen('nginx -t', stdout=subprocess.PIPE,
|
sub = subprocess.Popen('nginx -t', stdout=subprocess.PIPE,
|
||||||
stderr=subprocess.PIPE, shell=True)
|
stderr=subprocess.PIPE, shell=True)
|
||||||
output, error_output = sub.communicate()
|
output, error_output = sub.communicate()
|
||||||
if 'emerg' not in str(error_output):
|
if 'emerg' not in str(error_output):
|
||||||
|
Log.valide(self, "Testing Nginx configuration ")
|
||||||
|
Log.wait(self, "Reloading Nginx ")
|
||||||
service_cmd = ('service {0} reload'.format(service_name))
|
service_cmd = ('service {0} reload'.format(service_name))
|
||||||
retcode = subprocess.getstatusoutput(service_cmd)
|
retcode = subprocess.getstatusoutput(service_cmd)
|
||||||
if retcode[0] == 0:
|
if retcode[0] == 0:
|
||||||
Log.info(self, "Reloading Nginx " +
|
Log.valide(self, "Reloading Nginx ")
|
||||||
"[" + Log.ENDC + "OK" + Log.OKBLUE + "]")
|
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
Log.info(
|
Log.failed(self, "Testing Nginx configuration ")
|
||||||
self, "Reloading Nginx " + "[" + Log.FAIL +
|
|
||||||
"Failed" + Log.OKBLUE+"]")
|
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
service_cmd = ('service {0} reload'.format(service_name))
|
service_cmd = ('service {0} reload'.format(service_name))
|
||||||
Log.info(self, "Reload : {0:10}".format(service_name), end='')
|
Log.wait(self, "Reloading {0:10}".format(
|
||||||
|
service_name))
|
||||||
retcode = subprocess.getstatusoutput(service_cmd)
|
retcode = subprocess.getstatusoutput(service_cmd)
|
||||||
if retcode[0] == 0:
|
if retcode[0] == 0:
|
||||||
Log.info(self, "[" + Log.ENDC + "OK" + Log.OKBLUE + "]")
|
Log.valide(self, "Reloading {0:10}".format(
|
||||||
return True
|
service_name))
|
||||||
else:
|
else:
|
||||||
Log.debug(self, "{0}".format(retcode[1]))
|
Log.debug(self, "{0}".format(retcode[1]))
|
||||||
Log.info(self, "[" + Log.FAIL + "Failed" + Log.OKBLUE+"]")
|
Log.failed(self, "Reloading {0:10}".format(
|
||||||
|
service_name))
|
||||||
return False
|
return False
|
||||||
except OSError as e:
|
except OSError as e:
|
||||||
Log.debug(self, "{0}".format(e))
|
Log.debug(self, "{0}".format(e))
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
"""WordOps Shell Functions"""
|
"""WordOps Shell Functions"""
|
||||||
from wo.core.logging import Log
|
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
|
from wo.core.logging import Log
|
||||||
|
|
||||||
|
|
||||||
class CommandExecutionError(Exception):
|
class CommandExecutionError(Exception):
|
||||||
"""custom Exception for command execution"""
|
"""custom Exception for command execution"""
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
|
import csv
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
|
from wo.core.fileutils import WOFileUtils
|
||||||
from wo.core.logging import Log
|
from wo.core.logging import Log
|
||||||
from wo.core.shellexec import WOShellExec
|
from wo.core.shellexec import WOShellExec
|
||||||
|
from wo.core.variables import WOVariables
|
||||||
|
|
||||||
|
|
||||||
class SSL:
|
class SSL:
|
||||||
|
|
||||||
def getExpirationDays(self, domain, returnonerror=False):
|
def getexpirationdays(self, domain, returnonerror=False):
|
||||||
# check if exist
|
# check if exist
|
||||||
if not os.path.isfile('/etc/letsencrypt/live/{0}/cert.pem'
|
if not os.path.isfile('/etc/letsencrypt/live/{0}/cert.pem'
|
||||||
.format(domain)):
|
.format(domain)):
|
||||||
@@ -33,7 +37,7 @@ class SSL:
|
|||||||
# return "Certificate Already Expired ! Please Renew soon."
|
# return "Certificate Already Expired ! Please Renew soon."
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
def getExpirationDate(self, domain):
|
def getexpirationdate(self, domain):
|
||||||
# check if exist
|
# check if exist
|
||||||
if not os.path.isfile('/etc/letsencrypt/live/{0}/cert.pem'
|
if not os.path.isfile('/etc/letsencrypt/live/{0}/cert.pem'
|
||||||
.format(domain)):
|
.format(domain)):
|
||||||
@@ -49,3 +53,61 @@ class SSL:
|
|||||||
"\"Not After\" | cut -c 25-)\" "
|
"\"Not After\" | cut -c 25-)\" "
|
||||||
.format(domain))
|
.format(domain))
|
||||||
return expiration_date
|
return expiration_date
|
||||||
|
|
||||||
|
def siteurlhttps(self, domain):
|
||||||
|
wo_site_webroot = ('/var/www/{0}'.format(domain))
|
||||||
|
WOFileUtils.chdir(
|
||||||
|
self, '{0}/htdocs/'.format(wo_site_webroot))
|
||||||
|
if WOShellExec.cmd_exec(
|
||||||
|
self, "{0} --allow-root core is-installed"
|
||||||
|
.format(WOVariables.wo_wp_cli)):
|
||||||
|
wo_siteurl = (
|
||||||
|
WOShellExec.cmd_exec_stdout(
|
||||||
|
self, "{0} option get siteurl "
|
||||||
|
.format(WOVariables.wo_wpcli_path) +
|
||||||
|
"--allow-root --quiet"))
|
||||||
|
test_url = re.split(":", wo_siteurl)
|
||||||
|
if not (test_url[0] == 'https'):
|
||||||
|
WOShellExec.cmd_exec(
|
||||||
|
self, "{0} option update siteurl "
|
||||||
|
"\'https://{1}\' --allow-root".format(
|
||||||
|
WOVariables.wo_wpcli_path, domain))
|
||||||
|
WOShellExec.cmd_exec(
|
||||||
|
self, "{0} option update home "
|
||||||
|
"\'https://{1}\' --allow-root".format(
|
||||||
|
WOVariables.wo_wpcli_path, domain))
|
||||||
|
WOShellExec.cmd_exec(
|
||||||
|
self, "{0} search-replace \'http://{0}\'"
|
||||||
|
"\'https://{0}\' --skip-columns=guid "
|
||||||
|
"--skip-tables=wp_users"
|
||||||
|
.format(domain))
|
||||||
|
Log.info(
|
||||||
|
self, "Site address updated "
|
||||||
|
"successfully to https://{0}".format(domain))
|
||||||
|
|
||||||
|
# check if a wildcard exist to secure a new subdomain
|
||||||
|
|
||||||
|
def checkwildcardexist(self, wo_domain_name):
|
||||||
|
|
||||||
|
wo_acme_exec = ("/etc/letsencrypt/acme.sh --config-home "
|
||||||
|
"'/etc/letsencrypt/config'")
|
||||||
|
# export certificates list from acme.sh
|
||||||
|
WOShellExec.cmd_exec(
|
||||||
|
self, "{0} ".format(wo_acme_exec) +
|
||||||
|
"--list --listraw > /var/lib/wo/cert.csv")
|
||||||
|
|
||||||
|
# define new csv dialect
|
||||||
|
csv.register_dialect('acmeconf', delimiter='|')
|
||||||
|
# open file
|
||||||
|
certfile = open('/var/lib/wo/cert.csv', mode='r', encoding='utf-8')
|
||||||
|
reader = csv.reader(certfile, 'acmeconf')
|
||||||
|
wo_wildcard_domain = ("*.{0}".format(wo_domain_name))
|
||||||
|
for row in reader:
|
||||||
|
if wo_wildcard_domain in row[2]:
|
||||||
|
iswildcard = True
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
iswildcard = False
|
||||||
|
certfile.close()
|
||||||
|
|
||||||
|
return iswildcard
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
from wo.core.logging import Log
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
from wo.core.logging import Log
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Render Templates
|
Render Templates
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
"""WordOps core variable module"""
|
"""WordOps core variable module"""
|
||||||
import distro
|
|
||||||
import socket
|
|
||||||
import configparser
|
import configparser
|
||||||
import os
|
|
||||||
import datetime
|
import datetime
|
||||||
|
import os
|
||||||
|
import socket
|
||||||
|
|
||||||
|
import distro
|
||||||
|
|
||||||
|
|
||||||
class WOVariables():
|
class WOVariables():
|
||||||
"""Intialization of core variables"""
|
"""Intialization of core variables"""
|
||||||
|
|
||||||
# WordOps version
|
# WordOps version
|
||||||
wo_version = "3.9.8.9"
|
wo_version = "3.9.8.10"
|
||||||
# WordOps packages versions
|
# WordOps packages versions
|
||||||
wo_wp_cli = "2.2.0"
|
wo_wp_cli = "2.2.0"
|
||||||
wo_adminer = "4.7.2"
|
wo_adminer = "4.7.2"
|
||||||
@@ -144,21 +145,13 @@ class WOVariables():
|
|||||||
"10.3/debian {codename} main"
|
"10.3/debian {codename} main"
|
||||||
.format(codename=wo_platform_codename))
|
.format(codename=wo_platform_codename))
|
||||||
|
|
||||||
if wo_distro == 'raspbian':
|
|
||||||
wo_mysql = ["mariadb-server", "percona-toolkit",
|
|
||||||
"python3-mysqldb"]
|
|
||||||
elif wo_platform_codename == 'jessie':
|
|
||||||
wo_mysql = ["mariadb-server", "percona-toolkit",
|
|
||||||
"python3-mysql.connector"]
|
|
||||||
else:
|
|
||||||
wo_mysql = ["mariadb-server", "percona-toolkit",
|
|
||||||
"python3-mysqldb", "mariadb-backup"]
|
|
||||||
|
|
||||||
if wo_platform_codename == 'jessie':
|
if wo_platform_codename == 'jessie':
|
||||||
wo_mysql_client = ["mariadb-client", "python3-mysqldb"]
|
wo_mysql_client = ["mariadb-client", "python3-mysqldb"]
|
||||||
else:
|
else:
|
||||||
wo_mysql_client = ["mariadb-client", "python3-mysql.connector"]
|
wo_mysql_client = ["mariadb-client", "python3-mysql.connector"]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
wo_fail2ban = ["fail2ban"]
|
wo_fail2ban = ["fail2ban"]
|
||||||
wo_clamav = ["clamav", "clamav-freshclam"]
|
wo_clamav = ["clamav", "clamav-freshclam"]
|
||||||
|
|
||||||
@@ -170,7 +163,7 @@ class WOVariables():
|
|||||||
wo_redis_repo = ("deb https://packages.sury.org/php/ {codename} all"
|
wo_redis_repo = ("deb https://packages.sury.org/php/ {codename} all"
|
||||||
.format(codename=wo_platform_codename))
|
.format(codename=wo_platform_codename))
|
||||||
|
|
||||||
wo_redis = ['redis-server', 'php-redis']
|
wo_redis = ['redis-server']
|
||||||
|
|
||||||
# Repo path
|
# Repo path
|
||||||
wo_repo_file = "wo-repo.list"
|
wo_repo_file = "wo-repo.list"
|
||||||
|
|||||||
Reference in New Issue
Block a user