feat: convert WordOps from Nginx to OpenLiteSpeed + LSPHP + LSCache
Complete conversion of the WordOps stack from Nginx + PHP-FPM to OpenLiteSpeed + LSPHP + LSCache. This is a full rewrite across all 7 phases of the codebase: - Foundation: OLS paths, variables, services, removed pynginxconfig dep - Templates: 11 new OLS mustache templates, removed nginx-specific ones - Stack: stack_pref, stack, stack_services, stack_upgrade, stack_migrate - Site: site_functions, site, site_create, site_update - Plugins: debug, info, log, clean rewritten for OLS - SSL/ACME: acme.sh deploy uses lswsctrl, OLS vhssl blocks - Other: secure, backup, clone, install script Additional features: - Debian 13 (trixie) support - PHP 8.5 support - WP Fort Knox mu-plugin integration (wo secure --lockdown/--unlock) - --nginx CLI flag preserved for backward compatibility Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -31,7 +31,7 @@ class WOStackUpgradeController(CementBaseController):
|
||||
(['--security'],
|
||||
dict(help='Upgrade security stack', action='store_true')),
|
||||
(['--nginx'],
|
||||
dict(help='Upgrade Nginx stack', action='store_true')),
|
||||
dict(help='Upgrade OpenLiteSpeed stack', action='store_true')),
|
||||
(['--php'],
|
||||
dict(help='Upgrade PHP stack', action='store_true')),
|
||||
(['--mysql'],
|
||||
@@ -52,13 +52,11 @@ class WOStackUpgradeController(CementBaseController):
|
||||
(['--composer'],
|
||||
dict(help='Upgrade Composer', action='store_true')),
|
||||
(['--mysqltuner'],
|
||||
dict(help='Upgrade Composer', action='store_true')),
|
||||
dict(help='Upgrade MySQLTuner', 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'],
|
||||
dict(help="Upgrade Packages without any prompt",
|
||||
action='store_true')),
|
||||
@@ -108,6 +106,7 @@ class WOStackUpgradeController(CementBaseController):
|
||||
pargs.php82 = True
|
||||
pargs.php83 = True
|
||||
pargs.php84 = True
|
||||
pargs.php85 = True
|
||||
pargs.mysql = True
|
||||
pargs.wpcli = True
|
||||
|
||||
@@ -121,19 +120,18 @@ class WOStackUpgradeController(CementBaseController):
|
||||
pargs.mysqltuner = True
|
||||
|
||||
if pargs.security:
|
||||
pargs.ngxblocker = True
|
||||
pargs.fail2ban = True
|
||||
|
||||
# nginx
|
||||
# OpenLiteSpeed
|
||||
if pargs.nginx:
|
||||
if WOAptGet.is_installed(self, 'nginx-custom'):
|
||||
apt_packages = apt_packages + WOVar.wo_nginx
|
||||
if WOAptGet.is_installed(self, 'openlitespeed'):
|
||||
apt_packages = apt_packages + WOVar.wo_ols
|
||||
else:
|
||||
if os.path.isfile('/usr/sbin/nginx'):
|
||||
Log.info(self, "Updating Nginx templates")
|
||||
post_pref(self, WOVar.wo_nginx, [])
|
||||
if os.path.isfile('/usr/local/lsws/bin/openlitespeed'):
|
||||
Log.info(self, "Updating OpenLiteSpeed templates")
|
||||
post_pref(self, WOVar.wo_ols, [])
|
||||
else:
|
||||
Log.info(self, "Nginx Stable is not already installed")
|
||||
Log.info(self, "OpenLiteSpeed is not already installed")
|
||||
|
||||
wo_vars = {
|
||||
'php74': WOVar.wo_php74,
|
||||
@@ -142,12 +140,14 @@ class WOStackUpgradeController(CementBaseController):
|
||||
'php82': WOVar.wo_php82,
|
||||
'php83': WOVar.wo_php83,
|
||||
'php84': WOVar.wo_php84,
|
||||
'php85': WOVar.wo_php85,
|
||||
}
|
||||
|
||||
for parg_version, version in WOVar.wo_php_versions.items():
|
||||
if getattr(pargs, parg_version, False):
|
||||
short_ver = version.replace('.', '')
|
||||
Log.debug(self, f"Setting apt_packages variable for PHP {version}")
|
||||
if WOAptGet.is_installed(self, f'php{version}-fpm'):
|
||||
if WOAptGet.is_installed(self, f'lsphp{short_ver}'):
|
||||
apt_packages = apt_packages + wo_vars[parg_version] + WOVar.wo_php_extra
|
||||
else:
|
||||
Log.debug(self, f"PHP {version} not installed")
|
||||
@@ -259,54 +259,36 @@ class WOStackUpgradeController(CementBaseController):
|
||||
"/usr/bin/mysqltuner",
|
||||
"MySQLTuner"]]
|
||||
|
||||
# ngxblocker
|
||||
if pargs.ngxblocker:
|
||||
if os.path.exists('/usr/local/sbin/install-ngxblocker'):
|
||||
packages = packages + [[
|
||||
'https://raw.githubusercontent.com/mitchellkrogza/'
|
||||
'nginx-ultimate-bad-bot-blocker/master/update-ngxblocker',
|
||||
'/usr/local/sbin/update-ngxblocker',
|
||||
'ngxblocker'
|
||||
]]
|
||||
|
||||
if not apt_packages and not packages:
|
||||
self.app.args.print_help()
|
||||
else:
|
||||
pre_stack(self)
|
||||
if apt_packages:
|
||||
if not ("php7.2-fpm" in apt_packages or
|
||||
"php7.3-fpm" in apt_packages or
|
||||
"php7.4-fpm" in apt_packages or
|
||||
"php8.0-fpm" in apt_packages or
|
||||
"php8.1-fpm" in apt_packages or
|
||||
"php8.2-fpm" in apt_packages or
|
||||
"php8.3-fpm" in apt_packages or
|
||||
"php8.4-fpm" in apt_packages or
|
||||
"redis-server" in apt_packages or
|
||||
"nginx-custom" in apt_packages or
|
||||
"mariadb-server" in apt_packages):
|
||||
pass
|
||||
else:
|
||||
# Check if critical packages are being upgraded
|
||||
has_critical = False
|
||||
for pkg in apt_packages:
|
||||
if pkg in ['openlitespeed', 'redis-server',
|
||||
'mariadb-server'] or pkg.startswith('lsphp'):
|
||||
has_critical = True
|
||||
break
|
||||
if has_critical:
|
||||
Log.warn(
|
||||
self, "Your sites may be down for few seconds if "
|
||||
"you are upgrading Nginx, PHP-FPM, MariaDB or Redis")
|
||||
"you are upgrading OpenLiteSpeed, LSPHP, "
|
||||
"MariaDB or Redis")
|
||||
# Check prompt
|
||||
if not (pargs.no_prompt or pargs.force):
|
||||
start_upgrade = input("Do you want to continue:[y/N]")
|
||||
if start_upgrade != "Y" and start_upgrade != "y":
|
||||
Log.error(self, "Not starting package update")
|
||||
# additional pre_pref
|
||||
if "nginx-custom" in apt_packages:
|
||||
pre_pref(self, WOVar.wo_nginx)
|
||||
if "openlitespeed" in apt_packages:
|
||||
pre_pref(self, WOVar.wo_ols)
|
||||
Log.wait(self, "Updating APT cache")
|
||||
# apt-get update
|
||||
WOAptGet.update(self)
|
||||
Log.valide(self, "Updating APT cache")
|
||||
|
||||
# check if nginx upgrade is blocked
|
||||
if os.path.isfile(
|
||||
'/etc/apt/preferences.d/nginx-block'):
|
||||
post_pref(self, WOVar.wo_nginx, [], True)
|
||||
# redis pre_pref
|
||||
if "redis-server" in apt_packages:
|
||||
pre_pref(self, WOVar.wo_redis)
|
||||
@@ -324,9 +306,6 @@ class WOStackUpgradeController(CementBaseController):
|
||||
if WOAptGet.is_selected(self, 'Netdata', packages):
|
||||
WOFileUtils.rm(self, '/var/lib/wo/tmp/kickstart.sh')
|
||||
|
||||
if WOAptGet.is_selected(self, 'ngxblocker', packages):
|
||||
WOFileUtils.rm(self, '/usr/local/sbin/update-ngxblocker')
|
||||
|
||||
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')
|
||||
@@ -340,15 +319,6 @@ class WOStackUpgradeController(CementBaseController):
|
||||
if WOAptGet.is_selected(self, 'WP-CLI', packages):
|
||||
WOFileUtils.chmod(self, "/usr/local/bin/wp", 0o775)
|
||||
|
||||
if WOAptGet.is_selected(self, 'ngxblocker', packages):
|
||||
if os.path.exists('/etc/nginx/conf.d/variables-hash.conf'):
|
||||
WOFileUtils.rm(
|
||||
self, '/etc/nginx/conf.d/variables-hash.conf')
|
||||
WOFileUtils.chmod(
|
||||
self, '/usr/local/sbin/update-ngxblocker', 0o775)
|
||||
WOShellExec.cmd_exec(
|
||||
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'):
|
||||
|
||||
Reference in New Issue
Block a user