2024-06-07 15:55:19 +02:00
|
|
|
import os
|
|
|
|
|
import re
|
2019-09-02 04:37:13 +02:00
|
|
|
from cement.core.controller import CementBaseController, expose
|
2019-09-05 11:47:04 +02:00
|
|
|
|
2020-10-23 12:50:31 +02:00
|
|
|
from wo.cli.plugins.stack_pref import post_pref, pre_pref
|
2018-11-13 21:55:59 +01:00
|
|
|
from wo.core.aptget import WOAptGet
|
2020-10-23 12:50:31 +02:00
|
|
|
from wo.core.fileutils import WOFileUtils
|
2019-09-02 04:37:13 +02:00
|
|
|
from wo.core.logging import Log
|
|
|
|
|
from wo.core.mysql import WOMysql
|
2018-11-13 21:55:59 +01:00
|
|
|
from wo.core.shellexec import WOShellExec
|
2019-10-02 13:13:32 +02:00
|
|
|
from wo.core.variables import WOVar
|
2024-06-08 14:27:16 +02:00
|
|
|
from wo.cli.plugins.sitedb import (getAllsites)
|
|
|
|
|
from wo.core.template import WOTemplate
|
2024-06-11 23:52:12 +02:00
|
|
|
from wo.core.domainvalidate import WODomain
|
2018-11-13 21:55:59 +01:00
|
|
|
|
2020-10-23 13:49:14 +02:00
|
|
|
|
2018-11-13 21:55:59 +01:00
|
|
|
class WOStackMigrateController(CementBaseController):
|
|
|
|
|
class Meta:
|
|
|
|
|
label = 'migrate'
|
|
|
|
|
stacked_on = 'stack'
|
|
|
|
|
stacked_type = 'nested'
|
|
|
|
|
description = ('Migrate stack safely')
|
|
|
|
|
arguments = [
|
|
|
|
|
(['--mariadb'],
|
2020-10-23 12:50:31 +02:00
|
|
|
dict(help="Migrate/Upgrade database to MariaDB",
|
|
|
|
|
action='store_true')),
|
2024-06-08 14:27:16 +02:00
|
|
|
(['--nginx'],
|
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>
2026-02-08 18:55:16 +01:00
|
|
|
dict(help="Migrate OpenLiteSpeed configuration",
|
2024-06-08 14:27:16 +02:00
|
|
|
action='store_true')),
|
2020-10-23 12:50:31 +02:00
|
|
|
(['--force'],
|
|
|
|
|
dict(help="Force Packages upgrade without any prompt",
|
2018-11-13 21:55:59 +01:00
|
|
|
action='store_true')),
|
2020-10-28 11:45:30 +01:00
|
|
|
(['--ci'],
|
|
|
|
|
dict(help="Argument used for testing, "
|
|
|
|
|
"do not use it on your server",
|
|
|
|
|
action='store_true')),
|
2019-03-19 16:58:35 +01:00
|
|
|
]
|
2018-11-13 21:55:59 +01:00
|
|
|
|
|
|
|
|
@expose(hide=True)
|
2020-10-28 12:25:09 +01:00
|
|
|
def migrate_mariadb(self, ci=False):
|
2023-07-16 23:29:52 +02:00
|
|
|
|
2024-06-08 14:27:16 +02:00
|
|
|
# Backup all database
|
|
|
|
|
WOMysql.backupAll(self, fulldump=True)
|
2023-07-16 23:29:52 +02:00
|
|
|
|
|
|
|
|
# Check current MariaDB version
|
2024-06-07 15:55:19 +02:00
|
|
|
if (os.path.exists('/etc/apt/sources.list.d/wo-repo.list') and
|
|
|
|
|
WOFileUtils.grepcheck(self, "/etc/apt/sources.list.d/wo-repo.list", "mariadb")):
|
|
|
|
|
wo_mysql_current_repo = WOFileUtils.grep(
|
|
|
|
|
self, '/etc/apt/sources.list.d/wo-repo.list', 'mariadb')
|
|
|
|
|
repo_path = '/etc/apt/sources.list.d/wo-repo.list'
|
|
|
|
|
elif (os.path.exists('/etc/apt/sources.list.d/mariadb.list') and
|
|
|
|
|
WOFileUtils.grepcheck(self, '/etc/apt/sources.list.d/mariadb.list', "mariadb")):
|
|
|
|
|
wo_mysql_current_repo = WOFileUtils.grep(
|
|
|
|
|
self, '/etc/apt/sources.list.d/mariadb.list', 'mariadb')
|
|
|
|
|
repo_path = '/etc/apt/sources.list.d/mariadb.list'
|
|
|
|
|
|
2023-07-16 23:29:52 +02:00
|
|
|
if wo_mysql_current_repo:
|
2024-06-07 15:55:19 +02:00
|
|
|
Log.debug(self, "Looking for MariaDB version")
|
|
|
|
|
pattern = r"/(\d+\.\d+)/"
|
|
|
|
|
match = re.search(pattern, wo_mysql_current_repo)
|
|
|
|
|
current_mysql_version = match.group(1)
|
|
|
|
|
Log.debug(self, f"Current MariaDB version is {current_mysql_version}")
|
2023-07-16 23:29:52 +02:00
|
|
|
else:
|
2023-08-04 16:46:00 +02:00
|
|
|
Log.error(self, "MariaDB is not installed from repository yet")
|
2023-07-16 23:29:52 +02:00
|
|
|
|
2023-08-13 14:51:30 +02:00
|
|
|
if self.app.config.has_section('mariadb'):
|
|
|
|
|
mariadb_release = self.app.config.get(
|
|
|
|
|
'mariadb', 'release')
|
|
|
|
|
if mariadb_release < WOVar.mariadb_ver:
|
|
|
|
|
mariadb_release = WOVar.mariadb_ver
|
|
|
|
|
else:
|
|
|
|
|
mariadb_release = WOVar.mariadb_ver
|
2023-08-13 12:32:17 +02:00
|
|
|
if mariadb_release == current_mysql_version:
|
2023-07-16 23:29:52 +02:00
|
|
|
Log.info(self, "You already have the latest "
|
|
|
|
|
"MariaDB version available")
|
|
|
|
|
return 0
|
|
|
|
|
|
2024-06-07 15:55:19 +02:00
|
|
|
WOFileUtils.rm(self, repo_path)
|
2018-11-13 21:55:59 +01:00
|
|
|
# Add MariaDB repo
|
2020-10-23 12:50:31 +02:00
|
|
|
pre_pref(self, WOVar.wo_mysql)
|
2018-11-13 21:55:59 +01:00
|
|
|
|
|
|
|
|
# Install MariaDB
|
|
|
|
|
|
2020-10-23 16:33:35 +02:00
|
|
|
Log.wait(self, "Updating apt-cache ")
|
2018-11-13 21:55:59 +01:00
|
|
|
WOAptGet.update(self)
|
2020-10-23 16:33:35 +02:00
|
|
|
Log.valide(self, "Updating apt-cache ")
|
|
|
|
|
Log.wait(self, "Upgrading MariaDB ")
|
2020-10-23 12:50:31 +02:00
|
|
|
WOAptGet.remove(self, ["mariadb-server"])
|
2018-11-13 21:55:59 +01:00
|
|
|
WOAptGet.auto_remove(self)
|
2020-10-23 12:50:31 +02:00
|
|
|
WOAptGet.install(self, WOVar.wo_mysql)
|
2020-10-28 12:25:09 +01:00
|
|
|
if not ci:
|
2020-10-28 11:45:30 +01:00
|
|
|
WOAptGet.dist_upgrade(self)
|
2020-10-28 11:11:01 +01:00
|
|
|
WOAptGet.auto_remove(self)
|
2022-09-25 13:29:40 +02:00
|
|
|
WOAptGet.auto_clean(self)
|
2020-10-23 16:33:35 +02:00
|
|
|
Log.valide(self, "Upgrading MariaDB ")
|
2020-10-23 12:50:31 +02:00
|
|
|
WOFileUtils.mvfile(
|
|
|
|
|
self, '/etc/mysql/my.cnf', '/etc/mysql/my.cnf.old')
|
|
|
|
|
WOFileUtils.create_symlink(
|
|
|
|
|
self, ['/etc/mysql/mariadb.cnf', '/etc/mysql/my.cnf'])
|
2020-10-23 16:33:35 +02:00
|
|
|
WOShellExec.cmd_exec(self, 'systemctl daemon-reload')
|
2020-10-27 11:25:14 +01:00
|
|
|
WOShellExec.cmd_exec(self, 'systemctl enable mariadb')
|
2020-10-23 16:33:35 +02:00
|
|
|
post_pref(self, WOVar.wo_mysql, [])
|
|
|
|
|
|
2024-06-08 14:27:16 +02:00
|
|
|
@expose(hide=True)
|
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>
2026-02-08 18:55:16 +01:00
|
|
|
def migrate_ols(self):
|
2024-06-08 14:27:16 +02:00
|
|
|
|
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>
2026-02-08 18:55:16 +01:00
|
|
|
# Add OLS repo
|
|
|
|
|
pre_pref(self, WOVar.wo_ols)
|
|
|
|
|
# Install/Upgrade OpenLiteSpeed
|
2024-06-08 14:27:16 +02:00
|
|
|
Log.wait(self, "Updating apt-cache ")
|
|
|
|
|
WOAptGet.update(self)
|
|
|
|
|
Log.valide(self, "Updating apt-cache ")
|
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>
2026-02-08 18:55:16 +01:00
|
|
|
Log.wait(self, "Upgrading OpenLiteSpeed ")
|
|
|
|
|
if WOAptGet.install(self, WOVar.wo_ols):
|
|
|
|
|
Log.valide(self, "Upgrading OpenLiteSpeed ")
|
2024-06-08 14:27:16 +02:00
|
|
|
else:
|
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>
2026-02-08 18:55:16 +01:00
|
|
|
Log.failed(self, "Upgrading OpenLiteSpeed ")
|
|
|
|
|
# Update vhost SSL configs to enable QUIC
|
2024-06-08 14:27:16 +02:00
|
|
|
allsites = getAllsites(self)
|
|
|
|
|
for site in allsites:
|
|
|
|
|
if not site:
|
|
|
|
|
pass
|
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>
2026-02-08 18:55:16 +01:00
|
|
|
vhost_conf = '{0}/{1}/vhconf.conf'.format(
|
|
|
|
|
WOVar.wo_ols_vhost_dir, site.sitename)
|
|
|
|
|
if os.path.exists(vhost_conf):
|
|
|
|
|
# Enable QUIC in vhost SSL config
|
|
|
|
|
if WOFileUtils.grepcheck(self, vhost_conf, 'enableQuic'):
|
|
|
|
|
WOFileUtils.searchreplace(
|
|
|
|
|
self, vhost_conf,
|
|
|
|
|
'enableQuic 0',
|
|
|
|
|
'enableQuic 1')
|
|
|
|
|
post_pref(self, WOVar.wo_ols, [])
|
2024-06-08 14:27:16 +02:00
|
|
|
|
2018-11-13 21:55:59 +01:00
|
|
|
@expose(hide=True)
|
|
|
|
|
def default(self):
|
2020-10-23 12:50:31 +02:00
|
|
|
pargs = self.app.pargs
|
2024-06-08 14:27:16 +02:00
|
|
|
if not pargs.mariadb and not pargs.nginx:
|
2018-11-13 21:55:59 +01:00
|
|
|
self.app.args.print_help()
|
2020-10-23 12:50:31 +02:00
|
|
|
if pargs.mariadb:
|
2020-10-28 11:45:30 +01:00
|
|
|
if WOVar.wo_distro == 'raspbian':
|
|
|
|
|
Log.error(self, "MariaDB upgrade is not available on Raspbian")
|
2019-10-02 13:13:32 +02:00
|
|
|
if WOVar.wo_mysql_host != "localhost":
|
2019-03-19 16:58:35 +01:00
|
|
|
Log.error(
|
|
|
|
|
self, "Remote MySQL server in use, skipping local install")
|
2018-11-13 21:55:59 +01:00
|
|
|
|
2024-06-07 16:51:53 +02:00
|
|
|
if WOMysql.mariadb_ping(self):
|
2018-11-13 21:55:59 +01:00
|
|
|
|
|
|
|
|
Log.info(self, "If your database size is big, "
|
|
|
|
|
"migration may take some time.")
|
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>
2026-02-08 18:55:16 +01:00
|
|
|
Log.info(self, "During migration non-cached parts of "
|
2018-11-13 21:55:59 +01:00
|
|
|
"your site may remain down")
|
2020-10-23 12:50:31 +02:00
|
|
|
if not 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")
|
2020-10-28 12:25:09 +01:00
|
|
|
if not pargs.ci:
|
|
|
|
|
self.migrate_mariadb()
|
|
|
|
|
else:
|
|
|
|
|
self.migrate_mariadb(ci=True)
|
2018-11-13 21:55:59 +01:00
|
|
|
else:
|
|
|
|
|
Log.error(self, "Your current MySQL is not alive or "
|
|
|
|
|
"you allready installed MariaDB")
|
2024-06-08 14:27:16 +02:00
|
|
|
if pargs.nginx:
|
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>
2026-02-08 18:55:16 +01:00
|
|
|
if os.path.isfile('/usr/local/lsws/bin/openlitespeed'):
|
|
|
|
|
self.migrate_ols()
|
2024-06-08 14:27:16 +02:00
|
|
|
else:
|
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>
2026-02-08 18:55:16 +01:00
|
|
|
Log.error(self, "OpenLiteSpeed is not installed")
|