v3.11.0 (#211)
- PHP 7.4 support - Improved Webp images support with Cloudflare (Issue [#95](https://github.com/WordOps/WordOps/issues/95)). Nginx will not serve webp images alternative with Cloudflare IP ranges. - Stack upgrade for adminer - Check acme.sh installation and setup acme.sh if needed before issuing certificate - Add `--ufw` to `wo stack status` - Add Nginx directive `gzip_static on;` to serve precompressed assets with Cache-Enabler or WP-Rocket. (Issue [#207](https://github.com/WordOps/WordOps/issues/207)) - Previous `--php73` & `--php73=off` flags are replaced by `--php72`, `--php73`, `--php74` to switch site's php version - phpMyAdmin updated to v4.9.2 - Adminer updated to v4.7.5 - Replace dot and dashes by underscores in database names (Issue [#206](https://github.com/WordOps/WordOps/issues/206)) - Increased database name length to 32 characters from domain name + 8 random characters - typo error in motd-news script (Issue [#204](https://github.com/WordOps/WordOps/issues/204)) - Install Nginx before ngxblocker - WordOps install/update script text color - Issue with MySQL stack on Raspbian 9/10 - Typo error (PR [#205](https://github.com/WordOps/WordOps/pull/205)) - php version in `wo debug` (PR [#209](https://github.com/WordOps/WordOps/pull/209)) - SSL certificates expiration display with shared wildcard certificates
This commit is contained in:
@@ -32,6 +32,9 @@ class WOInfoController(CementBaseController):
|
||||
(['--php73'],
|
||||
dict(help='Get PHP 7.3 configuration information',
|
||||
action='store_true')),
|
||||
(['--php74'],
|
||||
dict(help='Get PHP 7.4 configuration information',
|
||||
action='store_true')),
|
||||
(['--nginx'],
|
||||
dict(help='Get Nginx configuration information',
|
||||
action='store_true')),
|
||||
@@ -238,6 +241,93 @@ class WOInfoController(CementBaseController):
|
||||
debug_xdebug_profiler_enable_trigger=debug_xdebug)
|
||||
self.app.render((data), 'info_php.mustache')
|
||||
|
||||
@expose(hide=True)
|
||||
def info_php74(self):
|
||||
"""Display PHP information"""
|
||||
version = os.popen("/usr/bin/php7.4 -v 2>/dev/null | "
|
||||
"head -n1 | cut -d' ' -f2 |"
|
||||
" cut -d'+' -f1 | tr -d '\n'").read
|
||||
config = configparser.ConfigParser()
|
||||
config.read('/etc/php/7.4/fpm/php.ini')
|
||||
expose_php = config['PHP']['expose_php']
|
||||
memory_limit = config['PHP']['memory_limit']
|
||||
post_max_size = config['PHP']['post_max_size']
|
||||
upload_max_filesize = config['PHP']['upload_max_filesize']
|
||||
max_execution_time = config['PHP']['max_execution_time']
|
||||
|
||||
if os.path.exists('/etc/php/7.4/fpm/pool.d/www.conf'):
|
||||
config.read('/etc/php/7.4/fpm/pool.d/www.conf')
|
||||
else:
|
||||
Log.error(self, 'php-fpm pool config not found')
|
||||
if config.has_section('www'):
|
||||
wconfig = config['www']
|
||||
elif config.has_section('www-php74'):
|
||||
wconfig = config['www-php74']
|
||||
else:
|
||||
Log.error(self, 'Unable to parse configuration')
|
||||
www_listen = wconfig['listen']
|
||||
www_ping_path = wconfig['ping.path']
|
||||
www_pm_status_path = wconfig['pm.status_path']
|
||||
www_pm = wconfig['pm']
|
||||
www_pm_max_requests = wconfig['pm.max_requests']
|
||||
www_pm_max_children = wconfig['pm.max_children']
|
||||
www_pm_start_servers = wconfig['pm.start_servers']
|
||||
www_pm_min_spare_servers = wconfig['pm.min_spare_servers']
|
||||
www_pm_max_spare_servers = wconfig['pm.max_spare_servers']
|
||||
www_request_terminate_time = (wconfig
|
||||
['request_terminate_timeout'])
|
||||
try:
|
||||
www_xdebug = (wconfig
|
||||
['php_admin_flag[xdebug.profiler_enable'
|
||||
'_trigger]'])
|
||||
except Exception as e:
|
||||
Log.debug(self, "{0}".format(e))
|
||||
www_xdebug = 'off'
|
||||
|
||||
config.read('/etc/php/7.4/fpm/pool.d/debug.conf')
|
||||
debug_listen = config['debug']['listen']
|
||||
debug_ping_path = config['debug']['ping.path']
|
||||
debug_pm_status_path = config['debug']['pm.status_path']
|
||||
debug_pm = config['debug']['pm']
|
||||
debug_pm_max_requests = config['debug']['pm.max_requests']
|
||||
debug_pm_max_children = config['debug']['pm.max_children']
|
||||
debug_pm_start_servers = config['debug']['pm.start_servers']
|
||||
debug_pm_min_spare_servers = config['debug']['pm.min_spare_servers']
|
||||
debug_pm_max_spare_servers = config['debug']['pm.max_spare_servers']
|
||||
debug_request_terminate = (config['debug']
|
||||
['request_terminate_timeout'])
|
||||
try:
|
||||
debug_xdebug = (config['debug']['php_admin_flag[xdebug.profiler_'
|
||||
'enable_trigger]'])
|
||||
except Exception as e:
|
||||
Log.debug(self, "{0}".format(e))
|
||||
debug_xdebug = 'off'
|
||||
|
||||
data = dict(version=version, expose_php=expose_php,
|
||||
memory_limit=memory_limit, post_max_size=post_max_size,
|
||||
upload_max_filesize=upload_max_filesize,
|
||||
max_execution_time=max_execution_time,
|
||||
www_listen=www_listen, www_ping_path=www_ping_path,
|
||||
www_pm_status_path=www_pm_status_path, www_pm=www_pm,
|
||||
www_pm_max_requests=www_pm_max_requests,
|
||||
www_pm_max_children=www_pm_max_children,
|
||||
www_pm_start_servers=www_pm_start_servers,
|
||||
www_pm_min_spare_servers=www_pm_min_spare_servers,
|
||||
www_pm_max_spare_servers=www_pm_max_spare_servers,
|
||||
www_request_terminate_timeout=www_request_terminate_time,
|
||||
www_xdebug_profiler_enable_trigger=www_xdebug,
|
||||
debug_listen=debug_listen, debug_ping_path=debug_ping_path,
|
||||
debug_pm_status_path=debug_pm_status_path,
|
||||
debug_pm=debug_pm,
|
||||
debug_pm_max_requests=debug_pm_max_requests,
|
||||
debug_pm_max_children=debug_pm_max_children,
|
||||
debug_pm_start_servers=debug_pm_start_servers,
|
||||
debug_pm_min_spare_servers=debug_pm_min_spare_servers,
|
||||
debug_pm_max_spare_servers=debug_pm_max_spare_servers,
|
||||
debug_request_terminate_timeout=debug_request_terminate,
|
||||
debug_xdebug_profiler_enable_trigger=debug_xdebug)
|
||||
self.app.render((data), 'info_php.mustache')
|
||||
|
||||
@expose(hide=True)
|
||||
def info_mysql(self):
|
||||
"""Display MySQL information"""
|
||||
@@ -275,38 +365,48 @@ class WOInfoController(CementBaseController):
|
||||
@expose(hide=True)
|
||||
def default(self):
|
||||
"""default function for info"""
|
||||
if (not self.app.pargs.nginx and not self.app.pargs.php and
|
||||
not self.app.pargs.mysql and not self.app.pargs.php73):
|
||||
self.app.pargs.nginx = True
|
||||
self.app.pargs.php = True
|
||||
self.app.pargs.mysql = True
|
||||
pargs = self.app.pargs
|
||||
if (not pargs.nginx and not pargs.php and
|
||||
not pargs.mysql and not pargs.php73 and
|
||||
not pargs.php74):
|
||||
pargs.nginx = True
|
||||
pargs.php = True
|
||||
pargs.mysql = True
|
||||
if WOAptGet.is_installed(self, 'php7.3-fpm'):
|
||||
self.app.pargs.php73 = True
|
||||
pargs.php73 = True
|
||||
if WOAptGet.is_installed(self, 'php7.4-fpm'):
|
||||
pargs.php74 = True
|
||||
|
||||
if self.app.pargs.nginx:
|
||||
if pargs.nginx:
|
||||
if ((not WOAptGet.is_installed(self, 'nginx-custom')) and
|
||||
(not os.path.exists('/usr/bin/nginx'))):
|
||||
Log.error(self, "Nginx is not installed")
|
||||
Log.info(self, "Nginx is not installed")
|
||||
else:
|
||||
self.info_nginx()
|
||||
|
||||
if self.app.pargs.php:
|
||||
if pargs.php:
|
||||
if WOAptGet.is_installed(self, 'php7.2-fpm'):
|
||||
self.info_php()
|
||||
else:
|
||||
Log.error(self, "PHP 7.2 is not installed")
|
||||
Log.info(self, "PHP 7.2 is not installed")
|
||||
|
||||
if self.app.pargs.php73:
|
||||
if pargs.php73:
|
||||
if WOAptGet.is_installed(self, 'php7.3-fpm'):
|
||||
self.info_php73()
|
||||
else:
|
||||
Log.error(self, "PHP 7.3 is not installed")
|
||||
Log.info(self, "PHP 7.3 is not installed")
|
||||
|
||||
if self.app.pargs.mysql:
|
||||
if pargs.php74:
|
||||
if WOAptGet.is_installed(self, 'php7.4-fpm'):
|
||||
self.info_php74()
|
||||
else:
|
||||
Log.info(self, "PHP 7.4 is not installed")
|
||||
|
||||
if pargs.mysql:
|
||||
if WOShellExec.cmd_exec(self, "/usr/bin/mysqladmin ping"):
|
||||
self.info_mysql()
|
||||
else:
|
||||
Log.error(self, "MySQL is not installed")
|
||||
Log.info(self, "MySQL is not installed")
|
||||
|
||||
|
||||
def load(app):
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
551
wo/cli/plugins/site_create.py
Normal file
551
wo/cli/plugins/site_create.py
Normal file
@@ -0,0 +1,551 @@
|
||||
import os
|
||||
|
||||
from cement.core.controller import CementBaseController, expose
|
||||
from wo.cli.plugins.site_functions import *
|
||||
from wo.cli.plugins.sitedb import (addNewSite, deleteSiteInfo,
|
||||
updateSiteInfo)
|
||||
from wo.core.acme import WOAcme
|
||||
from wo.core.domainvalidate import WODomain
|
||||
from wo.core.git import WOGit
|
||||
from wo.core.logging import Log
|
||||
from wo.core.nginxhashbucket import hashbucket
|
||||
from wo.core.services import WOService
|
||||
from wo.core.sslutils import SSL
|
||||
from wo.core.variables import WOVar
|
||||
|
||||
|
||||
class WOSiteCreateController(CementBaseController):
|
||||
class Meta:
|
||||
label = 'create'
|
||||
stacked_on = 'site'
|
||||
stacked_type = 'nested'
|
||||
description = ('this commands set up configuration and installs '
|
||||
'required files as options are provided')
|
||||
arguments = [
|
||||
(['site_name'],
|
||||
dict(help='domain name for the site to be created.',
|
||||
nargs='?')),
|
||||
(['--html'],
|
||||
dict(help="create html site", action='store_true')),
|
||||
(['--php'],
|
||||
dict(help="create php 7.2 site", action='store_true')),
|
||||
(['--php72'],
|
||||
dict(help="create php 7.2 site", action='store_true')),
|
||||
(['--php73'],
|
||||
dict(help="create php 7.3 site", action='store_true')),
|
||||
(['--php74'],
|
||||
dict(help="create php 7.4 site", action='store_true')),
|
||||
(['--mysql'],
|
||||
dict(help="create mysql site", action='store_true')),
|
||||
(['--wp'],
|
||||
dict(help="create WordPress single site",
|
||||
action='store_true')),
|
||||
(['--wpsubdir'],
|
||||
dict(help="create WordPress multisite with subdirectory setup",
|
||||
action='store_true')),
|
||||
(['--wpsubdomain'],
|
||||
dict(help="create WordPress multisite with subdomain setup",
|
||||
action='store_true')),
|
||||
(['--wpfc'],
|
||||
dict(help="create WordPress single/multi site with "
|
||||
"Nginx fastcgi_cache",
|
||||
action='store_true')),
|
||||
(['--wpsc'],
|
||||
dict(help="create WordPress single/multi site with wpsc cache",
|
||||
action='store_true')),
|
||||
(['--wprocket'],
|
||||
dict(help="create WordPress single/multi site with WP-Rocket",
|
||||
action='store_true')),
|
||||
(['--wpce'],
|
||||
dict(help="create WordPress single/multi site with Cache-Enabler",
|
||||
action='store_true')),
|
||||
(['--wpredis'],
|
||||
dict(help="create WordPress single/multi site "
|
||||
"with redis cache",
|
||||
action='store_true')),
|
||||
(['-le', '--letsencrypt'],
|
||||
dict(help="configure letsencrypt ssl for the site",
|
||||
action='store' or 'store_const',
|
||||
choices=('on', 'subdomain', 'wildcard'),
|
||||
const='on', nargs='?')),
|
||||
(['--force'],
|
||||
dict(help="force Let's Encrypt certificate issuance",
|
||||
action='store_true')),
|
||||
(['--dns'],
|
||||
dict(help="choose dns provider api for letsencrypt",
|
||||
action='store' or 'store_const',
|
||||
const='dns_cf', nargs='?')),
|
||||
(['--dnsalias'],
|
||||
dict(help="set domain used for acme dns alias validation",
|
||||
action='store', nargs='?')),
|
||||
(['--hsts'],
|
||||
dict(help="enable HSTS for site secured with letsencrypt",
|
||||
action='store_true')),
|
||||
(['--ngxblocker'],
|
||||
dict(help="enable HSTS for site secured with letsencrypt",
|
||||
action='store_true')),
|
||||
(['--user'],
|
||||
dict(help="provide user for WordPress site")),
|
||||
(['--email'],
|
||||
dict(help="provide email address for WordPress site")),
|
||||
(['--pass'],
|
||||
dict(help="provide password for WordPress user",
|
||||
dest='wppass')),
|
||||
(['--proxy'],
|
||||
dict(help="create proxy for site", nargs='+')),
|
||||
(['--vhostonly'], dict(help="only create vhost and database "
|
||||
"without installing WordPress",
|
||||
action='store_true')),
|
||||
]
|
||||
|
||||
@expose(hide=True)
|
||||
def default(self):
|
||||
pargs = self.app.pargs
|
||||
# self.app.render((data), 'default.mustache')
|
||||
# Check domain name validation
|
||||
data = dict()
|
||||
host, port = None, None
|
||||
try:
|
||||
stype, cache = detSitePar(vars(pargs))
|
||||
except RuntimeError as e:
|
||||
Log.debug(self, str(e))
|
||||
Log.error(self, "Please provide valid options to creating site")
|
||||
|
||||
if stype is None and pargs.proxy:
|
||||
stype, cache = 'proxy', ''
|
||||
proxyinfo = pargs.proxy[0].strip()
|
||||
if not proxyinfo:
|
||||
Log.error(self, "Please provide proxy server host information")
|
||||
proxyinfo = proxyinfo.split(':')
|
||||
host = proxyinfo[0].strip()
|
||||
port = '80' if len(proxyinfo) < 2 else proxyinfo[1].strip()
|
||||
elif stype is None and not pargs.proxy:
|
||||
stype, cache = 'html', 'basic'
|
||||
elif stype and pargs.proxy:
|
||||
Log.error(self, "proxy should not be used with other site types")
|
||||
|
||||
if not pargs.site_name:
|
||||
try:
|
||||
while not pargs.site_name:
|
||||
# preprocessing before finalize site name
|
||||
pargs.site_name = (input('Enter site name : ')
|
||||
.strip())
|
||||
except IOError as e:
|
||||
Log.debug(self, str(e))
|
||||
Log.error(self, "Unable to input site name, Please try again!")
|
||||
|
||||
pargs.site_name = pargs.site_name.strip()
|
||||
wo_domain = WODomain.validate(self, pargs.site_name)
|
||||
wo_www_domain = "www.{0}".format(wo_domain)
|
||||
(wo_domain_type, wo_root_domain) = WODomain.getlevel(
|
||||
self, wo_domain)
|
||||
if not wo_domain.strip():
|
||||
Log.error(self, "Invalid domain name, "
|
||||
"Provide valid domain name")
|
||||
|
||||
wo_site_webroot = WOVar.wo_webroot + wo_domain
|
||||
|
||||
if check_domain_exists(self, wo_domain):
|
||||
Log.error(self, "site {0} already exists".format(wo_domain))
|
||||
elif os.path.isfile('/etc/nginx/sites-available/{0}'
|
||||
.format(wo_domain)):
|
||||
Log.error(self, "Nginx configuration /etc/nginx/sites-available/"
|
||||
"{0} already exists".format(wo_domain))
|
||||
|
||||
if stype == 'proxy':
|
||||
data = dict(
|
||||
site_name=wo_domain, www_domain=wo_www_domain,
|
||||
static=True, basic=False, wp=False,
|
||||
wpfc=False, wpsc=False, wprocket=False, wpce=False,
|
||||
multisite=False, wpsubdir=False, webroot=wo_site_webroot)
|
||||
data['proxy'] = True
|
||||
data['host'] = host
|
||||
data['port'] = port
|
||||
data['basic'] = True
|
||||
|
||||
if pargs.php72 or pargs.php73 or pargs.php74:
|
||||
data = dict(
|
||||
site_name=wo_domain, www_domain=wo_www_domain,
|
||||
static=False, basic=False,
|
||||
wp=False, wpfc=False, wpsc=False, wprocket=False,
|
||||
wpce=False, multisite=False,
|
||||
wpsubdir=False, webroot=wo_site_webroot)
|
||||
data['basic'] = True
|
||||
|
||||
if stype in ['html', 'php']:
|
||||
data = dict(
|
||||
site_name=wo_domain, www_domain=wo_www_domain,
|
||||
static=True, basic=False, wp=False,
|
||||
wpfc=False, wpsc=False, wprocket=False, wpce=False,
|
||||
multisite=False, wpsubdir=False, webroot=wo_site_webroot)
|
||||
|
||||
if stype == 'php':
|
||||
data['static'] = False
|
||||
data['basic'] = True
|
||||
|
||||
elif stype in ['mysql', 'wp', 'wpsubdir', 'wpsubdomain']:
|
||||
|
||||
data = dict(
|
||||
site_name=wo_domain, www_domain=wo_www_domain,
|
||||
static=False, basic=True, wp=False, wpfc=False,
|
||||
wpsc=False, wpredis=False, wprocket=False, wpce=False,
|
||||
multisite=False, wpsubdir=False, webroot=wo_site_webroot,
|
||||
wo_db_name='', wo_db_user='', wo_db_pass='',
|
||||
wo_db_host='')
|
||||
|
||||
if stype in ['wp', 'wpsubdir', 'wpsubdomain']:
|
||||
data['wp'] = True
|
||||
data['basic'] = False
|
||||
data[cache] = True
|
||||
data['wp-user'] = pargs.user
|
||||
data['wp-email'] = pargs.email
|
||||
data['wp-pass'] = pargs.wppass
|
||||
if stype in ['wpsubdir', 'wpsubdomain']:
|
||||
data['multisite'] = True
|
||||
if stype == 'wpsubdir':
|
||||
data['wpsubdir'] = True
|
||||
else:
|
||||
pass
|
||||
|
||||
if data and pargs.php73:
|
||||
data['php73'] = True
|
||||
data['php74'] = False
|
||||
data['php72'] = False
|
||||
data['wo_php'] = 'php73'
|
||||
elif data and pargs.php74:
|
||||
data['php72'] = False
|
||||
data['php74'] = True
|
||||
data['php73'] = False
|
||||
data['wo_php'] = 'php74'
|
||||
else:
|
||||
data['php74'] = False
|
||||
data['php72'] = True
|
||||
data['php73'] = False
|
||||
data['wo_php'] = 'php72'
|
||||
|
||||
if ((not pargs.wpfc) and (not pargs.wpsc) and
|
||||
(not pargs.wprocket) and
|
||||
(not pargs.wpce) and
|
||||
(not pargs.wpredis)):
|
||||
data['basic'] = True
|
||||
|
||||
if (cache == 'wpredis'):
|
||||
cache = 'wpredis'
|
||||
data['wpredis'] = True
|
||||
data['basic'] = False
|
||||
pargs.wpredis = True
|
||||
|
||||
# Check rerequired packages are installed or not
|
||||
wo_auth = site_package_check(self, stype)
|
||||
|
||||
try:
|
||||
pre_run_checks(self)
|
||||
except SiteError as e:
|
||||
Log.debug(self, str(e))
|
||||
Log.error(self, "NGINX configuration check failed.")
|
||||
|
||||
try:
|
||||
try:
|
||||
# setup NGINX configuration, and webroot
|
||||
setupdomain(self, data)
|
||||
|
||||
# Fix Nginx Hashbucket size error
|
||||
hashbucket(self)
|
||||
except SiteError as e:
|
||||
# call cleanup actions on failure
|
||||
Log.info(self, Log.FAIL +
|
||||
"There was a serious error encountered...")
|
||||
Log.info(self, Log.FAIL + "Cleaning up afterwards...")
|
||||
doCleanupAction(self, domain=wo_domain,
|
||||
webroot=data['webroot'])
|
||||
Log.debug(self, str(e))
|
||||
Log.error(self, "Check the log for details: "
|
||||
"`tail /var/log/wo/wordops.log` "
|
||||
"and please try again")
|
||||
|
||||
if 'proxy' in data.keys() and data['proxy']:
|
||||
addNewSite(self, wo_domain, stype, cache, wo_site_webroot)
|
||||
# Service Nginx Reload
|
||||
if not WOService.reload_service(self, 'nginx'):
|
||||
Log.info(self, Log.FAIL +
|
||||
"There was a serious error encountered...")
|
||||
Log.info(self, Log.FAIL + "Cleaning up afterwards...")
|
||||
doCleanupAction(self, domain=wo_domain)
|
||||
deleteSiteInfo(self, wo_domain)
|
||||
Log.error(self, "service nginx reload failed. "
|
||||
"check issues with `nginx -t` command")
|
||||
Log.error(self, "Check the log for details: "
|
||||
"`tail /var/log/wo/wordops.log` "
|
||||
"and please try again")
|
||||
if wo_auth and len(wo_auth):
|
||||
for msg in wo_auth:
|
||||
Log.info(self, Log.ENDC + msg, log=False)
|
||||
Log.info(self, "Successfully created site"
|
||||
" http://{0}".format(wo_domain))
|
||||
return
|
||||
|
||||
if data['php73']:
|
||||
php_version = "7.3"
|
||||
elif data['php74']:
|
||||
php_version = "7.4"
|
||||
else:
|
||||
php_version = "7.2"
|
||||
|
||||
addNewSite(self, wo_domain, stype, cache, wo_site_webroot,
|
||||
php_version=php_version)
|
||||
|
||||
# Setup database for MySQL site
|
||||
if 'wo_db_name' in data.keys() and not data['wp']:
|
||||
try:
|
||||
data = setupdatabase(self, data)
|
||||
# Add database information for site into database
|
||||
updateSiteInfo(self, wo_domain, db_name=data['wo_db_name'],
|
||||
db_user=data['wo_db_user'],
|
||||
db_password=data['wo_db_pass'],
|
||||
db_host=data['wo_db_host'])
|
||||
except SiteError as e:
|
||||
# call cleanup actions on failure
|
||||
Log.debug(self, str(e))
|
||||
Log.info(self, Log.FAIL +
|
||||
"There was a serious error encountered...")
|
||||
Log.info(self, Log.FAIL + "Cleaning up afterwards...")
|
||||
doCleanupAction(self, domain=wo_domain,
|
||||
webroot=data['webroot'],
|
||||
dbname=data['wo_db_name'],
|
||||
dbuser=data['wo_db_user'],
|
||||
dbhost=data['wo_db_host'])
|
||||
deleteSiteInfo(self, wo_domain)
|
||||
Log.error(self, "Check the log for details: "
|
||||
"`tail /var/log/wo/wordops.log` "
|
||||
"and please try again")
|
||||
|
||||
try:
|
||||
wodbconfig = open("{0}/wo-config.php"
|
||||
.format(wo_site_webroot),
|
||||
encoding='utf-8', mode='w')
|
||||
wodbconfig.write("<?php \ndefine('DB_NAME', '{0}');"
|
||||
"\ndefine('DB_USER', '{1}'); "
|
||||
"\ndefine('DB_PASSWORD', '{2}');"
|
||||
"\ndefine('DB_HOST', '{3}');\n?>"
|
||||
.format(data['wo_db_name'],
|
||||
data['wo_db_user'],
|
||||
data['wo_db_pass'],
|
||||
data['wo_db_host']))
|
||||
wodbconfig.close()
|
||||
stype = 'mysql'
|
||||
except IOError as e:
|
||||
Log.debug(self, str(e))
|
||||
Log.debug(self, "Error occured while generating "
|
||||
"wo-config.php")
|
||||
Log.info(self, Log.FAIL +
|
||||
"There was a serious error encountered...")
|
||||
Log.info(self, Log.FAIL + "Cleaning up afterwards...")
|
||||
doCleanupAction(self, domain=wo_domain,
|
||||
webroot=data['webroot'],
|
||||
dbname=data['wo_db_name'],
|
||||
dbuser=data['wo_db_user'],
|
||||
dbhost=data['wo_db_host'])
|
||||
deleteSiteInfo(self, wo_domain)
|
||||
Log.error(self, "Check the log for details: "
|
||||
"`tail /var/log/wo/wordops.log` "
|
||||
"and please try again")
|
||||
|
||||
# Setup WordPress if Wordpress site
|
||||
if data['wp']:
|
||||
vhostonly = bool(pargs.vhostonly)
|
||||
try:
|
||||
wo_wp_creds = setupwordpress(self, data, vhostonly)
|
||||
# Add database information for site into database
|
||||
updateSiteInfo(self, wo_domain,
|
||||
db_name=data['wo_db_name'],
|
||||
db_user=data['wo_db_user'],
|
||||
db_password=data['wo_db_pass'],
|
||||
db_host=data['wo_db_host'])
|
||||
except SiteError as e:
|
||||
# call cleanup actions on failure
|
||||
Log.debug(self, str(e))
|
||||
Log.info(self, Log.FAIL +
|
||||
"There was a serious error encountered...")
|
||||
Log.info(self, Log.FAIL + "Cleaning up afterwards...")
|
||||
doCleanupAction(self, domain=wo_domain,
|
||||
webroot=data['webroot'],
|
||||
dbname=data['wo_db_name'],
|
||||
dbuser=data['wo_db_user'],
|
||||
dbhost=data['wo_mysql_grant_host'])
|
||||
deleteSiteInfo(self, wo_domain)
|
||||
Log.error(self, "Check the log for details: "
|
||||
"`tail /var/log/wo/wordops.log` "
|
||||
"and please try again")
|
||||
|
||||
# Service Nginx Reload call cleanup if failed to reload nginx
|
||||
if not WOService.reload_service(self, 'nginx'):
|
||||
Log.info(self, Log.FAIL +
|
||||
"There was a serious error encountered...")
|
||||
Log.info(self, Log.FAIL + "Cleaning up afterwards...")
|
||||
doCleanupAction(self, domain=wo_domain,
|
||||
webroot=data['webroot'])
|
||||
if 'wo_db_name' in data.keys():
|
||||
doCleanupAction(self, domain=wo_domain,
|
||||
dbname=data['wo_db_name'],
|
||||
dbuser=data['wo_db_user'],
|
||||
dbhost=data['wo_mysql_grant_host'])
|
||||
deleteSiteInfo(self, wo_domain)
|
||||
Log.info(self, Log.FAIL + "service nginx reload failed."
|
||||
" check issues with `nginx -t` command.")
|
||||
Log.error(self, "Check the log for details: "
|
||||
"`tail /var/log/wo/wordops.log` "
|
||||
"and please try again")
|
||||
|
||||
WOGit.add(self, ["/etc/nginx"],
|
||||
msg="{0} created with {1} {2}"
|
||||
.format(wo_www_domain, stype, cache))
|
||||
# Setup Permissions for webroot
|
||||
try:
|
||||
setwebrootpermissions(self, data['webroot'])
|
||||
except SiteError as e:
|
||||
Log.debug(self, str(e))
|
||||
Log.info(self, Log.FAIL +
|
||||
"There was a serious error encountered...")
|
||||
Log.info(self, Log.FAIL + "Cleaning up afterwards...")
|
||||
doCleanupAction(self, domain=wo_domain,
|
||||
webroot=data['webroot'])
|
||||
if 'wo_db_name' in data.keys():
|
||||
print("Inside db cleanup")
|
||||
doCleanupAction(self, domain=wo_domain,
|
||||
dbname=data['wo_db_name'],
|
||||
dbuser=data['wo_db_user'],
|
||||
dbhost=data['wo_mysql_grant_host'])
|
||||
deleteSiteInfo(self, wo_domain)
|
||||
Log.error(self, "Check the log for details: "
|
||||
"`tail /var/log/wo/wordops.log` and "
|
||||
"please try again")
|
||||
|
||||
if wo_auth and len(wo_auth):
|
||||
for msg in wo_auth:
|
||||
Log.info(self, Log.ENDC + msg, log=False)
|
||||
|
||||
if data['wp'] and (not pargs.vhostonly):
|
||||
Log.info(self, Log.ENDC + "WordPress admin user :"
|
||||
" {0}".format(wo_wp_creds['wp_user']), log=False)
|
||||
Log.info(self, Log.ENDC + "WordPress admin password : {0}"
|
||||
.format(wo_wp_creds['wp_pass']), log=False)
|
||||
|
||||
display_cache_settings(self, data)
|
||||
|
||||
Log.info(self, "Successfully created site"
|
||||
" http://{0}".format(wo_domain))
|
||||
except SiteError:
|
||||
Log.error(self, "Check the log for details: "
|
||||
"`tail /var/log/wo/wordops.log` and please try again")
|
||||
|
||||
if pargs.letsencrypt:
|
||||
acme_domains = []
|
||||
data['letsencrypt'] = True
|
||||
letsencrypt = True
|
||||
Log.debug(self, "Going to issue Let's Encrypt certificate")
|
||||
acmedata = dict(
|
||||
acme_domains, dns=False, acme_dns='dns_cf',
|
||||
dnsalias=False, acme_alias='', keylength='')
|
||||
if self.app.config.has_section('letsencrypt'):
|
||||
acmedata['keylength'] = self.app.config.get(
|
||||
'letsencrypt', 'keylength')
|
||||
else:
|
||||
acmedata['keylength'] = 'ec-384'
|
||||
if pargs.dns:
|
||||
Log.debug(self, "DNS validation enabled")
|
||||
acmedata['dns'] = True
|
||||
if not pargs.dns == 'dns_cf':
|
||||
Log.debug(self, "DNS API : {0}".format(pargs.dns))
|
||||
acmedata['acme_dns'] = pargs.dns
|
||||
if pargs.dnsalias:
|
||||
Log.debug(self, "DNS Alias enabled")
|
||||
acmedata['dnsalias'] = True
|
||||
acmedata['acme_alias'] = pargs.dnsalias
|
||||
|
||||
# detect subdomain and set subdomain variable
|
||||
if pargs.letsencrypt == "subdomain":
|
||||
Log.warn(
|
||||
self, 'Flag --letsencrypt=subdomain is '
|
||||
'deprecated and not required anymore.')
|
||||
acme_subdomain = True
|
||||
acme_wildcard = False
|
||||
elif pargs.letsencrypt == "wildcard":
|
||||
acme_wildcard = True
|
||||
acme_subdomain = False
|
||||
acmedata['dns'] = True
|
||||
else:
|
||||
if ((wo_domain_type == 'subdomain')):
|
||||
Log.debug(self, "Domain type = {0}"
|
||||
.format(wo_domain_type))
|
||||
acme_subdomain = True
|
||||
else:
|
||||
acme_subdomain = False
|
||||
acme_wildcard = False
|
||||
|
||||
if acme_subdomain is True:
|
||||
Log.info(self, "Certificate type : subdomain")
|
||||
acme_domains = acme_domains + ['{0}'.format(wo_domain)]
|
||||
elif acme_wildcard is True:
|
||||
Log.info(self, "Certificate type : wildcard")
|
||||
acme_domains = acme_domains + ['{0}'.format(wo_domain),
|
||||
'*.{0}'.format(wo_domain)]
|
||||
else:
|
||||
Log.info(self, "Certificate type : domain")
|
||||
acme_domains = acme_domains + ['{0}'.format(wo_domain),
|
||||
'www.{0}'.format(wo_domain)]
|
||||
|
||||
if WOAcme.cert_check(self, wo_domain):
|
||||
SSL.archivedcertificatehandle(self, wo_domain, acme_domains)
|
||||
else:
|
||||
if acme_subdomain is True:
|
||||
# check if a wildcard cert for the root domain exist
|
||||
Log.debug(self, "checkWildcardExist on *.{0}"
|
||||
.format(wo_root_domain))
|
||||
if SSL.checkwildcardexist(self, wo_root_domain):
|
||||
Log.info(self, "Using existing Wildcard SSL "
|
||||
"certificate from {0} to secure {1}"
|
||||
.format(wo_root_domain, wo_domain))
|
||||
Log.debug(self, "symlink wildcard "
|
||||
"cert between {0} & {1}"
|
||||
.format(wo_domain, wo_root_domain))
|
||||
# copy the cert from the root domain
|
||||
copyWildcardCert(self, wo_domain, wo_root_domain)
|
||||
else:
|
||||
# check DNS records before issuing cert
|
||||
if not acmedata['dns'] is True:
|
||||
if not pargs.force:
|
||||
if not WOAcme.check_dns(self, acme_domains):
|
||||
Log.error(self,
|
||||
"Aborting SSL "
|
||||
"certificate issuance")
|
||||
Log.debug(self, "Setup Cert with acme.sh for {0}"
|
||||
.format(wo_domain))
|
||||
if WOAcme.setupletsencrypt(
|
||||
self, acme_domains, acmedata):
|
||||
WOAcme.deploycert(self, wo_domain)
|
||||
else:
|
||||
if not acmedata['dns'] is True:
|
||||
if not pargs.force:
|
||||
if not WOAcme.check_dns(self, acme_domains):
|
||||
Log.error(self,
|
||||
"Aborting SSL certificate issuance")
|
||||
if WOAcme.setupletsencrypt(
|
||||
self, acme_domains, acmedata):
|
||||
WOAcme.deploycert(self, wo_domain)
|
||||
|
||||
if pargs.hsts:
|
||||
SSL.setuphsts(self, wo_domain)
|
||||
|
||||
SSL.httpsredirect(self, wo_domain, acme_domains, True)
|
||||
SSL.siteurlhttps(self, wo_domain)
|
||||
if not WOService.reload_service(self, 'nginx'):
|
||||
Log.error(self, "service nginx reload failed. "
|
||||
"check issues with `nginx -t` command")
|
||||
Log.info(self, "Congratulations! Successfully Configured "
|
||||
"SSL on https://{0}".format(wo_domain))
|
||||
|
||||
# Add nginx conf folder into GIT
|
||||
WOGit.add(self, ["{0}/conf/nginx".format(wo_site_webroot)],
|
||||
msg="Adding letsencrypts config of site: {0}"
|
||||
.format(wo_domain))
|
||||
updateSiteInfo(self, wo_domain, ssl=letsencrypt)
|
||||
@@ -38,7 +38,7 @@ class SiteError(Exception):
|
||||
def pre_run_checks(self):
|
||||
|
||||
# Check nginx configuration
|
||||
Log.wait(self, "Running pre-update checks")
|
||||
Log.wait(self, "Running pre-run checks")
|
||||
try:
|
||||
Log.debug(self, "checking NGINX configuration ...")
|
||||
fnull = open('/dev/null', 'w')
|
||||
@@ -78,12 +78,8 @@ def setupdomain(self, data):
|
||||
wo_site_nginx_conf = open('/etc/nginx/sites-available/{0}'
|
||||
.format(wo_domain_name), encoding='utf-8',
|
||||
mode='w')
|
||||
if not data['php73']:
|
||||
self.app.render((data), 'virtualconf.mustache',
|
||||
out=wo_site_nginx_conf)
|
||||
else:
|
||||
self.app.render((data), 'virtualconf-php7.mustache',
|
||||
out=wo_site_nginx_conf)
|
||||
self.app.render((data), 'virtualconf.mustache',
|
||||
out=wo_site_nginx_conf)
|
||||
wo_site_nginx_conf.close()
|
||||
except IOError as e:
|
||||
Log.debug(self, str(e))
|
||||
@@ -148,7 +144,9 @@ def setupdatabase(self, data):
|
||||
wo_random_pass = (''.join(random.sample(string.ascii_uppercase +
|
||||
string.ascii_lowercase +
|
||||
string.digits, 24)))
|
||||
wo_replace_dot = wo_domain_name.replace('.', '')
|
||||
wo_replace_dash = wo_domain_name.replace('-', '_')
|
||||
wo_replace_dot = wo_replace_dash.replace('.', '_')
|
||||
wo_replace_underscore = wo_replace_dot.replace('_', '')
|
||||
if self.app.config.has_section('mysql'):
|
||||
prompt_dbname = self.app.config.get('mysql', 'db-name')
|
||||
prompt_dbuser = self.app.config.get('mysql', 'db-user')
|
||||
@@ -170,8 +168,7 @@ def setupdatabase(self, data):
|
||||
raise SiteError("Unable to input database name")
|
||||
|
||||
if not wo_db_name:
|
||||
wo_db_name = wo_replace_dot
|
||||
wo_db_name = (wo_db_name[0:16] + generate_random())
|
||||
wo_db_name = (wo_replace_dot[0:32] + '_' + generate_8_random())
|
||||
|
||||
if prompt_dbuser == 'True' or prompt_dbuser == 'true':
|
||||
try:
|
||||
@@ -184,8 +181,7 @@ def setupdatabase(self, data):
|
||||
raise SiteError("Unable to input database credentials")
|
||||
|
||||
if not wo_db_username:
|
||||
wo_db_username = wo_replace_dot
|
||||
wo_db_username = (wo_db_name[0:12] + generate_random())
|
||||
wo_db_username = (wo_replace_underscore[0:12] + generate_random())
|
||||
if not wo_db_password:
|
||||
wo_db_password = wo_random_pass
|
||||
|
||||
@@ -195,7 +191,7 @@ def setupdatabase(self, data):
|
||||
try:
|
||||
if WOMysql.check_db_exists(self, wo_db_name):
|
||||
Log.debug(self, "Database already exists, Updating DB_NAME .. ")
|
||||
wo_db_name = (wo_db_name[0:16] + generate_random())
|
||||
wo_db_name = (wo_db_name[0:32] + '_' + generate_8_random())
|
||||
wo_db_username = (wo_db_name[0:12] + generate_random())
|
||||
except MySQLConnectionError:
|
||||
raise SiteError("MySQL Connectivity problem occured")
|
||||
@@ -388,7 +384,7 @@ def setupwordpress(self, data, vhostonly=False):
|
||||
['MEDIA_TRASH', 'true'],
|
||||
['EMPTY_TRASH_DAYS', '15'],
|
||||
['WP_AUTO_UPDATE_CORE', 'minor']]
|
||||
|
||||
Log.wait(self, "Configuring WordPress")
|
||||
for wp_conf in wp_conf_variables:
|
||||
wp_var = wp_conf[0]
|
||||
wp_val = wp_conf[1]
|
||||
@@ -403,8 +399,10 @@ def setupwordpress(self, data, vhostonly=False):
|
||||
wp_raw='--raw'
|
||||
if var_raw is True else ''))
|
||||
except CommandExecutionError as e:
|
||||
Log.failed(self, "Configuring WordPress")
|
||||
Log.debug(self, str(e))
|
||||
Log.error(self, 'Unable to define wp-config.php variables')
|
||||
Log.valide(self, "Configuring WordPress")
|
||||
|
||||
# WOFileUtils.mvfile(self, os.getcwd()+'/wp-config.php',
|
||||
# os.path.abspath(os.path.join(os.getcwd(), os.pardir)))
|
||||
@@ -455,7 +453,7 @@ def setupwordpress(self, data, vhostonly=False):
|
||||
raise SiteError("input WordPress user email failed")
|
||||
|
||||
Log.debug(self, "Setting up WordPress tables")
|
||||
|
||||
Log.wait(self, "Installing WordPress")
|
||||
if not data['multisite']:
|
||||
Log.debug(self, "Creating tables for WordPress Single site")
|
||||
Log.debug(
|
||||
@@ -478,6 +476,7 @@ def setupwordpress(self, data, vhostonly=False):
|
||||
log=False):
|
||||
pass
|
||||
else:
|
||||
Log.failed(self, "Installing WordPress")
|
||||
raise SiteError(
|
||||
"setup WordPress tables failed for single site")
|
||||
except CommandExecutionError:
|
||||
@@ -511,11 +510,12 @@ def setupwordpress(self, data, vhostonly=False):
|
||||
log=False):
|
||||
pass
|
||||
else:
|
||||
Log.failed(self, "Installing WordPress")
|
||||
raise SiteError(
|
||||
"setup WordPress tables failed for wp multi site")
|
||||
except CommandExecutionError:
|
||||
raise SiteError("setup WordPress tables failed for wp multi site")
|
||||
|
||||
Log.valide(self, "Installing WordPress")
|
||||
Log.debug(self, "Updating WordPress permalink")
|
||||
try:
|
||||
WOShellExec.cmd_exec(self, " {0} --allow-root "
|
||||
@@ -774,8 +774,9 @@ def sitebackup(self, data):
|
||||
WOFileUtils.copyfile(self, '/etc/nginx/sites-available/{0}'
|
||||
.format(data['site_name']), backup_path)
|
||||
|
||||
if data['currsitetype'] in ['html', 'php', 'proxy', 'mysql']:
|
||||
if data['php73'] is True and not data['wp']:
|
||||
if data['currsitetype'] in ['html', 'php', 'php72', 'php74',
|
||||
'php73', 'proxy', 'mysql']:
|
||||
if not data['wp']:
|
||||
Log.info(self, "Backing up Webroot \t\t", end='')
|
||||
WOFileUtils.copyfiles(self, wo_site_webroot +
|
||||
'/htdocs', backup_path + '/htdocs')
|
||||
@@ -832,8 +833,9 @@ def site_package_check(self, stype):
|
||||
packages = []
|
||||
stack = WOStackController()
|
||||
stack.app = self.app
|
||||
if stype in ['html', 'proxy', 'php', 'mysql', 'wp', 'wpsubdir',
|
||||
'wpsubdomain', 'php73']:
|
||||
pargs = self.app.pargs
|
||||
if stype in ['html', 'proxy', 'php', 'php72', 'mysql', 'wp', 'wpsubdir',
|
||||
'wpsubdomain', 'php73', 'php74']:
|
||||
Log.debug(self, "Setting apt_packages variable for Nginx")
|
||||
|
||||
# Check if server has nginx-custom package
|
||||
@@ -846,7 +848,7 @@ def site_package_check(self, stype):
|
||||
Log.info(self, "NGINX PLUS Detected ...")
|
||||
apt = ["nginx-plus"] + WOVar.wo_nginx
|
||||
# apt_packages = apt_packages + WOVar.wo_nginx
|
||||
stack.post_pref(self, apt, packages)
|
||||
post_pref(self, apt, packages)
|
||||
elif WOAptGet.is_installed(self, 'nginx'):
|
||||
Log.info(self, "WordOps detected a previously"
|
||||
"installed Nginx package. "
|
||||
@@ -869,69 +871,68 @@ def site_package_check(self, stype):
|
||||
wo_nginx.write('fastcgi_param \tSCRIPT_FILENAME '
|
||||
'\t$request_filename;\n')
|
||||
|
||||
if self.app.pargs.php and self.app.pargs.php73:
|
||||
if pargs.php and pargs.php73:
|
||||
Log.error(
|
||||
self, "Error: two different PHP versions cannot be "
|
||||
"combined within the same WordOps site")
|
||||
|
||||
if not self.app.pargs.php73 and stype in ['php', 'mysql', 'wp', 'wpsubdir',
|
||||
'wpsubdomain']:
|
||||
Log.debug(self, "Setting apt_packages variable for PHP 7.2")
|
||||
if not WOAptGet.is_installed(self, 'php7.2-fpm'):
|
||||
if not WOAptGet.is_installed(self, 'php7.3-fpm'):
|
||||
apt_packages = apt_packages + WOVar.wo_php + \
|
||||
WOVar.wo_php_extra
|
||||
else:
|
||||
apt_packages = apt_packages + WOVar.wo_php
|
||||
if pargs.php and pargs.php74:
|
||||
Log.error(
|
||||
self, "Error: two different PHP versions cannot be "
|
||||
"combined within the same WordOps site")
|
||||
|
||||
if self.app.pargs.php73 and stype in ['mysql', 'wp',
|
||||
if pargs.php73 and pargs.php74:
|
||||
Log.error(
|
||||
self, "Error: two different PHP versions cannot be "
|
||||
"combined within the same WordOps site")
|
||||
|
||||
if ((not pargs.php73) and (not pargs.php74) and
|
||||
stype in ['php', 'php72', 'mysql', 'wp', 'wpsubdir',
|
||||
'wpsubdomain']):
|
||||
Log.debug(self, "Setting apt_packages variable for PHP 7.2")
|
||||
if not (WOAptGet.is_installed(self, 'php7.2-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php72
|
||||
if not (WOAptGet.is_installed(self, 'php7.3-fpm') or
|
||||
WOAptGet.is_installed(self, 'php7.4-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php_extra
|
||||
|
||||
if pargs.php73 and stype in ['php73', 'mysql', 'wp',
|
||||
'wpsubdir', 'wpsubdomain']:
|
||||
Log.debug(self, "Setting apt_packages variable for PHP 7.3")
|
||||
if not WOAptGet.is_installed(self, 'php7.3-fpm'):
|
||||
if not WOAptGet.is_installed(self, 'php7.2-fpm'):
|
||||
apt_packages = apt_packages + WOVar.wo_php + \
|
||||
WOVar.wo_php73 + WOVar.wo_php_extra
|
||||
else:
|
||||
apt_packages = apt_packages + WOVar.wo_php73
|
||||
apt_packages = apt_packages + WOVar.wo_php73
|
||||
if not (WOAptGet.is_installed(self, 'php7.2-fpm') or
|
||||
WOAptGet.is_installed(self, 'php7.4-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php_extra
|
||||
|
||||
if pargs.php74 and stype in ['php74', 'mysql', 'wp',
|
||||
'wpsubdir', 'wpsubdomain']:
|
||||
Log.debug(self, "Setting apt_packages variable for PHP 7.4")
|
||||
if not WOAptGet.is_installed(self, 'php7.4-fpm'):
|
||||
apt_packages = apt_packages + WOVar.wo_php74
|
||||
if not (WOAptGet.is_installed(self, 'php7.3-fpm') or
|
||||
WOAptGet.is_installed(self, 'php7.2-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php_extra
|
||||
|
||||
if stype in ['mysql', 'wp', 'wpsubdir', 'wpsubdomain']:
|
||||
Log.debug(self, "Setting apt_packages variable for MySQL")
|
||||
if not WOShellExec.cmd_exec(self, "/usr/bin/mysqladmin ping"):
|
||||
if not WOVar.wo_distro == 'raspbian':
|
||||
if (not WOVar.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
|
||||
apt_packages = apt_packages + WOVar.wo_mysql
|
||||
|
||||
if stype in ['wp', 'wpsubdir', 'wpsubdomain']:
|
||||
Log.debug(self, "Setting packages variable for WP-CLI")
|
||||
if not WOShellExec.cmd_exec(self, "command -v wp"):
|
||||
if not WOAptGet.is_exec(self, "wp"):
|
||||
packages = packages + [["https://github.com/wp-cli/wp-cli/"
|
||||
"releases/download/v{0}/"
|
||||
"wp-cli-{0}.phar"
|
||||
.format(WOVar.wo_wp_cli),
|
||||
"/usr/local/bin/wp", "WP-CLI"]]
|
||||
if self.app.pargs.wpredis:
|
||||
if pargs.wpredis:
|
||||
Log.debug(self, "Setting apt_packages variable for redis")
|
||||
if not WOAptGet.is_installed(self, 'redis-server'):
|
||||
apt_packages = apt_packages + ["redis-server"]
|
||||
apt_packages = apt_packages + WOVar.wo_redis
|
||||
|
||||
if self.app.pargs.php73:
|
||||
Log.debug(self, "Setting apt_packages variable for PHP 7.3")
|
||||
if not WOAptGet.is_installed(self, 'php7.3-fpm'):
|
||||
if not WOAptGet.is_installed(self, 'php7.2-fpm'):
|
||||
apt_packages = apt_packages + WOVar.wo_php + \
|
||||
WOVar.wo_php73 + WOVar.wo_php_extra
|
||||
else:
|
||||
apt_packages = apt_packages + WOVar.wo_php73
|
||||
|
||||
if self.app.pargs.ngxblocker:
|
||||
if pargs.ngxblocker:
|
||||
if not os.path.isdir('/etc/nginx/bots.d'):
|
||||
Log.debug(self, "Setting packages variable for ngxblocker")
|
||||
packages = packages + \
|
||||
@@ -1093,7 +1094,8 @@ def detSitePar(opts):
|
||||
cachelist = list()
|
||||
for key, val in opts.items():
|
||||
if val and key in ['html', 'php', 'mysql', 'wp',
|
||||
'wpsubdir', 'wpsubdomain', 'php73']:
|
||||
'wpsubdir', 'wpsubdomain', 'php72',
|
||||
'php73', 'php74']:
|
||||
typelist.append(key)
|
||||
elif val and key in ['wpfc', 'wpsc', 'wpredis', 'wprocket', 'wpce']:
|
||||
cachelist.append(key)
|
||||
@@ -1109,24 +1111,48 @@ def detSitePar(opts):
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('php72', 'mysql', 'html') for x in typelist]:
|
||||
sitetype = 'mysql'
|
||||
if not cachelist:
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('php73', 'mysql', 'html') for x in typelist]:
|
||||
sitetype = 'mysql'
|
||||
if not cachelist:
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('php74', 'mysql', 'html') for x in typelist]:
|
||||
sitetype = 'mysql'
|
||||
if not cachelist:
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('php', 'mysql') for x in typelist]:
|
||||
sitetype = 'mysql'
|
||||
if not cachelist:
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('php72', 'mysql') for x in typelist]:
|
||||
sitetype = 'mysql'
|
||||
if not cachelist:
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('php73', 'mysql') for x in typelist]:
|
||||
sitetype = 'mysql'
|
||||
if not cachelist:
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('php74', 'mysql') for x in typelist]:
|
||||
sitetype = 'mysql'
|
||||
if not cachelist:
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('html', 'mysql') for x in typelist]:
|
||||
sitetype = 'mysql'
|
||||
if not cachelist:
|
||||
@@ -1139,12 +1165,6 @@ def detSitePar(opts):
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('php73', 'html') for x in typelist]:
|
||||
sitetype = 'php73'
|
||||
if not cachelist:
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('wp', 'wpsubdir') for x in typelist]:
|
||||
sitetype = 'wpsubdir'
|
||||
if not cachelist:
|
||||
@@ -1157,33 +1177,75 @@ def detSitePar(opts):
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('wp', 'php72') for x in typelist]:
|
||||
sitetype = 'wp'
|
||||
if not cachelist:
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('wp', 'php73') for x in typelist]:
|
||||
sitetype = 'wp'
|
||||
if not cachelist:
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('wp', 'php74') for x in typelist]:
|
||||
sitetype = 'wp'
|
||||
if not cachelist:
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('wpsubdir', 'php72') for x in typelist]:
|
||||
sitetype = 'wpsubdir'
|
||||
if not cachelist:
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('wpsubdir', 'php73') for x in typelist]:
|
||||
sitetype = 'wpsubdir'
|
||||
if not cachelist:
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('wpsubdir', 'php74') for x in typelist]:
|
||||
sitetype = 'wpsubdir'
|
||||
if not cachelist:
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('wpsubdomain', 'php72') for x in typelist]:
|
||||
sitetype = 'wpsubdomain'
|
||||
if not cachelist:
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('wpsubdomain', 'php73') for x in typelist]:
|
||||
sitetype = 'wpsubdomain'
|
||||
if not cachelist:
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
elif False not in [x in ('wpsubdomain', 'php74') for x in typelist]:
|
||||
sitetype = 'wpsubdomain'
|
||||
if not cachelist:
|
||||
cachetype = 'basic'
|
||||
else:
|
||||
cachetype = cachelist[0]
|
||||
else:
|
||||
raise RuntimeError("could not determine site and cache type")
|
||||
else:
|
||||
if not typelist and not cachelist:
|
||||
sitetype = None
|
||||
cachetype = None
|
||||
elif (not typelist or "php72" in typelist) and cachelist:
|
||||
sitetype = 'wp'
|
||||
cachetype = cachelist[0]
|
||||
elif (not typelist or "php73" in typelist) and cachelist:
|
||||
sitetype = 'wp'
|
||||
cachetype = cachelist[0]
|
||||
elif (not typelist or "php74" in typelist) and cachelist:
|
||||
sitetype = 'wp'
|
||||
cachetype = cachelist[0]
|
||||
elif typelist and (not cachelist):
|
||||
sitetype = typelist[0]
|
||||
cachetype = 'basic'
|
||||
@@ -1208,6 +1270,13 @@ def generate_random():
|
||||
return wo_random10
|
||||
|
||||
|
||||
def generate_8_random():
|
||||
wo_random8 = (''.join(random.sample(string.ascii_uppercase +
|
||||
string.ascii_lowercase +
|
||||
string.digits, 8)))
|
||||
return wo_random8
|
||||
|
||||
|
||||
def deleteDB(self, dbname, dbuser, dbhost, exit=True):
|
||||
try:
|
||||
# Check if Database exists
|
||||
@@ -1382,170 +1451,6 @@ def renewLetsEncrypt(self, wo_domain_name):
|
||||
# redirect= False to disable https redirection
|
||||
|
||||
|
||||
def httpsRedirect(self, wo_domain_name, redirect=True, wildcard=False):
|
||||
if redirect:
|
||||
if os.path.isfile("/etc/nginx/conf.d/force-ssl-{0}.conf.disabled"
|
||||
.format(wo_domain_name)):
|
||||
WOFileUtils.mvfile(self,
|
||||
"/etc/nginx/conf.d/force-ssl-{0}.conf.disabled"
|
||||
.format(wo_domain_name),
|
||||
"/etc/nginx/conf.d/force-ssl-{0}.conf"
|
||||
.format(wo_domain_name))
|
||||
else:
|
||||
Log.wait(self, "Adding HTTPS redirection")
|
||||
if wildcard:
|
||||
try:
|
||||
sslconf = open("/etc/nginx/conf.d/force-ssl-{0}.conf"
|
||||
.format(wo_domain_name),
|
||||
encoding='utf-8', mode='w')
|
||||
sslconf.write("server {\n"
|
||||
"\tlisten 80;\n" +
|
||||
"\tlisten [::]:80;\n" +
|
||||
"\tserver_name *.{0} {0};\n"
|
||||
.format(wo_domain_name) +
|
||||
"\treturn 301 https://$host"
|
||||
"$request_uri;\n}")
|
||||
sslconf.close()
|
||||
except IOError as e:
|
||||
Log.debug(self, str(e))
|
||||
Log.debug(self, "Error occured while generating "
|
||||
"/etc/nginx/conf.d/force-ssl-{0}.conf"
|
||||
.format(wo_domain_name))
|
||||
|
||||
else:
|
||||
try:
|
||||
sslconf = open("/etc/nginx/conf.d/force-ssl-{0}.conf"
|
||||
.format(wo_domain_name),
|
||||
encoding='utf-8', mode='w')
|
||||
sslconf.write("server {\n"
|
||||
"\tlisten 80;\n" +
|
||||
"\tlisten [::]:80;\n" +
|
||||
"\tserver_name www.{0} {0};\n"
|
||||
.format(wo_domain_name) +
|
||||
"\treturn 301 https://$host"
|
||||
"$request_uri;\n}")
|
||||
sslconf.close()
|
||||
|
||||
except IOError as e:
|
||||
Log.failed(self, "Adding HTTPS redirection")
|
||||
Log.debug(self, str(e))
|
||||
Log.debug(self, "Error occured while generating "
|
||||
"/etc/nginx/conf.d/force-ssl-{0}.conf"
|
||||
.format(wo_domain_name))
|
||||
else:
|
||||
Log.valide(self, "Adding HTTPS redirection")
|
||||
# Nginx Configation into GIT
|
||||
WOGit.add(self,
|
||||
["/etc/nginx"], msg="Adding /etc/nginx/conf.d/"
|
||||
"force-ssl-{0}.conf".format(wo_domain_name))
|
||||
else:
|
||||
if os.path.isfile("/etc/nginx/conf.d/force-ssl-{0}.conf"
|
||||
.format(wo_domain_name)):
|
||||
WOFileUtils.mvfile(self, "/etc/nginx/conf.d/force-ssl-{0}.conf"
|
||||
.format(wo_domain_name),
|
||||
"/etc/nginx/conf.d/force-ssl-{0}.conf.disabled"
|
||||
.format(wo_domain_name))
|
||||
Log.info(self, "Disabled HTTPS Force Redirection for Site "
|
||||
" http://{0}".format(wo_domain_name))
|
||||
|
||||
|
||||
def archivedCertificateHandle(self, domain):
|
||||
Log.warn(
|
||||
self, "You already have an existing certificate "
|
||||
"for the domain requested.\n"
|
||||
"(ref: {0}/"
|
||||
"{1}_ecc/{1}.conf)".format(WOVar.wo_ssl_archive, domain) +
|
||||
"\nPlease select an option from below?"
|
||||
"\n\t1: Reinstall existing certificate"
|
||||
"\n\t2: Issue a new certificate to replace "
|
||||
"the current one (limit ~5 per 7 days)"
|
||||
"")
|
||||
check_prompt = input(
|
||||
"\nType the appropriate number [1-2] or any other key to cancel: ")
|
||||
if not os.path.isfile("{0}/{1}/fullchain.pem"
|
||||
.format(WOVar.wo_ssl_live, domain)):
|
||||
Log.error(
|
||||
self, "{0}/{1}/fullchain.pem file is missing."
|
||||
.format(WOVar.wo_ssl_live, domain))
|
||||
|
||||
if check_prompt == "1":
|
||||
Log.info(self, "Reinstalling SSL cert with acme.sh")
|
||||
ssl = WOAcme.deploycert(self, domain)
|
||||
if ssl:
|
||||
|
||||
try:
|
||||
|
||||
if not os.path.isfile("/var/www/{0}/conf/nginx/ssl.conf"
|
||||
.format(domain)):
|
||||
Log.info(
|
||||
self, "Adding /var/www/{0}/conf/nginx/ssl.conf"
|
||||
.format(domain))
|
||||
|
||||
sslconf = open("/var/www/{0}/conf/nginx/ssl.conf"
|
||||
.format(domain),
|
||||
encoding='utf-8', mode='w')
|
||||
sslconf.write("listen 443 ssl http2;\n"
|
||||
"listen [::]:443 ssl http2;\n"
|
||||
"ssl_certificate "
|
||||
"{0}/{1}/fullchain.pem;\n"
|
||||
"ssl_certificate_key {0}/{1}/key.pem;\n"
|
||||
"ssl_trusted_certificate {0}/{1}/ca.pem;\n"
|
||||
"ssl_stapling_verify on;\n"
|
||||
.format(WOVar.wo_ssl_live, domain))
|
||||
sslconf.close()
|
||||
|
||||
except IOError as e:
|
||||
Log.debug(self, str(e))
|
||||
Log.debug(self, "Error occured while generating "
|
||||
"ssl.conf")
|
||||
|
||||
elif (check_prompt == "2"):
|
||||
Log.info(self, "Issuing SSL cert with acme.sh")
|
||||
ssl = WOShellExec.cmd_exec(self, "/etc/letsencrypt/acme.sh "
|
||||
"--config-home "
|
||||
"'/etc/letsencrypt/config' "
|
||||
"--renew -d {0} --ecc "
|
||||
"--force"
|
||||
.format(domain))
|
||||
|
||||
if ssl:
|
||||
|
||||
try:
|
||||
|
||||
WOShellExec.cmd_exec(self, "mkdir -p {0}/{1} && "
|
||||
"/etc/letsencrypt/acme.sh "
|
||||
"--config-home "
|
||||
"'/etc/letsencrypt/config' "
|
||||
"--install-cert -d {1} --ecc "
|
||||
"--cert-file {0}/{1}/cert.pem "
|
||||
"--key-file {0}/{1}/key.pem "
|
||||
"--fullchain-file "
|
||||
"{0}/{1}/fullchain.pem "
|
||||
"ssl_trusted_certificate "
|
||||
"{0}/{1}/ca.pem;\n"
|
||||
"--reloadcmd "
|
||||
"\"nginx -t && service nginx restart\" "
|
||||
.format(WOVar.wo_ssl_live, domain))
|
||||
|
||||
except IOError as e:
|
||||
Log.debug(self, str(e))
|
||||
Log.debug(self, "Error occured while installing "
|
||||
"the certificate")
|
||||
|
||||
else:
|
||||
Log.error(self, "Operation cancelled by user.")
|
||||
|
||||
if os.path.isfile("{0}/conf/nginx/ssl.conf"
|
||||
.format(domain)):
|
||||
Log.info(self, "Existing ssl.conf . Backing it up ..")
|
||||
WOFileUtils.mvfile(self, "/var/www/{0}/conf/nginx/ssl.conf"
|
||||
.format(domain),
|
||||
'/var/www/{0}/conf/nginx/ssl.conf.bak'
|
||||
.format(domain))
|
||||
|
||||
return ssl
|
||||
|
||||
|
||||
def setuprocketchat(self):
|
||||
if ((not WOVar.wo_platform_codename == 'bionic') and
|
||||
(not WOVar.wo_platform_codename == 'xenial')):
|
||||
@@ -1557,6 +1462,7 @@ def setuprocketchat(self):
|
||||
WOAptGet.install(self, ["snapd"])
|
||||
if WOShellExec.cmd_exec(self, "snap install rocketchat-server"):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def setupngxblocker(self, domain, block=True):
|
||||
|
||||
1098
wo/cli/plugins/site_update.py
Normal file
1098
wo/cli/plugins/site_update.py
Normal file
File diff suppressed because it is too large
Load Diff
@@ -41,8 +41,12 @@ class WOStackController(CementBaseController):
|
||||
dict(help='Install Nginx stack', action='store_true')),
|
||||
(['--php'],
|
||||
dict(help='Install PHP 7.2 stack', action='store_true')),
|
||||
(['--php72'],
|
||||
dict(help='Install PHP 7.2 stack', action='store_true')),
|
||||
(['--php73'],
|
||||
dict(help='Install PHP 7.3 stack', action='store_true')),
|
||||
(['--php74'],
|
||||
dict(help='Install PHP 7.4 stack', action='store_true')),
|
||||
(['--mysql'],
|
||||
dict(help='Install MySQL stack', action='store_true')),
|
||||
(['--mysqlclient'],
|
||||
@@ -105,40 +109,40 @@ class WOStackController(CementBaseController):
|
||||
def install(self, packages=[], apt_packages=[], disp_msg=True):
|
||||
"""Start installation of packages"""
|
||||
self.msg = []
|
||||
empty_packages = []
|
||||
wo_webroot = "/var/www/"
|
||||
pargs = self.app.pargs
|
||||
|
||||
try:
|
||||
# Default action for stack installation
|
||||
if ((not pargs.web) and (not pargs.admin) and
|
||||
(not pargs.nginx) and (not pargs.php) and
|
||||
(not pargs.mysql) and (not pargs.wpcli) and
|
||||
(not pargs.phpmyadmin) and (not pargs.composer) and
|
||||
(not pargs.netdata) and (not pargs.dashboard) and
|
||||
(not pargs.fail2ban) and (not pargs.security) and
|
||||
(not pargs.mysqlclient) and (not pargs.mysqltuner) and
|
||||
(not pargs.adminer) and (not pargs.utils) and
|
||||
(not pargs.redis) and (not pargs.proftpd) and
|
||||
(not pargs.extplorer) and (not pargs.clamav) and
|
||||
(not pargs.cheat) and (not pargs.nanorc) and
|
||||
(not pargs.ufw) and (not pargs.ngxblocker) and
|
||||
(not pargs.phpredisadmin) and (not pargs.sendmail) and
|
||||
(not pargs.php73) and (not pargs.all)):
|
||||
if not (pargs.web or pargs.admin or pargs.nginx or
|
||||
pargs.php or pargs.php72 or pargs.php73 or pargs.php74 or
|
||||
pargs.mysql or pargs.wpcli or pargs.phpmyadmin or
|
||||
pargs.composer or pargs.netdata or pargs.composer or
|
||||
pargs.dashboard or pargs.fail2ban or pargs.security or
|
||||
pargs.mysqlclient or pargs.mysqltuner or
|
||||
pargs.admin or pargs.adminer or
|
||||
pargs.utils or pargs.redis or
|
||||
pargs.proftpd or pargs.extplorer or
|
||||
pargs.clamav or pargs.cheat or pargs.nanorc or
|
||||
pargs.ufw or pargs.ngxblocker or
|
||||
pargs.phpredisadmin or pargs.sendmail or pargs.all):
|
||||
pargs.web = True
|
||||
pargs.admin = True
|
||||
pargs.fail2ban = True
|
||||
|
||||
if pargs.php:
|
||||
pargs.php72 = True
|
||||
|
||||
if pargs.all:
|
||||
pargs.web = True
|
||||
pargs.admin = True
|
||||
pargs.php73 = True
|
||||
pargs.php74 = True
|
||||
pargs.redis = True
|
||||
pargs.proftpd = True
|
||||
|
||||
if pargs.web:
|
||||
pargs.nginx = True
|
||||
pargs.php = True
|
||||
pargs.php72 = True
|
||||
pargs.mysql = True
|
||||
pargs.wpcli = True
|
||||
pargs.sendmail = True
|
||||
@@ -163,23 +167,8 @@ class WOStackController(CementBaseController):
|
||||
# Nginx
|
||||
if pargs.nginx:
|
||||
Log.debug(self, "Setting apt_packages variable for Nginx")
|
||||
if not (WOAptGet.is_installed(self, 'nginx-custom')):
|
||||
if not (WOAptGet.is_installed(self, 'nginx-plus') or
|
||||
WOAptGet.is_installed(self, 'nginx')):
|
||||
if not os.path.isfile('/usr/sbin/nginx'):
|
||||
apt_packages = apt_packages + WOVar.wo_nginx
|
||||
else:
|
||||
if WOAptGet.is_installed(self, 'nginx-plus'):
|
||||
Log.info(self, "NGINX PLUS Detected ...")
|
||||
apt = ["nginx-plus"] + WOVar.wo_nginx
|
||||
post_pref(self, apt, empty_packages)
|
||||
elif WOAptGet.is_installed(self, 'nginx'):
|
||||
Log.info(self, "WordOps detected an already "
|
||||
"installed nginx package."
|
||||
"It may or may not have "
|
||||
"required modules.\n")
|
||||
apt = ["nginx"] + WOVar.wo_nginx
|
||||
post_pref(self, apt, empty_packages)
|
||||
if not WOAptGet.is_exec(self, 'nginx'):
|
||||
apt_packages = apt_packages + WOVar.wo_nginx
|
||||
else:
|
||||
Log.debug(self, "Nginx already installed")
|
||||
|
||||
@@ -192,11 +181,13 @@ class WOStackController(CementBaseController):
|
||||
Log.info(self, "Redis already installed")
|
||||
|
||||
# PHP 7.2
|
||||
if pargs.php:
|
||||
if pargs.php72:
|
||||
Log.debug(self, "Setting apt_packages variable for PHP 7.2")
|
||||
if not (WOAptGet.is_installed(self, 'php7.2-fpm')):
|
||||
apt_packages = (apt_packages + WOVar.wo_php +
|
||||
WOVar.wo_php_extra)
|
||||
apt_packages = apt_packages + WOVar.wo_php72
|
||||
if not (WOAptGet.is_installed(self, 'php7.3-fpm') or
|
||||
WOAptGet.is_installed(self, 'php7.4-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php_extra
|
||||
else:
|
||||
Log.debug(self, "PHP 7.2 already installed")
|
||||
Log.info(self, "PHP 7.2 already installed")
|
||||
@@ -205,13 +196,26 @@ class WOStackController(CementBaseController):
|
||||
if pargs.php73:
|
||||
Log.debug(self, "Setting apt_packages variable for PHP 7.3")
|
||||
if not WOAptGet.is_installed(self, 'php7.3-fpm'):
|
||||
apt_packages = (apt_packages + WOVar.wo_php +
|
||||
WOVar.wo_php73 +
|
||||
WOVar.wo_php_extra)
|
||||
apt_packages = apt_packages + WOVar.wo_php73
|
||||
if not (WOAptGet.is_installed(self, 'php7.2-fpm') or
|
||||
WOAptGet.is_installed(self, 'php7.4-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php_extra
|
||||
else:
|
||||
Log.debug(self, "PHP 7.3 already installed")
|
||||
Log.info(self, "PHP 7.3 already installed")
|
||||
|
||||
# PHP 7.4
|
||||
if pargs.php74:
|
||||
Log.debug(self, "Setting apt_packages variable for PHP 7.4")
|
||||
if not WOAptGet.is_installed(self, 'php7.4-fpm'):
|
||||
apt_packages = apt_packages + WOVar.wo_php74
|
||||
if not (WOAptGet.is_installed(self, 'php7.3-fpm') or
|
||||
WOAptGet.is_installed(self, 'php7.2-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php_extra
|
||||
else:
|
||||
Log.debug(self, "PHP 7.4 already installed")
|
||||
Log.info(self, "PHP 7.4 already installed")
|
||||
|
||||
# MariaDB 10.3
|
||||
if pargs.mysql:
|
||||
pargs.mysqltuner = True
|
||||
@@ -235,8 +239,7 @@ class WOStackController(CementBaseController):
|
||||
# WP-CLI
|
||||
if pargs.wpcli:
|
||||
Log.debug(self, "Setting packages variable for WP-CLI")
|
||||
if ((not os.path.isfile("/usr/local/bin/wp")) and
|
||||
(not os.path.isfile("/usr/bin/wp"))):
|
||||
if not WOAptGet.is_exec(self, 'wp'):
|
||||
packages = packages + [["https://github.com/wp-cli/wp-cli/"
|
||||
"releases/download/v{0}/"
|
||||
"wp-cli-{0}.phar"
|
||||
@@ -328,9 +331,9 @@ class WOStackController(CementBaseController):
|
||||
|
||||
# Composer
|
||||
if pargs.composer:
|
||||
if not WOShellExec.cmd_exec(self, 'php -v'):
|
||||
if not WOAptGet.is_exec(self, 'php'):
|
||||
pargs.php = True
|
||||
if not os.path.isfile('/usr/local/bin/composer'):
|
||||
if not WOAptGet.is_exec(self, 'composer'):
|
||||
Log.debug(self, "Setting packages variable for Composer ")
|
||||
packages = packages + [["https://getcomposer.org/"
|
||||
"installer",
|
||||
@@ -344,7 +347,7 @@ class WOStackController(CementBaseController):
|
||||
if pargs.adminer:
|
||||
if not os.path.isfile("{0}22222/htdocs/db/"
|
||||
"adminer/index.php"
|
||||
.format(wo_webroot)):
|
||||
.format(WOVar.wo_webroot)):
|
||||
Log.debug(self, "Setting packages variable for Adminer ")
|
||||
packages = packages + [[
|
||||
"https://github.com/vrana/adminer/"
|
||||
@@ -434,6 +437,8 @@ class WOStackController(CementBaseController):
|
||||
|
||||
# ultimate ngx_blocker
|
||||
if pargs.ngxblocker:
|
||||
if not WOAptGet.is_exec(self, 'nginx'):
|
||||
pargs.nginx = True
|
||||
if not os.path.isdir('/etc/nginx/bots.d'):
|
||||
Log.debug(self, "Setting packages variable for ngxblocker")
|
||||
packages = packages + \
|
||||
@@ -468,6 +473,12 @@ class WOStackController(CementBaseController):
|
||||
|
||||
# UTILS
|
||||
if pargs.utils:
|
||||
if not WOShellExec.cmd_exec(self, 'mysqladmin ping'):
|
||||
pargs.mysql = True
|
||||
if not (WOAptGet.is_installed(self, 'php7.2-fpm') or
|
||||
WOAptGet.is_installed(self, 'php7.3-fpm') or
|
||||
WOAptGet.is_installed(self, 'php7.4-fpm')):
|
||||
pargs.php = True
|
||||
Log.debug(self, "Setting packages variable for utils")
|
||||
packages = packages + [[
|
||||
"https://raw.githubusercontent.com"
|
||||
@@ -524,9 +535,7 @@ class WOStackController(CementBaseController):
|
||||
Log.wait(self, "Installing APT packages ")
|
||||
WOAptGet.install(self, apt_packages)
|
||||
Log.valide(self, "Installing APT packages ")
|
||||
Log.wait(self, "Configuring APT packages ")
|
||||
post_pref(self, apt_packages, [])
|
||||
Log.valide(self, "Configuring APT packages ")
|
||||
if (packages):
|
||||
Log.debug(self, "Downloading following: {0}".format(packages))
|
||||
WODownload.download(self, packages)
|
||||
@@ -563,13 +572,18 @@ class WOStackController(CementBaseController):
|
||||
(not pargs.cheat) and (not pargs.nanorc) and
|
||||
(not pargs.ufw) and (not pargs.ngxblocker) and
|
||||
(not pargs.phpredisadmin) and (not pargs.sendmail) and
|
||||
(not pargs.php73) and (not pargs.all)):
|
||||
(not pargs.php73) and (not pargs.php74) and
|
||||
(not pargs.php72) and (not pargs.all)):
|
||||
self.app.args.print_help()
|
||||
|
||||
if pargs.php:
|
||||
pargs.php72 = True
|
||||
|
||||
if pargs.all:
|
||||
pargs.web = True
|
||||
pargs.admin = True
|
||||
pargs.php73 = True
|
||||
pargs.php74 = True
|
||||
pargs.fail2ban = True
|
||||
pargs.proftpd = True
|
||||
pargs.utils = True
|
||||
@@ -580,7 +594,7 @@ class WOStackController(CementBaseController):
|
||||
|
||||
if pargs.web:
|
||||
pargs.nginx = True
|
||||
pargs.php = True
|
||||
pargs.php72 = True
|
||||
pargs.mysql = True
|
||||
pargs.wpcli = True
|
||||
pargs.sendmail = True
|
||||
@@ -605,24 +619,40 @@ class WOStackController(CementBaseController):
|
||||
apt_packages = apt_packages + WOVar.wo_nginx
|
||||
|
||||
# PHP 7.2
|
||||
if pargs.php:
|
||||
Log.debug(self, "Removing apt_packages variable of PHP")
|
||||
if WOAptGet.is_installed(self, 'php7.2-fpm'):
|
||||
if not WOAptGet.is_installed(self, 'php7.3-fpm'):
|
||||
apt_packages = apt_packages + WOVar.wo_php + \
|
||||
WOVar.wo_php_extra
|
||||
else:
|
||||
apt_packages = apt_packages + WOVar.wo_php
|
||||
if pargs.php72:
|
||||
Log.debug(self, "Setting apt_packages variable for PHP 7.2")
|
||||
if (WOAptGet.is_installed(self, 'php7.2-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php72
|
||||
if not (WOAptGet.is_installed(self, 'php7.3-fpm') or
|
||||
WOAptGet.is_installed(self, 'php7.4-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php_extra
|
||||
else:
|
||||
Log.debug(self, "PHP 7.2 is not installed")
|
||||
Log.info(self, "PHP 7.2 is not installed")
|
||||
|
||||
# PHP7.3
|
||||
# PHP 7.3
|
||||
if pargs.php73:
|
||||
Log.debug(self, "Removing apt_packages variable of PHP 7.3")
|
||||
Log.debug(self, "Setting apt_packages variable for PHP 7.3")
|
||||
if WOAptGet.is_installed(self, 'php7.3-fpm'):
|
||||
if not (WOAptGet.is_installed(self, 'php7.2-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php73 + \
|
||||
WOVar.wo_php_extra
|
||||
else:
|
||||
apt_packages = apt_packages + WOVar.wo_php73
|
||||
apt_packages = apt_packages + WOVar.wo_php73
|
||||
if not (WOAptGet.is_installed(self, 'php7.2-fpm') or
|
||||
WOAptGet.is_installed(self, 'php7.4-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php_extra
|
||||
else:
|
||||
Log.debug(self, "PHP 7.3 is not installed")
|
||||
Log.info(self, "PHP 7.3 is not installed")
|
||||
|
||||
# PHP 7.4
|
||||
if pargs.php74:
|
||||
Log.debug(self, "Setting apt_packages variable for PHP 7.4")
|
||||
if WOAptGet.is_installed(self, 'php7.4-fpm'):
|
||||
apt_packages = apt_packages + WOVar.wo_php74
|
||||
if not (WOAptGet.is_installed(self, 'php7.3-fpm') or
|
||||
WOAptGet.is_installed(self, 'php7.2-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php_extra
|
||||
else:
|
||||
Log.debug(self, "PHP 7.4 is not installed")
|
||||
Log.info(self, "PHP 7.4 is not installed")
|
||||
|
||||
# REDIS
|
||||
if pargs.redis:
|
||||
@@ -634,9 +664,7 @@ class WOStackController(CementBaseController):
|
||||
if pargs.mysql:
|
||||
if WOAptGet.is_installed(self, 'mariadb-server'):
|
||||
Log.debug(self, "Removing apt_packages variable of MySQL")
|
||||
apt_packages = apt_packages + ['mariadb-server',
|
||||
'mysql-common',
|
||||
'mariadb-client']
|
||||
apt_packages = apt_packages + WOVar.wo_mysql
|
||||
|
||||
# mysqlclient
|
||||
if pargs.mysqlclient:
|
||||
@@ -849,13 +877,18 @@ class WOStackController(CementBaseController):
|
||||
(not pargs.cheat) and (not pargs.nanorc) and
|
||||
(not pargs.ufw) and (not pargs.ngxblocker) and
|
||||
(not pargs.phpredisadmin) and (not pargs.sendmail) and
|
||||
(not pargs.php73) and (not pargs.all)):
|
||||
(not pargs.php73) and (not pargs.php74) and
|
||||
(not pargs.php72) and (not pargs.all)):
|
||||
self.app.args.print_help()
|
||||
|
||||
if pargs.php:
|
||||
pargs.php72 = True
|
||||
|
||||
if pargs.all:
|
||||
pargs.web = True
|
||||
pargs.admin = True
|
||||
pargs.php73 = True
|
||||
pargs.php74 = True
|
||||
pargs.fail2ban = True
|
||||
pargs.proftpd = True
|
||||
pargs.utils = True
|
||||
@@ -864,7 +897,7 @@ class WOStackController(CementBaseController):
|
||||
|
||||
if pargs.web:
|
||||
pargs.nginx = True
|
||||
pargs.php = True
|
||||
pargs.php72 = True
|
||||
pargs.mysql = True
|
||||
pargs.wpcli = True
|
||||
pargs.sendmail = True
|
||||
@@ -875,6 +908,7 @@ class WOStackController(CementBaseController):
|
||||
pargs.netdata = True
|
||||
pargs.mysqltuner = True
|
||||
pargs.cheat = True
|
||||
packages = packages + ['/var/www/22222/htdocs']
|
||||
|
||||
if pargs.security:
|
||||
pargs.fail2ban = True
|
||||
@@ -890,25 +924,41 @@ class WOStackController(CementBaseController):
|
||||
else:
|
||||
Log.info(self, "Nginx is not installed")
|
||||
|
||||
# PHP
|
||||
if pargs.php:
|
||||
Log.debug(self, "Add PHP to apt_packages list")
|
||||
if WOAptGet.is_installed(self, 'php7.2-fpm'):
|
||||
if not (WOAptGet.is_installed(self, 'php7.3-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php + \
|
||||
WOVar.wo_php_extra
|
||||
else:
|
||||
apt_packages = apt_packages + WOVar.wo_php
|
||||
# PHP 7.2
|
||||
if pargs.php72:
|
||||
Log.debug(self, "Setting apt_packages variable for PHP 7.2")
|
||||
if (WOAptGet.is_installed(self, 'php7.2-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php72
|
||||
if not (WOAptGet.is_installed(self, 'php7.3-fpm') or
|
||||
WOAptGet.is_installed(self, 'php7.4-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php_extra
|
||||
else:
|
||||
Log.debug(self, "PHP 7.2 is not installed")
|
||||
Log.info(self, "PHP 7.2 is not installed")
|
||||
|
||||
# PHP 7.3
|
||||
if pargs.php73:
|
||||
Log.debug(self, "Removing apt_packages variable of PHP 7.3")
|
||||
Log.debug(self, "Setting apt_packages variable for PHP 7.3")
|
||||
if WOAptGet.is_installed(self, 'php7.3-fpm'):
|
||||
if not (WOAptGet.is_installed(self, 'php7.2-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php73 + \
|
||||
WOVar.wo_php_extra
|
||||
else:
|
||||
apt_packages = apt_packages + WOVar.wo_php73
|
||||
apt_packages = apt_packages + WOVar.wo_php73
|
||||
if not (WOAptGet.is_installed(self, 'php7.2-fpm') or
|
||||
WOAptGet.is_installed(self, 'php7.4-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php_extra
|
||||
else:
|
||||
Log.debug(self, "PHP 7.3 is not installed")
|
||||
Log.info(self, "PHP 7.3 is not installed")
|
||||
|
||||
# PHP 7.4
|
||||
if pargs.php74:
|
||||
Log.debug(self, "Setting apt_packages variable for PHP 7.4")
|
||||
if WOAptGet.is_installed(self, 'php7.4-fpm'):
|
||||
apt_packages = apt_packages + WOVar.wo_php74
|
||||
if not (WOAptGet.is_installed(self, 'php7.3-fpm') or
|
||||
WOAptGet.is_installed(self, 'php7.2-fpm')):
|
||||
apt_packages = apt_packages + WOVar.wo_php_extra
|
||||
else:
|
||||
Log.debug(self, "PHP 7.4 is not installed")
|
||||
Log.info(self, "PHP 7.4 is not installed")
|
||||
|
||||
# REDIS
|
||||
if pargs.redis:
|
||||
|
||||
@@ -20,6 +20,7 @@ from wo.core.shellexec import CommandExecutionError, WOShellExec
|
||||
from wo.core.sslutils import SSL
|
||||
from wo.core.template import WOTemplate
|
||||
from wo.core.variables import WOVar
|
||||
from wo.core.stackconf import WOConf
|
||||
|
||||
|
||||
def pre_pref(self, apt_packages):
|
||||
@@ -112,8 +113,8 @@ def pre_pref(self, apt_packages):
|
||||
WORepo.add_key(self, WOVar.wo_nginx_key)
|
||||
|
||||
# add php repository
|
||||
if (set(WOVar.wo_php73).issubset(set(apt_packages)) or
|
||||
set(WOVar.wo_php).issubset(set(apt_packages))):
|
||||
if (('php7.3-fpm' in apt_packages) or
|
||||
('php7.2-fpm' in apt_packages) or ('php7.4-fpm' in apt_packages)):
|
||||
if (WOVar.wo_distro == 'ubuntu'):
|
||||
Log.debug(self, 'Adding ppa for PHP')
|
||||
if not os.path.isfile(
|
||||
@@ -182,13 +183,13 @@ def post_pref(self, apt_packages, packages, upgrade=False):
|
||||
ngxcom = '/etc/nginx/common'
|
||||
ngxroot = '/var/www/'
|
||||
WOGit.add(self, ["/etc/nginx"], msg="Adding Nginx into Git")
|
||||
data = dict(tls13=True)
|
||||
data = dict(tls13=True, release=WOVar.wo_version)
|
||||
WOTemplate.deploy(self,
|
||||
'/etc/nginx/nginx.conf',
|
||||
'nginx-core.mustache', data)
|
||||
|
||||
if not os.path.isfile('{0}/gzip.conf.disabled'.format(ngxcnf)):
|
||||
data = dict()
|
||||
data = dict(release=WOVar.wo_version)
|
||||
WOTemplate.deploy(self, '{0}/gzip.conf'.format(ngxcnf),
|
||||
'gzip.mustache', data)
|
||||
|
||||
@@ -210,17 +211,19 @@ def post_pref(self, apt_packages, packages, upgrade=False):
|
||||
'\t$request_filename;\n')
|
||||
try:
|
||||
data = dict(php="9000", debug="9001",
|
||||
php7="9070", debug7="9170")
|
||||
php7="9070", debug7="9170",
|
||||
release=WOVar.wo_version)
|
||||
WOTemplate.deploy(
|
||||
self, '{0}/upstream.conf'.format(ngxcnf),
|
||||
'upstream.mustache', data, overwrite=True)
|
||||
|
||||
data = dict(phpconf=(
|
||||
bool(WOAptGet.is_installed(self, 'php7.2-fpm'))))
|
||||
bool(WOAptGet.is_installed(self, 'php7.2-fpm'))),
|
||||
release=WOVar.wo_version)
|
||||
WOTemplate.deploy(
|
||||
self, '{0}/stub_status.conf'.format(ngxcnf),
|
||||
'stub_status.mustache', data)
|
||||
data = dict()
|
||||
data = dict(release=WOVar.wo_version)
|
||||
WOTemplate.deploy(
|
||||
self, '{0}/webp.conf'.format(ngxcnf),
|
||||
'webp.mustache', data, overwrite=False)
|
||||
@@ -243,7 +246,7 @@ def post_pref(self, apt_packages, packages, upgrade=False):
|
||||
os.makedirs('/etc/nginx/common')
|
||||
|
||||
try:
|
||||
data = dict()
|
||||
data = dict(release=WOVar.wo_version)
|
||||
|
||||
# Common Configuration
|
||||
WOTemplate.deploy(self,
|
||||
@@ -255,89 +258,52 @@ def post_pref(self, apt_packages, packages, upgrade=False):
|
||||
'{0}/wpsubdir.conf'
|
||||
.format(ngxcom),
|
||||
'wpsubdir.mustache', data)
|
||||
data = dict(upstream="php72")
|
||||
# PHP 7.2 conf
|
||||
WOTemplate.deploy(self,
|
||||
'{0}/php72.conf'
|
||||
.format(ngxcom),
|
||||
'php.mustache', data)
|
||||
|
||||
WOTemplate.deploy(self,
|
||||
'{0}/redis-php72.conf'
|
||||
.format(ngxcom),
|
||||
'redis.mustache', data)
|
||||
wo_php_version = ["php72", "php73", "php74"]
|
||||
for wo_php in wo_php_version:
|
||||
data = dict(upstream="{0}".format(wo_php),
|
||||
release=WOVar.wo_version)
|
||||
WOTemplate.deploy(self,
|
||||
'{0}/{1}.conf'
|
||||
.format(ngxcom, wo_php),
|
||||
'php.mustache', data)
|
||||
|
||||
WOTemplate.deploy(self,
|
||||
'{0}/wpcommon-php72.conf'
|
||||
.format(ngxcom),
|
||||
'wpcommon.mustache', data)
|
||||
WOTemplate.deploy(
|
||||
self, '{0}/redis-{1}.conf'.format(ngxcom, wo_php),
|
||||
'redis.mustache', data)
|
||||
|
||||
WOTemplate.deploy(self,
|
||||
'{0}/wpfc-php72.conf'
|
||||
.format(ngxcom),
|
||||
'wpfc.mustache', data)
|
||||
WOTemplate.deploy(self,
|
||||
'{0}/wpsc-php72.conf'
|
||||
.format(ngxcom),
|
||||
'wpsc.mustache', data)
|
||||
WOTemplate.deploy(
|
||||
self, '{0}/wpcommon-{1}.conf'.format(ngxcom, wo_php),
|
||||
'wpcommon.mustache', data)
|
||||
|
||||
WOTemplate.deploy(self,
|
||||
'{0}/wprocket-php72.conf'
|
||||
.format(ngxcom),
|
||||
'wprocket.mustache', data)
|
||||
WOTemplate.deploy(
|
||||
self, '{0}/wpfc-{1}.conf'.format(ngxcom, wo_php),
|
||||
'wpfc.mustache', data)
|
||||
|
||||
WOTemplate.deploy(self,
|
||||
'{0}/wpce-php72.conf'
|
||||
.format(ngxcom),
|
||||
'wpce.mustache', data)
|
||||
# PHP 7.3 conf
|
||||
data = dict(upstream="php73")
|
||||
WOTemplate.deploy(
|
||||
self, '{0}/wpsc-{1}.conf'.format(ngxcom, wo_php),
|
||||
'wpsc.mustache', data)
|
||||
|
||||
WOTemplate.deploy(self,
|
||||
'{0}/php73.conf'
|
||||
.format(ngxcom),
|
||||
'php.mustache', data)
|
||||
WOTemplate.deploy(
|
||||
self, '{0}/wprocket-{1}.conf'.format(ngxcom, wo_php),
|
||||
'wprocket.mustache', data)
|
||||
|
||||
WOTemplate.deploy(self,
|
||||
'{0}/redis-php73.conf'
|
||||
.format(ngxcom),
|
||||
'redis.mustache', data)
|
||||
WOTemplate.deploy(
|
||||
self, '{0}/wpce-{1}.conf'.format(ngxcom, wo_php),
|
||||
'wpce.mustache', data)
|
||||
|
||||
WOTemplate.deploy(self,
|
||||
'{0}/wpcommon-php73.conf'
|
||||
.format(ngxcom),
|
||||
'wpcommon.mustache', data)
|
||||
|
||||
WOTemplate.deploy(self,
|
||||
'{0}/wpfc-php73.conf'
|
||||
.format(ngxcom),
|
||||
'wpfc.mustache', data)
|
||||
WOTemplate.deploy(self,
|
||||
'{0}/wpsc-php73.conf'
|
||||
.format(ngxcom),
|
||||
'wpsc.mustache', data)
|
||||
|
||||
WOTemplate.deploy(self,
|
||||
'{0}/wprocket-php73.conf'
|
||||
.format(ngxcom),
|
||||
'wprocket.mustache', data)
|
||||
|
||||
WOTemplate.deploy(self,
|
||||
'{0}/wpce-php73.conf'
|
||||
.format(ngxcom),
|
||||
'wpce.mustache', data)
|
||||
except CommandExecutionError as e:
|
||||
Log.debug(self, "{0}".format(e))
|
||||
|
||||
with open("/etc/nginx/common/release",
|
||||
"w") as release_file:
|
||||
"w", encoding='utf-8') as release_file:
|
||||
release_file.write("v{0}"
|
||||
.format(WOVar.wo_version))
|
||||
release_file.close()
|
||||
|
||||
# Following files should not be overwrited
|
||||
|
||||
data = dict(webroot=ngxroot)
|
||||
data = dict(webroot=ngxroot, release=WOVar.wo_version)
|
||||
WOTemplate.deploy(self,
|
||||
'{0}/acl.conf'
|
||||
.format(ngxcom),
|
||||
@@ -383,7 +349,7 @@ def post_pref(self, apt_packages, packages, upgrade=False):
|
||||
os.makedirs('/etc/nginx/sites-enabled')
|
||||
|
||||
# 22222 port settings
|
||||
data = dict(webroot=ngxroot)
|
||||
data = dict(webroot=ngxroot, release=WOVar.wo_version)
|
||||
WOTemplate.deploy(
|
||||
self,
|
||||
'/etc/nginx/sites-available/22222',
|
||||
@@ -488,7 +454,7 @@ def post_pref(self, apt_packages, packages, upgrade=False):
|
||||
WOVar.wo_fqdn)])
|
||||
|
||||
if not os.path.isfile("/opt/cf-update.sh"):
|
||||
data = dict()
|
||||
data = dict(release=WOVar.wo_version)
|
||||
WOTemplate.deploy(self, '/opt/cf-update.sh',
|
||||
'cf-update.mustache',
|
||||
data, overwrite=False)
|
||||
@@ -528,10 +494,11 @@ def post_pref(self, apt_packages, packages, upgrade=False):
|
||||
WOShellExec.cmd_exec(self, 'systemctl daemon-reload')
|
||||
WOService.restart_service(self, 'nginx')
|
||||
|
||||
if set(WOVar.wo_php).issubset(set(apt_packages)):
|
||||
if set(WOVar.wo_php72).issubset(set(apt_packages)):
|
||||
WOGit.add(self, ["/etc/php"], msg="Adding PHP into Git")
|
||||
Log.info(self, "Configuring php7.2-fpm")
|
||||
ngxroot = '/var/www/'
|
||||
|
||||
# Create log directories
|
||||
if not os.path.exists('/var/log/php/7.2/'):
|
||||
Log.debug(self, 'Creating directory /var/log/php/7.2/')
|
||||
@@ -800,6 +767,153 @@ def post_pref(self, apt_packages, packages, upgrade=False):
|
||||
else:
|
||||
WOGit.add(self, ["/etc/php"], msg="Adding PHP into Git")
|
||||
|
||||
# PHP7.4 configuration
|
||||
# php7.4 configuration
|
||||
if set(WOVar.wo_php74).issubset(set(apt_packages)):
|
||||
WOGit.add(self, ["/etc/php"], msg="Adding PHP into Git")
|
||||
Log.info(self, "Configuring php7.4-fpm")
|
||||
ngxroot = '/var/www/'
|
||||
# Create log directories
|
||||
if not os.path.exists('/var/log/php/7.4/'):
|
||||
Log.debug(self, 'Creating directory /var/log/php/7.4/')
|
||||
os.makedirs('/var/log/php/7.4/')
|
||||
|
||||
if not os.path.isfile('/etc/php/7.4/fpm/php.ini.orig'):
|
||||
WOFileUtils.copyfile(self, '/etc/php/7.4/fpm/php.ini',
|
||||
'/etc/php/7.4/fpm/php.ini.orig')
|
||||
|
||||
# Parse etc/php/7.4/fpm/php.ini
|
||||
config = configparser.ConfigParser()
|
||||
Log.debug(self, "configuring php file /etc/php/7.4/"
|
||||
"fpm/php.ini")
|
||||
config.read('/etc/php/7.4/fpm/php.ini.orig')
|
||||
config['PHP']['expose_php'] = 'Off'
|
||||
config['PHP']['post_max_size'] = '100M'
|
||||
config['PHP']['upload_max_filesize'] = '100M'
|
||||
config['PHP']['max_execution_time'] = '300'
|
||||
config['PHP']['max_input_time'] = '300'
|
||||
config['PHP']['max_input_vars'] = '20000'
|
||||
config['Date']['date.timezone'] = WOVar.wo_timezone
|
||||
config['opcache']['opcache.enable'] = '1'
|
||||
config['opcache']['opcache.interned_strings_buffer'] = '8'
|
||||
config['opcache']['opcache.max_accelerated_files'] = '10000'
|
||||
config['opcache']['opcache.memory_consumption'] = '256'
|
||||
config['opcache']['opcache.save_comments'] = '1'
|
||||
config['opcache']['opcache.revalidate_freq'] = '5'
|
||||
config['opcache']['opcache.consistency_checks'] = '0'
|
||||
config['opcache']['opcache.validate_timestamps'] = '1'
|
||||
with open('/etc/php/7.4/fpm/php.ini',
|
||||
encoding='utf-8', mode='w') as configfile:
|
||||
Log.debug(self, "Writting php configuration into "
|
||||
"/etc/php/7.4/fpm/php.ini")
|
||||
config.write(configfile)
|
||||
|
||||
# Render php-fpm pool template for php7.4
|
||||
data = dict(pid="/run/php/php7.4-fpm.pid",
|
||||
error_log="/var/log/php7.4-fpm.log",
|
||||
include="/etc/php/7.4/fpm/pool.d/*.conf")
|
||||
WOTemplate.deploy(
|
||||
self, '/etc/php/7.4/fpm/php-fpm.conf',
|
||||
'php-fpm.mustache', data)
|
||||
|
||||
data = dict(pool='www-php74', listen='php74-fpm.sock',
|
||||
user='www-data',
|
||||
group='www-data', listenuser='root',
|
||||
listengroup='www-data', openbasedir=True)
|
||||
WOTemplate.deploy(self, '/etc/php/7.4/fpm/pool.d/www.conf',
|
||||
'php-pool.mustache', data)
|
||||
data = dict(pool='www-two-php74', listen='php74-two-fpm.sock',
|
||||
user='www-data',
|
||||
group='www-data', listenuser='root',
|
||||
listengroup='www-data', openbasedir=True)
|
||||
WOTemplate.deploy(self, '/etc/php/7.4/fpm/pool.d/www-two.conf',
|
||||
'php-pool.mustache', data)
|
||||
|
||||
# Generate /etc/php/7.4/fpm/pool.d/debug.conf
|
||||
WOFileUtils.copyfile(self, "/etc/php/7.4/fpm/pool.d/www.conf",
|
||||
"/etc/php/7.4/fpm/pool.d/debug.conf")
|
||||
WOFileUtils.searchreplace(self, "/etc/php/7.4/fpm/pool.d/"
|
||||
"debug.conf", "[www-php74]", "[debug]")
|
||||
config = configparser.ConfigParser()
|
||||
config.read('/etc/php/7.4/fpm/pool.d/debug.conf')
|
||||
config['debug']['listen'] = '127.0.0.1:9174'
|
||||
config['debug']['rlimit_core'] = 'unlimited'
|
||||
config['debug']['slowlog'] = '/var/log/php/7.4/slow.log'
|
||||
config['debug']['request_slowlog_timeout'] = '10s'
|
||||
with open('/etc/php/7.4/fpm/pool.d/debug.conf',
|
||||
encoding='utf-8', mode='w') as confifile:
|
||||
Log.debug(self, "writting PHP 7.4 configuration into "
|
||||
"/etc/php/7.4/fpm/pool.d/debug.conf")
|
||||
config.write(confifile)
|
||||
|
||||
with open("/etc/php/7.4/fpm/pool.d/debug.conf",
|
||||
encoding='utf-8', mode='a') as myfile:
|
||||
myfile.write(
|
||||
"php_admin_value[xdebug.profiler_output_dir] "
|
||||
"= /tmp/ \nphp_admin_value[xdebug.profiler_"
|
||||
"output_name] = cachegrind.out.%p-%H-%R "
|
||||
"\nphp_admin_flag[xdebug.profiler_enable"
|
||||
"_trigger] = on \nphp_admin_flag[xdebug."
|
||||
"profiler_enable] = off\n")
|
||||
|
||||
# Disable xdebug
|
||||
if not WOShellExec.cmd_exec(
|
||||
self, "grep -q \';zend_extension\'"
|
||||
" /etc/php/7.4/mods-available/xdebug.ini"):
|
||||
WOFileUtils.searchreplace(
|
||||
self, "/etc/php/7.4/mods-available/"
|
||||
"xdebug.ini",
|
||||
"zend_extension", ";zend_extension")
|
||||
|
||||
# PHP and Debug pull configuration
|
||||
if not os.path.exists('{0}22222/htdocs/fpm/status/'
|
||||
.format(ngxroot)):
|
||||
Log.debug(self, 'Creating directory '
|
||||
'{0}22222/htdocs/fpm/status/ '
|
||||
.format(ngxroot))
|
||||
os.makedirs('{0}22222/htdocs/fpm/status/'
|
||||
.format(ngxroot))
|
||||
open('{0}22222/htdocs/fpm/status/debug74'
|
||||
.format(ngxroot),
|
||||
encoding='utf-8', mode='a').close()
|
||||
open('{0}22222/htdocs/fpm/status/php74'
|
||||
.format(ngxroot),
|
||||
encoding='utf-8', mode='a').close()
|
||||
|
||||
# Write info.php
|
||||
if not os.path.exists('{0}22222/htdocs/php/'
|
||||
.format(ngxroot)):
|
||||
Log.debug(self, 'Creating directory '
|
||||
'{0}22222/htdocs/php/ '
|
||||
.format(ngxroot))
|
||||
os.makedirs('{0}22222/htdocs/php'
|
||||
.format(ngxroot))
|
||||
|
||||
WOFileUtils.textwrite(
|
||||
self, "{0}22222/htdocs/php/info.php"
|
||||
.format(ngxroot), "<?php\nphpinfo();\n?>")
|
||||
|
||||
WOFileUtils.chown(self, "{0}22222/htdocs"
|
||||
.format(ngxroot),
|
||||
'www-data',
|
||||
'www-data', recursive=True)
|
||||
# check service restart or rollback configuration
|
||||
if not WOService.restart_service(self, 'php7.4-fpm'):
|
||||
WOGit.rollback(self, ["/etc/php"], msg="Rollback PHP")
|
||||
else:
|
||||
WOGit.add(self, ["/etc/php"], msg="Adding PHP into Git")
|
||||
|
||||
if os.path.exists('/etc/nginx/conf.d/upstream.conf'):
|
||||
if not WOFileUtils.grepcheck(
|
||||
self, '/etc/nginx/conf.d/upstream.conf', 'php74'):
|
||||
data = dict(php="9000", debug="9001",
|
||||
php7="9070", debug7="9170",
|
||||
release=WOVar.wo_version)
|
||||
WOTemplate.deploy(
|
||||
self, '/etc/nginx/conf.d/upstream.conf',
|
||||
'upstream.mustache', data, True)
|
||||
WOConf.nginxcommon(self)
|
||||
|
||||
# create mysql config if it doesn't exist
|
||||
if "mariadb-server" in apt_packages:
|
||||
WOGit.add(self, ["/etc/mysql"], msg="Adding MySQL into Git")
|
||||
@@ -812,6 +926,23 @@ def post_pref(self, apt_packages, packages, upgrade=False):
|
||||
config_file.write(config)
|
||||
config_file.close()
|
||||
else:
|
||||
if "PASSWORD" not in WOShellExec.cmd_exec_stdout(
|
||||
self, 'mysql -e "use mysql; show grants;"'):
|
||||
try:
|
||||
if not os.path.exists('/etc/mysql/conf.d/my.cnf'):
|
||||
Log.error(self, 'my.cnf not found')
|
||||
config = configparser.ConfigParser()
|
||||
config.read('/etc/mysql/conf.d/my.cnf')
|
||||
chars = config['client']['password']
|
||||
WOShellExec.cmd_exec(
|
||||
self, "mysql -e \"use mysql; "
|
||||
"GRANT ALL PRIVILEGES on "
|
||||
"*.* TO 'root'@'127.0.0.1' IDENTIFIED by "
|
||||
"'{0}' WITH GRANT OPTION\"".format(chars))
|
||||
WOShellExec.cmd_exec(
|
||||
self, 'mysql -e "flush privileges;"')
|
||||
except CommandExecutionError:
|
||||
Log.error(self, "Unable to set MySQL password")
|
||||
Log.info(self, "Tuning MariaDB configuration")
|
||||
if not os.path.isfile("/etc/mysql/my.cnf.default-pkg"):
|
||||
WOFileUtils.copyfile(self, "/etc/mysql/my.cnf",
|
||||
@@ -867,11 +998,12 @@ def post_pref(self, apt_packages, packages, upgrade=False):
|
||||
|
||||
# create fail2ban configuration files
|
||||
if set(WOVar.wo_fail2ban).issubset(set(apt_packages)):
|
||||
WOService.restart_service(self, 'fail2ban')
|
||||
WOGit.add(self, ["/etc/fail2ban"],
|
||||
msg="Adding Fail2ban into Git")
|
||||
if not os.path.isfile("/etc/fail2ban/jail.d/custom.conf"):
|
||||
Log.info(self, "Configuring Fail2Ban")
|
||||
data = dict()
|
||||
data = dict(release=WOVar.wo_version)
|
||||
WOTemplate.deploy(
|
||||
self,
|
||||
'/etc/fail2ban/jail.d/custom.conf',
|
||||
@@ -1463,7 +1595,7 @@ def pre_stack(self):
|
||||
if wo_check is False:
|
||||
# wo sysctl tweaks
|
||||
# check system type
|
||||
wo_arch = bool(os.uname()[4] == 'x86_x64')
|
||||
wo_arch = bool((os.uname()[4]) == 'x86_64')
|
||||
if os.path.isfile('/proc/1/environ'):
|
||||
# detect lxc containers
|
||||
wo_lxc = WOFileUtils.grepcheck(
|
||||
|
||||
@@ -4,6 +4,7 @@ from cement.core.controller import CementBaseController, expose
|
||||
from wo.core.logging import Log
|
||||
from wo.core.services import WOService
|
||||
from wo.core.variables import WOVar
|
||||
from wo.core.fileutils import WOFileUtils
|
||||
|
||||
|
||||
class WOStackStatusController(CementBaseController):
|
||||
@@ -20,17 +21,21 @@ class WOStackStatusController(CementBaseController):
|
||||
wo_system = "/lib/systemd/system/"
|
||||
pargs = self.app.pargs
|
||||
if not (pargs.nginx or pargs.php or
|
||||
pargs.php72 or
|
||||
pargs.php73 or
|
||||
pargs.php74 or
|
||||
pargs.mysql or
|
||||
pargs.redis or
|
||||
pargs.fail2ban or
|
||||
pargs.proftpd or
|
||||
pargs.netdata):
|
||||
pargs.netdata or
|
||||
pargs.ufw):
|
||||
pargs.nginx = True
|
||||
pargs.php = True
|
||||
pargs.mysql = True
|
||||
pargs.fail2ban = True
|
||||
pargs.netdata = True
|
||||
pargs.ufw = True
|
||||
|
||||
if pargs.nginx:
|
||||
if os.path.exists('{0}'.format(wo_system) + 'nginx.service'):
|
||||
@@ -47,6 +52,16 @@ class WOStackStatusController(CementBaseController):
|
||||
services = services + ['php7.3-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.3-FPM is not installed")
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.4-fpm.service'):
|
||||
services = services + ['php7.4-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.4-FPM is not installed")
|
||||
|
||||
if pargs.php72:
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.2-fpm.service'):
|
||||
services = services + ['php7.2-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.2-FPM is not installed")
|
||||
|
||||
if pargs.php73:
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.3-fpm.service'):
|
||||
@@ -54,6 +69,12 @@ class WOStackStatusController(CementBaseController):
|
||||
else:
|
||||
Log.info(self, "PHP7.3-FPM is not installed")
|
||||
|
||||
if pargs.php74:
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.4-fpm.service'):
|
||||
services = services + ['php7.4-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.4-FPM is not installed")
|
||||
|
||||
if pargs.mysql:
|
||||
if ((WOVar.wo_mysql_host == "localhost") or
|
||||
(WOVar.wo_mysql_host == "127.0.0.1")):
|
||||
@@ -103,7 +124,8 @@ class WOStackStatusController(CementBaseController):
|
||||
wo_system = "/lib/systemd/system/"
|
||||
pargs = self.app.pargs
|
||||
if not (pargs.nginx or pargs.php or
|
||||
pargs.php73 or
|
||||
pargs.php72 or pargs.php73 or
|
||||
pargs.php74 or
|
||||
pargs.mysql or
|
||||
pargs.fail2ban or
|
||||
pargs.netdata or
|
||||
@@ -128,6 +150,16 @@ class WOStackStatusController(CementBaseController):
|
||||
services = services + ['php7.3-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.3-FPM is not installed")
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.4-fpm.service'):
|
||||
services = services + ['php7.4-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.4-FPM is not installed")
|
||||
|
||||
if pargs.php72:
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.2-fpm.service'):
|
||||
services = services + ['php7.2-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.2-FPM is not installed")
|
||||
|
||||
if pargs.php73:
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.3-fpm.service'):
|
||||
@@ -135,6 +167,12 @@ class WOStackStatusController(CementBaseController):
|
||||
else:
|
||||
Log.info(self, "PHP7.3-FPM is not installed")
|
||||
|
||||
if pargs.php74:
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.4-fpm.service'):
|
||||
services = services + ['php7.4-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.4-FPM is not installed")
|
||||
|
||||
if pargs.mysql:
|
||||
if ((WOVar.wo_mysql_host == "localhost") or
|
||||
(WOVar.wo_mysql_host == "127.0.0.1")):
|
||||
@@ -184,7 +222,8 @@ class WOStackStatusController(CementBaseController):
|
||||
wo_system = "/lib/systemd/system/"
|
||||
pargs = self.app.pargs
|
||||
if not (pargs.nginx or pargs.php or
|
||||
pargs.php73 or
|
||||
pargs.php72 or pargs.php73 or
|
||||
pargs.php74 or
|
||||
pargs.mysql or
|
||||
pargs.netdata or
|
||||
pargs.proftpd or
|
||||
@@ -210,6 +249,16 @@ class WOStackStatusController(CementBaseController):
|
||||
services = services + ['php7.3-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.3-FPM is not installed")
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.4-fpm.service'):
|
||||
services = services + ['php7.4-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.4-FPM is not installed")
|
||||
|
||||
if pargs.php72:
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.2-fpm.service'):
|
||||
services = services + ['php7.2-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.2-FPM is not installed")
|
||||
|
||||
if pargs.php73:
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.3-fpm.service'):
|
||||
@@ -217,6 +266,12 @@ class WOStackStatusController(CementBaseController):
|
||||
else:
|
||||
Log.info(self, "PHP7.3-FPM is not installed")
|
||||
|
||||
if pargs.php74:
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.4-fpm.service'):
|
||||
services = services + ['php7.4-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.4-FPM is not installed")
|
||||
|
||||
if pargs.mysql:
|
||||
if ((WOVar.wo_mysql_host == "localhost") or
|
||||
(WOVar.wo_mysql_host == "127.0.0.1")):
|
||||
@@ -266,7 +321,9 @@ class WOStackStatusController(CementBaseController):
|
||||
wo_system = "/lib/systemd/system/"
|
||||
pargs = self.app.pargs
|
||||
if not (pargs.nginx or pargs.php or
|
||||
pargs.php72 or
|
||||
pargs.php73 or
|
||||
pargs.php74 or
|
||||
pargs.mysql or
|
||||
pargs.netdata or
|
||||
pargs.proftpd or
|
||||
@@ -277,6 +334,7 @@ class WOStackStatusController(CementBaseController):
|
||||
pargs.mysql = True
|
||||
pargs.fail2ban = True
|
||||
pargs.netdata = True
|
||||
pargs.ufw = True
|
||||
|
||||
if pargs.nginx:
|
||||
if os.path.exists('{0}'.format(wo_system) + 'nginx.service'):
|
||||
@@ -293,6 +351,16 @@ class WOStackStatusController(CementBaseController):
|
||||
services = services + ['php7.3-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.3-FPM is not installed")
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.4-fpm.service'):
|
||||
services = services + ['php7.4-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.4-FPM is not installed")
|
||||
|
||||
if pargs.php72:
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.2-fpm.service'):
|
||||
services = services + ['php7.2-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.2-FPM is not installed")
|
||||
|
||||
if pargs.php73:
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.3-fpm.service'):
|
||||
@@ -300,6 +368,12 @@ class WOStackStatusController(CementBaseController):
|
||||
else:
|
||||
Log.info(self, "PHP7.3-FPM is not installed")
|
||||
|
||||
if pargs.php74:
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.4-fpm.service'):
|
||||
services = services + ['php7.4-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.4-FPM is not installed")
|
||||
|
||||
if pargs.mysql:
|
||||
if ((WOVar.wo_mysql_host == "localhost") or
|
||||
(WOVar.wo_mysql_host == "127.0.0.1")):
|
||||
@@ -338,6 +412,17 @@ class WOStackStatusController(CementBaseController):
|
||||
else:
|
||||
Log.info(self, "Netdata is not installed")
|
||||
|
||||
# UFW
|
||||
if pargs.ufw:
|
||||
if os.path.exists('/usr/sbin/ufw'):
|
||||
if WOFileUtils.grepcheck(
|
||||
self, '/etc/ufw/ufw.conf', 'ENABLED=yes'):
|
||||
Log.info(self, "UFW Firewall is enabled")
|
||||
else:
|
||||
Log.info(self, "UFW Firewall is disabled")
|
||||
else:
|
||||
Log.info(self, "UFW is not installed")
|
||||
|
||||
for service in services:
|
||||
if WOService.get_service_status(self, service):
|
||||
Log.info(self, "{0:10}: {1}".format(service, "Running"))
|
||||
@@ -349,7 +434,8 @@ class WOStackStatusController(CementBaseController):
|
||||
wo_system = "/lib/systemd/system/"
|
||||
pargs = self.app.pargs
|
||||
if not (pargs.nginx or pargs.php or
|
||||
pargs.php73 or
|
||||
pargs.php72 or pargs.php73 or
|
||||
pargs.php74 or
|
||||
pargs.mysql or
|
||||
pargs.netdata or
|
||||
pargs.proftpd or
|
||||
@@ -375,6 +461,16 @@ class WOStackStatusController(CementBaseController):
|
||||
services = services + ['php7.3-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.3-FPM is not installed")
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.4-fpm.service'):
|
||||
services = services + ['php7.4-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.4-FPM is not installed")
|
||||
|
||||
if pargs.php72:
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.2-fpm.service'):
|
||||
services = services + ['php7.2-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.2-FPM is not installed")
|
||||
|
||||
if pargs.php73:
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.3-fpm.service'):
|
||||
@@ -382,6 +478,12 @@ class WOStackStatusController(CementBaseController):
|
||||
else:
|
||||
Log.info(self, "PHP7.3-FPM is not installed")
|
||||
|
||||
if pargs.php74:
|
||||
if os.path.exists('{0}'.format(wo_system) + 'php7.4-fpm.service'):
|
||||
services = services + ['php7.4-fpm']
|
||||
else:
|
||||
Log.info(self, "PHP7.4-FPM is not installed")
|
||||
|
||||
if pargs.mysql:
|
||||
if ((WOVar.wo_mysql_host == "localhost") or
|
||||
(WOVar.wo_mysql_host == "127.0.0.1")):
|
||||
|
||||
@@ -30,8 +30,12 @@ class WOStackUpgradeController(CementBaseController):
|
||||
dict(help='Upgrade Nginx stack', action='store_true')),
|
||||
(['--php'],
|
||||
dict(help='Upgrade PHP 7.2 stack', action='store_true')),
|
||||
(['--php72'],
|
||||
dict(help='Upgrade PHP 7.2 stack', action='store_true')),
|
||||
(['--php73'],
|
||||
dict(help='Upgrade PHP 7.3 stack', action='store_true')),
|
||||
(['--php74'],
|
||||
dict(help='Upgrade PHP 7.4 stack', action='store_true')),
|
||||
(['--mysql'],
|
||||
dict(help='Upgrade MySQL stack', action='store_true')),
|
||||
(['--wpcli'],
|
||||
@@ -44,8 +48,12 @@ class WOStackUpgradeController(CementBaseController):
|
||||
dict(help='Upgrade WordOps Dashboard', action='store_true')),
|
||||
(['--composer'],
|
||||
dict(help='Upgrade Composer', action='store_true')),
|
||||
(['--mysqltuner'],
|
||||
dict(help='Upgrade Composer', action='store_true')),
|
||||
(['--phpmyadmin'],
|
||||
dict(help='Upgrade phpMyAdmin', action='store_true')),
|
||||
(['--adminer'],
|
||||
dict(help='Upgrade Adminer', action='store_true')),
|
||||
(['--ngxblocker'],
|
||||
dict(help='Upgrade phpMyAdmin', action='store_true')),
|
||||
(['--no-prompt'],
|
||||
@@ -63,27 +71,33 @@ class WOStackUpgradeController(CementBaseController):
|
||||
packages = []
|
||||
self.msg = []
|
||||
pargs = self.app.pargs
|
||||
|
||||
if ((not pargs.web) and (not pargs.nginx) and
|
||||
(not pargs.php) and (not pargs.php73) and
|
||||
(not pargs.php) and
|
||||
(not pargs.php72) and (not pargs.php73) and
|
||||
(not pargs.php74) and
|
||||
(not pargs.mysql) and (not pargs.ngxblocker) and
|
||||
(not pargs.all) and (not pargs.wpcli) and
|
||||
(not pargs.netdata) and (not pargs.composer) and
|
||||
(not pargs.phpmyadmin) and (not pargs.dashboard) and
|
||||
(not pargs.phpmyadmin) and (not pargs.adminer) and
|
||||
(not pargs.dashboard) and (not pargs.mysqltuner) and
|
||||
(not pargs.redis)):
|
||||
pargs.web = True
|
||||
pargs.admin = True
|
||||
|
||||
if pargs.php:
|
||||
pargs.php72 = True
|
||||
|
||||
if pargs.all:
|
||||
pargs.web = True
|
||||
pargs.admin = True
|
||||
pargs.redis = True
|
||||
pargs.php73 = True
|
||||
pargs.ngxblocker = True
|
||||
|
||||
if pargs.web:
|
||||
pargs.nginx = True
|
||||
pargs.php = True
|
||||
pargs.php72 = True
|
||||
pargs.php73 = True
|
||||
pargs.php74 = True
|
||||
pargs.mysql = True
|
||||
pargs.wpcli = True
|
||||
|
||||
@@ -93,6 +107,8 @@ class WOStackUpgradeController(CementBaseController):
|
||||
pargs.dashboard = True
|
||||
pargs.phpmyadmin = True
|
||||
pargs.wpcli = True
|
||||
pargs.adminer = True
|
||||
pargs.mysqltuner = True
|
||||
|
||||
# nginx
|
||||
if pargs.nginx:
|
||||
@@ -106,34 +122,32 @@ class WOStackUpgradeController(CementBaseController):
|
||||
Log.info(self, "Nginx Stable is not already installed")
|
||||
|
||||
# php 7.2
|
||||
if pargs.php:
|
||||
if pargs.php72:
|
||||
if WOAptGet.is_installed(self, 'php7.2-fpm'):
|
||||
apt_packages = apt_packages + WOVar.wo_php + \
|
||||
apt_packages = apt_packages + WOVar.wo_php72 + \
|
||||
WOVar.wo_php_extra
|
||||
else:
|
||||
Log.info(self, "PHP 7.2 is not installed")
|
||||
|
||||
# php 7.3
|
||||
if pargs.php73:
|
||||
if WOAptGet.is_installed(self, 'php7.3-fpm'):
|
||||
apt_packages = apt_packages + WOVar.wo_php73 + \
|
||||
WOVar.wo_php_extra
|
||||
else:
|
||||
Log.info(self, "PHP 7.3 is not installed")
|
||||
|
||||
# php 7.4
|
||||
if pargs.php74:
|
||||
if WOAptGet.is_installed(self, 'php7.4-fpm'):
|
||||
apt_packages = apt_packages + WOVar.wo_php74 + \
|
||||
WOVar.wo_php_extra
|
||||
|
||||
# mysql
|
||||
if pargs.mysql:
|
||||
if WOShellExec.cmd_exec(self, 'mysqladmin ping'):
|
||||
apt_packages = apt_packages + ['mariadb-server']
|
||||
else:
|
||||
Log.info(self, "MariaDB is not installed")
|
||||
|
||||
# redis
|
||||
if pargs.redis:
|
||||
if WOAptGet.is_installed(self, 'redis-server'):
|
||||
apt_packages = apt_packages + ['redis-server']
|
||||
else:
|
||||
Log.info(self, "Redis is not installed")
|
||||
|
||||
# wp-cli
|
||||
if pargs.wpcli:
|
||||
@@ -188,6 +202,32 @@ class WOStackUpgradeController(CementBaseController):
|
||||
else:
|
||||
Log.info(self, "phpMyAdmin isn't installed")
|
||||
|
||||
# adminer
|
||||
if pargs.adminer:
|
||||
if os.path.isfile("{0}22222/htdocs/db/"
|
||||
"adminer/index.php"
|
||||
.format(WOVar.wo_webroot)):
|
||||
Log.debug(self, "Setting packages variable for Adminer ")
|
||||
packages = packages + [[
|
||||
"https://github.com/vrana/adminer/"
|
||||
"releases/download/v{0}"
|
||||
"/adminer-{0}.php"
|
||||
.format(WOVar.wo_adminer),
|
||||
"{0}22222/"
|
||||
"htdocs/db/adminer/index.php"
|
||||
.format(WOVar.wo_webroot),
|
||||
"Adminer"],
|
||||
["https://raw.githubusercontent.com"
|
||||
"/vrana/adminer/master/designs/"
|
||||
"pepa-linha/adminer.css",
|
||||
"{0}22222/"
|
||||
"htdocs/db/adminer/adminer.css"
|
||||
.format(WOVar.wo_webroot),
|
||||
"Adminer theme"]]
|
||||
else:
|
||||
Log.debug(self, "Adminer isn't installed")
|
||||
Log.info(self, "Adminer isn't installed")
|
||||
|
||||
# composer
|
||||
if pargs.composer:
|
||||
if os.path.isfile('/usr/local/bin/composer'):
|
||||
@@ -198,6 +238,18 @@ class WOStackUpgradeController(CementBaseController):
|
||||
else:
|
||||
Log.info(self, "Composer isn't installed")
|
||||
|
||||
# mysqltuner
|
||||
if pargs.mysqltuner:
|
||||
if WOAptGet.is_exec(self, 'mysqltuner'):
|
||||
Log.debug(self, "Setting packages variable "
|
||||
"for MySQLTuner ")
|
||||
packages = packages + [["https://raw."
|
||||
"githubusercontent.com/"
|
||||
"major/MySQLTuner-perl"
|
||||
"/master/mysqltuner.pl",
|
||||
"/usr/bin/mysqltuner",
|
||||
"MySQLTuner"]]
|
||||
|
||||
# ngxblocker
|
||||
if pargs.ngxblocker:
|
||||
if os.path.exists('/usr/local/sbin/install-ngxblocker'):
|
||||
@@ -217,6 +269,8 @@ class WOStackUpgradeController(CementBaseController):
|
||||
if (apt_packages):
|
||||
if (("php7.2-fpm" not in apt_packages) and
|
||||
("php7.3-fpm" not in apt_packages) and
|
||||
("php7.4-fpm" not in apt_packages) and
|
||||
("redis-server" not in apt_packages) and
|
||||
("nginx-custom" not in apt_packages) and
|
||||
("mariadb-server" not in apt_packages)):
|
||||
pass
|
||||
@@ -243,6 +297,9 @@ class WOStackUpgradeController(CementBaseController):
|
||||
if "php7.3-fpm" in apt_packages:
|
||||
WOAptGet.remove(self, ['php7.3-fpm'],
|
||||
auto=False, purge=True)
|
||||
if "php7.4-fpm" in apt_packages:
|
||||
WOAptGet.remove(self, ['php7.4-fpm'],
|
||||
auto=False, purge=True)
|
||||
# check if nginx upgrade is blocked
|
||||
if os.path.isfile(
|
||||
'/etc/apt/preferences.d/nginx-block'):
|
||||
@@ -257,16 +314,16 @@ class WOStackUpgradeController(CementBaseController):
|
||||
# Post Actions after package updates
|
||||
|
||||
if (packages):
|
||||
if pargs.wpcli:
|
||||
if WOAptGet.is_selected(self, 'WP-CLI', packages):
|
||||
WOFileUtils.rm(self, '/usr/local/bin/wp')
|
||||
|
||||
if pargs.netdata:
|
||||
if WOAptGet.is_selected(self, 'Netdata', packages):
|
||||
WOFileUtils.rm(self, '/var/lib/wo/tmp/kickstart.sh')
|
||||
|
||||
if pargs.ngxblocker:
|
||||
if WOAptGet.is_selected(self, 'ngxblocker', packages):
|
||||
WOFileUtils.rm(self, '/usr/local/sbin/update-ngxblocker')
|
||||
|
||||
if pargs.dashboard:
|
||||
if WOAptGet.is_selected(self, 'WordOps Dashboard', packages):
|
||||
if os.path.isfile('/var/www/22222/htdocs/index.php'):
|
||||
WOFileUtils.rm(self, '/var/www/22222/htdocs/index.php')
|
||||
if os.path.isfile('/var/www/22222/htdocs/index.html'):
|
||||
@@ -276,18 +333,22 @@ class WOStackUpgradeController(CementBaseController):
|
||||
Log.debug(self, "Downloading following: {0}".format(packages))
|
||||
WODownload.download(self, packages)
|
||||
|
||||
if pargs.wpcli:
|
||||
if WOAptGet.is_selected(self, 'WP-CLI', packages):
|
||||
WOFileUtils.chmod(self, "/usr/local/bin/wp", 0o775)
|
||||
|
||||
if pargs.ngxblocker:
|
||||
if WOAptGet.is_selected(self, 'ngxblocker', packages):
|
||||
WOFileUtils.chmod(
|
||||
self, '/usr/local/sbin/update-ngxblocker', 0o700)
|
||||
self, '/usr/local/sbin/update-ngxblocker', 0o775)
|
||||
WOShellExec.cmd_exec(
|
||||
self, '/usr/local/sbin/update-ngxblocker -nq'
|
||||
)
|
||||
self, '/usr/local/sbin/update-ngxblocker -nq')
|
||||
|
||||
if WOAptGet.is_selected(self, 'MySQLTuner', packages):
|
||||
WOFileUtils.chmod(self, "/usr/bin/mysqltuner", 0o775)
|
||||
if os.path.exists('/usr/local/bin/mysqltuner'):
|
||||
WOFileUtils.rm(self, '/usr/local/bin/mysqltuner')
|
||||
|
||||
# Netdata
|
||||
if pargs.netdata:
|
||||
if WOAptGet.is_selected(self, 'Netdata', packages):
|
||||
Log.wait(self, "Upgrading Netdata")
|
||||
# detect static binaries install
|
||||
if os.path.isdir('/opt/netdata'):
|
||||
@@ -313,7 +374,7 @@ class WOStackUpgradeController(CementBaseController):
|
||||
self, "bash /var/lib/wo/tmp/kickstart.sh")
|
||||
Log.valide(self, "Upgrading Netdata")
|
||||
|
||||
if pargs.dashboard:
|
||||
if WOAptGet.is_selected(self, 'WordOps Dashboard', packages):
|
||||
post_pref(
|
||||
self, [], [["https://github.com/WordOps"
|
||||
"/wordops-dashboard/"
|
||||
@@ -323,7 +384,7 @@ class WOStackUpgradeController(CementBaseController):
|
||||
"/var/lib/wo/tmp/wo-dashboard.tar.gz",
|
||||
"WordOps Dashboard"]])
|
||||
|
||||
if pargs.composer:
|
||||
if WOAptGet.is_selected(self, 'Composer', packages):
|
||||
Log.wait(self, "Upgrading Composer")
|
||||
if WOShellExec.cmd_exec(
|
||||
self, '/usr/bin/php -v'):
|
||||
@@ -336,7 +397,7 @@ class WOStackUpgradeController(CementBaseController):
|
||||
WOFileUtils.chmod(self, "/usr/local/bin/composer", 0o775)
|
||||
Log.valide(self, "Upgrading Composer ")
|
||||
|
||||
if pargs.phpmyadmin:
|
||||
if WOAptGet.is_selected(self, 'PHPMyAdmin', packages):
|
||||
Log.wait(self, "Upgrading phpMyAdmin")
|
||||
WOExtract.extract(self, '/var/lib/wo/tmp/pma.tar.gz',
|
||||
'/var/lib/wo/tmp/')
|
||||
@@ -359,5 +420,10 @@ class WOStackUpgradeController(CementBaseController):
|
||||
'www-data',
|
||||
'www-data', recursive=True)
|
||||
Log.valide(self, "Upgrading phpMyAdmin")
|
||||
if os.path.exists('{0}22222/htdocs'.format(WOVar.wo_webroot)):
|
||||
WOFileUtils.chown(self, "{0}22222/htdocs"
|
||||
.format(WOVar.wo_webroot),
|
||||
'www-data',
|
||||
'www-data', recursive=True)
|
||||
|
||||
Log.info(self, "Successfully updated packages")
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import glob
|
||||
import os
|
||||
|
||||
from cement.core.controller import CementBaseController, expose
|
||||
|
||||
@@ -39,6 +40,13 @@ class WOSyncController(CementBaseController):
|
||||
# Read config files
|
||||
configfiles = glob.glob(wo_site_webroot + '/*-config.php')
|
||||
|
||||
if (os.path.exists(
|
||||
'{0}/ee-config.php'.format(wo_site_webroot)) and
|
||||
os.path.exists(
|
||||
'{0}/wo-config.php'.format(wo_site_webroot))):
|
||||
configfiles = glob.glob(
|
||||
wo_site_webroot + 'wo-config.php')
|
||||
|
||||
# search for wp-config.php inside htdocs/
|
||||
if not configfiles:
|
||||
Log.debug(self, "Config files not found in {0}/ "
|
||||
|
||||
Reference in New Issue
Block a user