diff --git a/.travis.yml b/.travis.yml index fcb405b..1d69e3a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,65 +1,66 @@ -sudo: required -dist: xenial - -language: bash - -notifications: - slack: wordops:MyZBNbI7JfhbAi3YyFckMdaa - -addons: - apt: - update: true - -git: - quiet: true - -before_install: - - rm -rf ~/.gnupg - -before_script: - - sudo rm -rf /etc/mysql - - sudo bash -c 'echo example.com > /etc/hostname' - - sudo apt-get -qq purge mysql* graphviz* redis* - - sudo apt-get -qq autoremove --purge - - unset LANG - - sudo apt-get install --assume-yes --quiet git python3-setuptools python3-dev python3-apt ccze tree - -script: - - lsb_release -a - - sudo bash -c 'echo -e "[user]\n\tname = abc\n\temail = root@localhost.com" > /home/travis/.gitconfig' - - sudo echo "Travis Banch = $TRAVIS_BRANCH" - - sed -i 's/# "nose"/"nose"/g' setup.py - - sed -i 's/# "coverage"/"coverage"/g' setup.py - - sed -i 's/# "Sphinx >= 1.0"/"Sphinx >= 1.0"/g' setup.py - - sudo bash install --travis - - sudo wo --help && sudo wo stack install && sudo wo stack install --proftpd - - sudo wo site create html.net --html && sudo wo site create php.com --php && sudo wo site create mysql.com --mysql && sudo wo site create proxy.com --proxy=127.0.0.1:3000 - - sudo wo site create wp1.com --wp && sudo wo site create wpsc1.net --wpsc && sudo wo site create wpfc1.com --wpfc - - sudo wo site create wpsc-php73.net --wpsc --php73 && sudo wo site create wpfc-php73.net --wpfc --php73 - - sudo wo site create wprocket.net --wprocket && sudo wo site create wprocket-php73.net --wprocket --php73 - - sudo wo site create wpce.net --wpce && sudo wo site create wpce-php73.net --wpce --php73 - - sudo wo site create wpredis.net --wpredis && sudo wo site create wpredis-php73.net --wpredis --php73 - - sudo wo site create wpsubdir1.com --wpsubdir && sudo wo site create wpsubdir-php73.com --wpsubdir --php73 - - - sudo wo site create wpsubdirwpsc1.com --wpsubdir --wpsc && sudo wo site create wpsubdirwpsc2.com --wpsubdir --wpfc && sudo wo site create wpsubdirwpsc1-php73.com --wpsubdir --wpsc --php73 && sudo wo site create wpsubdirwpsc2-php73.com --wpsubdir --wpfc --php73 - - sudo wo site create wpsubdomain1.com --wpsubdomain && sudo wo site create wpsubdomain1-php73.com --wpsubdomain --php73 && sudo wo site create wpsubdomainwpsc.org --wpsubdomain --wpsc && sudo wo site create wpsubdomainwpfc.org --wpsubdomain --wpfc && sudo wo site create wpsubdomainwpfc2.in --wpfc --wpsubdomain - - - sudo wo site create 1.com --html && sudo wo site create 2.com --php && sudo wo site create 3.com --mysql - - sudo wo site update 1.com --wp && sudo wo site update 2.com --php73 && sudo wo site update 3.com --php73 && sudo wo site update 1.com --wpfc && sudo wo site update 1.com --wpsc && sudo wo site update 1.com --wpredis - - sudo wp --allow-root --info - - sudo wo info - - sudo cat /etc/nginx/nginx.conf - - sudo tree -L 2 /etc/nginx - - sudo cat /etc/mysql/my.cnf - - sudo wo stack upgrade --nginx --force - - sudo wo stack upgrade --php --force - - sudo wo stack upgrade --netdata --force - - sudo wo stack upgrade --phpmyadmin --force - - sudo wo stack upgrade --composer --force - - sudo wo stack upgrade --dashboard --force - - sudo wo update --travis - - sudo wo stack status - - sudo tar -I pigz -cf wordops.tar.gz /var/log/wo - - curl --progress-bar --upload-file wordops.tar.gz https://transfer.vtbox.net/$(basename "wordops.tar.gz") && echo "" | sudo tee -a $HOME/.transfer.log && echo "" - - echo "yes" | sudo wo stack purge --all --force - - sudo bash install --purge +sudo: required +dist: xenial + +language: bash + +notifications: + slack: wordops:MyZBNbI7JfhbAi3YyFckMdaa + +addons: + apt: + update: true + +git: + quiet: true + +before_install: + - rm -rf ~/.gnupg + +before_script: + - sudo rm -rf /etc/mysql + - sudo bash -c 'echo example.com > /etc/hostname' + - sudo apt-get -qq purge mysql* graphviz* redis* + - sudo apt-get -qq autoremove --purge + - unset LANG + - sudo apt-get install --assume-yes --quiet git python3-setuptools python3-dev python3-apt ccze tree + +script: + - lsb_release -a + - sudo bash -c 'echo -e "[user]\n\tname = abc\n\temail = root@localhost.com" > /home/travis/.gitconfig' + - sudo echo "Travis Banch = $TRAVIS_BRANCH" + - sed -i 's/# "nose"/"nose"/g' setup.py + - sed -i 's/# "coverage"/"coverage"/g' setup.py + - sed -i 's/# "Sphinx >= 1.0"/"Sphinx >= 1.0"/g' setup.py + - sudo bash install --travis + - sudo wo --help && sudo wo stack install && sudo wo stack install --proftpd + - sudo wo site create html.net --html && sudo wo site create php.com --php && sudo wo site create mysql.com --mysql && sudo wo site create proxy.com --proxy=127.0.0.1:3000 + - sudo wo site create wp1.com --wp && sudo wo site create wpsc1.net --wpsc && sudo wo site create wpfc1.com --wpfc + - sudo wo site create wpsc-php73.net --wpsc --php73 && sudo wo site create wpfc-php73.net --wpfc --php73 + - sudo wo site create wprocket.net --wprocket && sudo wo site create wprocket-php73.net --wprocket --php73 + - sudo wo site create wpce.net --wpce && sudo wo site create wpce-php73.net --wpce --php73 + - sudo wo site create wpredis.net --wpredis && sudo wo site create wpredis-php73.net --wpredis --php73 + - sudo wo site create wpsubdir1.com --wpsubdir && sudo wo site create wpsubdir-php73.com --wpsubdir --php73 + + - sudo wo site create wpsubdirwpsc1.com --wpsubdir --wpsc && sudo wo site create wpsubdirwpsc2.com --wpsubdir --wpfc && sudo wo site create wpsubdirwpsc1-php73.com --wpsubdir --wpsc --php73 && sudo wo site create wpsubdirwpsc2-php73.com --wpsubdir --wpfc --php73 + - sudo wo site create wpsubdomain1.com --wpsubdomain && sudo wo site create wpsubdomain1-php73.com --wpsubdomain --php73 && sudo wo site create wpsubdomainwpsc.org --wpsubdomain --wpsc && sudo wo site create wpsubdomainwpfc.org --wpsubdomain --wpfc && sudo wo site create wpsubdomainwpfc2.in --wpfc --wpsubdomain + + - sudo wo site create 1.com --html && sudo wo site create 2.com --php && sudo wo site create 3.com --mysql + - sudo wo site update 1.com --wp && sudo wo site update 2.com --php73 && sudo wo site update 3.com --php73 && sudo wo site update 1.com --wpfc && sudo wo site update 1.com --wpsc && sudo wo site update 1.com --wpredis + - sudo wp --allow-root --info + - sudo wo info + - sudo cat /etc/nginx/nginx.conf + - sudo tree -L 2 /etc/nginx + - sudo tree -L 2 /var/www + - sudo cat /etc/mysql/my.cnf + - sudo wo stack upgrade --nginx --force + - sudo wo stack upgrade --php --force + - sudo wo stack upgrade --netdata --force + - sudo wo stack upgrade --phpmyadmin --force + - sudo wo stack upgrade --composer --force + - sudo wo stack upgrade --dashboard --force + - sudo wo update --travis + - sudo wo stack status + - sudo tar -I pigz -cf wordops.tar.gz /var/log/wo + - curl --progress-bar --upload-file wordops.tar.gz https://transfer.vtbox.net/$(basename "wordops.tar.gz") && echo "" | sudo tee -a $HOME/.transfer.log && echo "" + - echo "yes" | sudo wo stack purge --all --force + - sudo bash install --purge diff --git a/CHANGELOG.md b/CHANGELOG.md index 699ca7d..7f6dc8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ### v3.9.x - [Unreleased] +### v3.9.8.2 - 2019-08-20 + +#### Added + +- Additional cache expection for Easy Digital Downloads [PR #120](https://github.com/WordOps/WordOps/pull/120) +- Additional settings to support mobile with WP-Rocket +- Add the ability to block nginx configuration overwriting by adding a file .custom. Example with /etc/nginx/conf.d/webp.conf -> `touch /etc/nginx/conf.d/webp.conf.custom` +- If there is a custom file, WordOps will write the configuration in a file named fileconf.conf.orig to let users implement possible changes +- UFW minimal configuration during install. Can be disabled with the flag `-w`, `--wufw` or `--without-ufw`. Example : `wget -qO wo wops.cc && sudo bash wo -w` + +#### Fixed + +- WordOps internal database creation on servers running with custom setup + ### v3.9.8.1 - 2019-08-18 #### Added diff --git a/LICENSE b/LICENSE index 83f956d..5506b6f 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2018-2019 WordOps (https://wordops.net) +Copyright (c) 2018-2019 WordOps (https://github.com/WordOps/WordOps/graphs/contributors) Copyright (C) 2011-2017 EE Development Group (https://github.com/ee/ee/contributors) Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/install b/install index 30deb99..b127fed 100755 --- a/install +++ b/install @@ -9,7 +9,7 @@ # ------------------------------------------------------------------------- # wget -qO wo wops.cc && sudo bash wo # ------------------------------------------------------------------------- -# Version 3.9.8.1 - 2019-08-18 +# Version 3.9.8.2 - 2019-08-20 # ------------------------------------------------------------------------- # CONTENTS @@ -77,6 +77,9 @@ while [ "$#" -gt 0 ]; do --purge | --uninstall) wo_purge="y" ;; + -w | --wufw | --without-ufw) + ufw="n" + ;; *) # positional args ;; esac @@ -148,7 +151,9 @@ if [ -x /usr/local/bin/ee ]; then elif [ -x /usr/local/bin/wo ]; then wo_upgrade=1 fi - +if [ -z "$ufw" ]; then + ufw="y" +fi ### # 1 - Checking linux distro ### @@ -211,11 +216,15 @@ wo_install_dep() { locale-gen en # enable unattended upgades - cp /usr/share/unattended-upgrades/20auto-upgrades /etc/apt/apt.conf.d/20auto-upgrades + if [ ! -f /etc/apt/apt.conf.d/20auto-upgrades ]; then + cp /usr/share/unattended-upgrades/20auto-upgrades /etc/apt/apt.conf.d/20auto-upgrades + fi # set default ntp pools - sed -e 's/^#NTP=/NTP=time.cloudflare.com 0.ubuntu.pool.ntp.org 1.ubuntu.pool.ntp.org 2.ubuntu.pool.ntp.org 3.ubuntu.pool.ntp.org/' -i /etc/systemd/timesyncd.conf - # enable ntp - timedatectl set-ntp 1 + if ! grep -q "time.cloudflare.com" /etc/systemd/timesyncd.conf; then + sed -e 's/^#NTP=/NTP=time.cloudflare.com 0.ubuntu.pool.ntp.org 1.ubuntu.pool.ntp.org 2.ubuntu.pool.ntp.org 3.ubuntu.pool.ntp.org/' -i /etc/systemd/timesyncd.conf + # enable ntp + timedatectl set-ntp 1 + fi } >> "$wo_install_log" 2>&1 @@ -318,14 +327,14 @@ wo_sync_db() { fi fi - done + wo_webroot="/var/www/$site" - wo_webroot="/var/www/$site" - - # Import the configuration into the WordOps SQLite database - echo "INSERT INTO sites (sitename, site_type, cache_type, site_path, is_enabled, is_ssl, storage_fs, storage_db) + # Import the configuration into the WordOps SQLite database + echo "INSERT INTO sites (sitename, site_type, cache_type, site_path, is_enabled, is_ssl, storage_fs, storage_db) VALUES (\"$site\", \"$wo_site_current\", \"$wo_site_current_cache\", \"$wo_webroot\", \"$wo_site_status\", 0, 'ext4', 'mysql');" | sqlite3 /var/lib/wo/dbase.db + done + fi # echo "UPDATE sites SET php_version = REPLACE(php_version, '5.6', '7.2');" | sqlite3 /var/lib/wo/dbase.db @@ -401,9 +410,6 @@ wo_install_acme_sh() { /etc/letsencrypt/renewal/ # remove previous acme.sh folder rm -rf "$HOME/.acme.sh" - # create acme.sh.env file inlcuded in .bashrc to avoid error when logging in - mkdir -p "$HOME/.acme.sh" - echo '' > "$HOME/.acme.sh/acme.sh.env" # removing previous cronjob crontab -l | sed '/41 0 \* \* \* "\/root\/\.acme\.sh"\/acme.sh --cron --home "\/root\/\.acme\.sh" > \/dev\/null/d' | crontab - @@ -509,6 +515,7 @@ wo_upgrade_nginx() { [ -f /etc/nginx/htpasswd-ee ] && { mv /etc/nginx/htpasswd-ee /etc/nginx/htpasswd-wo; } sed -i "s/locations.conf/locations-wo.conf/" /etc/nginx/sites-available/* sed -i "s/locations-php7.conf/locations-wo.conf/" /etc/nginx/sites-available/* + sed -i "s/locations-php71.conf/locations-wo.conf/" /etc/nginx/sites-available/* sed -i "s/locations-php72.conf/locations-wo.conf/" /etc/nginx/sites-available/* sed -i "s/locations-php73.conf/locations-wo.conf/" /etc/nginx/sites-available/* sed -i 's/ssl on;/#ssl on;/' /var/www/*/conf/nginx/ssl.conf @@ -687,43 +694,73 @@ wo_uninstall() { wo_ufw_setup() { - CURRENT_SSH_PORT=$(grep "Port" /etc/ssh/sshd_config | awk -F " " '{print $2}') - + # get custom ssh port + if [ -f /etc/ssh/sshd_config ]; then + CURRENT_SSH_PORT=$(grep "Port" /etc/ssh/sshd_config | awk -F " " '{print $2}') + fi + # install ufw if needed if [ ! -d /etc/ufw ]; then apt-get install ufw -y fi # define firewall rules - - ufw logging low - ufw default allow outgoing - ufw default deny incoming - - # default ssh port - ufw allow 22 + if ! grep -q "LOGLEVEL=low" /etc/ufw/ufw.conf; then + ufw logging low + fi + if ! grep -q 'DEFAULT_OUTPUT_POLICY="ACCEPT"' /etc/default/ufw; then + ufw default allow outgoing + fi + if ! grep -q 'DEFAULT_INPUT_POLICY="DROP"' /etc/default/ufw; then + ufw default deny incoming + fi + if ! grep -q "\-\-dport 22 -j" /etc/ufw/user.rules; then + # default ssh port + ufw limit 22 + fi # custom ssh port if [ "$CURRENT_SSH_PORT" != "22" ]; then - ufw allow "$CURRENT_SSH_PORT" + if ! grep -q "\-\-dport $CURRENT_SSH_PORT -j" /etc/ufw/user.rules; then + ufw limit "$CURRENT_SSH_PORT" + fi fi - # dns - ufw allow 53 - # nginx - ufw allow http - ufw allow https + if ! grep -q "\-\-dport 80 -j" /etc/ufw/user.rules; then + # http + ufw allow http + fi + if ! grep -q "\-\-dport 443 -j" /etc/ufw/user.rules; then + # https + ufw allow https + fi # ntp - ufw allow 123 - - # wordops backend - ufw allow 22222 + if ! grep -q "\-\-dport 123 -j" /etc/ufw/user.rules; then + ufw allow 123 + fi + if ! grep -q "\-\-dport 22222 -j" /etc/ufw/user.rules; then + # wordops backend + ufw limit 22222 + fi # enable ufw - echo "y" | ufw enable + if [ -n "$CURRENT_SSH_PORT" ]; then + if ! grep -q "ENABLED=yes" /etc/ufw/ufw.conf; then + ufw --force enable + else + ufw reload + fi + fi -} >> $wo_install_log + # remove ufw from syslog + if [ -f /etc/rsyslog.d/20-ufw.conf ]; then + sed -i 's/\#\& stop/\& stop/' /etc/rsyslog.d/20-ufw.conf + service rsyslog restart + fi + +} \ + >> $wo_install_log ### # 4 - WO MAIN SETUP @@ -739,7 +776,7 @@ else # 1 - WO already installed if [ -x /usr/local/bin/wo ]; then if ! { - wo -v 2>&1 | grep -q "$wo_version_new" + wo -v 2>&1 | grep "$wo_version_new" } || [ "$wo_force_install" = "y" ]; then if [ -z "$wo_force_install" ]; then echo -e "Update WordOps to $wo_version_new (y/n): " && read -r WO_ANSWER @@ -754,10 +791,14 @@ else secure_wo_db | tee -ai $wo_install_log wo_lib_echo "Installing WordOps " | tee -ai $wo_install_log wo_clean | tee -ai $wo_install_log - if [ -f "$HOME/.gitconfig" ]; then - wo_install >> $wo_install_log 2>&1 + if [ "$wo_travis" = "y" ]; then + wo_install_travis | tee -ai $wo_install_log else - wo_install | tee -ai $wo_install_log + if [ -f "$HOME/.gitconfig" ]; then + wo_install >> $wo_install_log 2>&1 + else + wo_install | tee -ai $wo_install_log + fi fi if [ -z "$wo_preserve_config" ]; then if [ -n "$(command -v nginx)" ]; then @@ -772,6 +813,10 @@ else wo_lib_echo "Updating acme.sh" | tee -ai $wo_install_log wo_install_acme_sh | tee -ai $wo_install_log fi + if [ "$ufw" = "y" ]; then + wo_lib_echo "Configuring UFW" | tee -ai $wo_install_log + wo_ufw_setup | tee -ai $wo_install_log + fi wo_lib_echo "Applying Kernel tweaks" | tee -ai $wo_install_log wo_tweak_kernel | tee -ai $wo_install_log wo_lib_echo "Running post-install steps " | tee -ai $wo_install_log @@ -813,6 +858,10 @@ else wo_update_latest | tee -ai $wo_install_log wo_lib_echo "Installing acme.sh" | tee -ai $wo_install_log wo_install_acme_sh | tee -ai $wo_install_log + if [ "$ufw" = "y" ]; then + wo_lib_echo "Configuring UFW" | tee -ai $wo_install_log + wo_ufw_setup | tee -ai $wo_install_log + fi wo_lib_echo "Applying Kernel tweaks" | tee -ai $wo_install_log wo_tweak_kernel | tee -ai $wo_install_log wo_lib_echo "Running post-install steps " | tee -ai $wo_install_log @@ -833,6 +882,10 @@ else else wo_install | tee -ai $wo_install_log fi + if [ "$ufw" = "y" ]; then + wo_lib_echo "Configuring UFW" | tee -ai $wo_install_log + wo_ufw_setup | tee -ai $wo_install_log + fi wo_lib_echo "Applying Kernel tweaks" | tee -ai $wo_install_log wo_tweak_kernel | tee -ai $wo_install_log wo_lib_echo "Installing acme.sh" | tee -ai $wo_install_log diff --git a/setup.py b/setup.py index 12d2961..acd071d 100644 --- a/setup.py +++ b/setup.py @@ -57,7 +57,7 @@ if not os.path.isfile('/root/.gitconfig'): shutil.copy2(os.path.expanduser("~")+'/.gitconfig', '/root/.gitconfig') setup(name='wo', - version='3.9.8.1', + version='3.9.8.2', description=long_description, long_description=long_description, classifiers=[], @@ -87,6 +87,7 @@ setup(name='wo', 'sh', 'SQLAlchemy', 'requests', + 'distro', ], data_files=[('/etc/wo', ['config/wo.conf']), ('/etc/wo/plugins.d', conf), diff --git a/wo/cli/plugins/site.py b/wo/cli/plugins/site.py index 6eb1e76..8455856 100644 --- a/wo/cli/plugins/site.py +++ b/wo/cli/plugins/site.py @@ -1608,6 +1608,35 @@ class WOSiteUpdateController(CementBaseController): " `tail /var/log/wo/wordops.log` " "and please try again") return 1 + + elif ((oldcachetype in ['wpsc', 'basic', 'wpfc', 'wprocket', 'wpredis'] and + (data['wpce'])) or (oldsitetype == 'wp' and + data['multisite'] and + data['wpce'])): + try: + plugin_data_object = {"expires": 24, + "new_post": 1, + "new_comment": 0, + "webp": 0, + "clear_on_upgrade": 1, + "compress": 0, + "excl_ids": "", + "excl_regexp": "", + "excl_cookies": "", + "incl_attributes": "", + "minify_html": 1} + plugin_data = json.dumps(plugin_data_object) + setupwp_plugin( + self, 'cache-enabler', + 'cache-enabler', plugin_data, data) + except SiteError as e: + Log.debug(self, str(e)) + Log.info(self, Log.FAIL + "Update cache-enabler " + "settings failed. " + "Check the log for details:" + " `tail /var/log/wo/wordops.log` " + "and please try again") + return 1 else: try: plugin_data_object = {"log_level": "INFO", diff --git a/wo/cli/plugins/site_functions.py b/wo/cli/plugins/site_functions.py index dbb1db4..1e99a36 100644 --- a/wo/cli/plugins/site_functions.py +++ b/wo/cli/plugins/site_functions.py @@ -587,7 +587,20 @@ def setupwordpress(self, data): """Install Cache-Enabler""" if data['wpce']: - installwp_plugin(self, 'cache-enabler', data) + plugin_data_object = {"expires": 24, + "new_post": 1, + "new_comment": 0, + "webp": 0, + "clear_on_upgrade": 1, + "compress": 0, + "excl_ids": "", + "excl_regexp": "", + "excl_cookies": "", + "incl_attributes": "", + "minify_html": 1} + plugin_data = json.dumps(plugin_data_object) + setupwp_plugin(self, 'cache-enabler', 'cache-enabler', + plugin_data, data) wp_creds = dict(wp_user=wo_wp_user, wp_pass=wo_wp_pass, wp_email=wo_wp_email) @@ -656,12 +669,12 @@ def uninstallwp_plugin(self, plugin_name, data): Log.info(self, "Uninstalling plugin {0}, please wait..." .format(plugin_name)) try: - WOShellExec.cmd_exec(self, "php {0} plugin " + WOShellExec.cmd_exec(self, "{0} plugin " .format(WOVariables.wo_wpcli_path) + "--allow-root deactivate " "{0}".format(plugin_name)) - WOShellExec.cmd_exec(self, "php {0} plugin " + WOShellExec.cmd_exec(self, "{0} plugin " .format(WOVariables.wo_wpcli_path) + "--allow-root uninstall " "{0}".format(plugin_name)) @@ -678,7 +691,7 @@ def setupwp_plugin(self, plugin_name, plugin_option, plugin_data, data): if not data['multisite']: try: - WOShellExec.cmd_exec(self, "php {0} " + WOShellExec.cmd_exec(self, "{0} " .format(WOVariables.wo_wpcli_path) + "--allow-root option update " "{0} \'{1}\' --format=json" @@ -688,7 +701,7 @@ def setupwp_plugin(self, plugin_name, plugin_option, plugin_data, data): raise SiteError("plugin setup failed") else: try: - WOShellExec.cmd_exec(self, "php {0} " + WOShellExec.cmd_exec(self, "{0} " .format(WOVariables.wo_wpcli_path) + "--allow-root network meta update 1 " "{0} \'{1}\' --format=json" @@ -1224,16 +1237,16 @@ def site_url_https(self, domain): WOFileUtils.chdir(self, '{0}/htdocs/'.format(wo_site_webroot)) wo_siteurl = \ WOShellExec.cmd_exec_stdout(self, - "php {0} option get siteurl " + "{0} option get siteurl " .format(WOVariables.wo_wpcli_path) + "--allow-root --quiet") test_url = re.split(":", wo_siteurl) if not (test_url[0] == 'https'): try: - WOShellExec.cmd_exec(self, "php {0} option update siteurl " + WOShellExec.cmd_exec(self, "{0} option update siteurl " "\'https://{1}\' --allow-root".format( WOVariables.wo_wpcli_path, domain)) - WOShellExec.cmd_exec(self, "php {0} option update home " + WOShellExec.cmd_exec(self, "{0} option update home " "\'https://{1}\' --allow-root".format( WOVariables.wo_wpcli_path, domain)) except CommandExecutionError as e: diff --git a/wo/cli/plugins/stack_pref.py b/wo/cli/plugins/stack_pref.py index 559a6bc..77648f5 100644 --- a/wo/cli/plugins/stack_pref.py +++ b/wo/cli/plugins/stack_pref.py @@ -15,6 +15,7 @@ from wo.core.cron import WOCron from wo.core.extract import WOExtract from wo.core.fileutils import WOFileUtils from wo.core.git import WOGit +from wo.core.template import WOTemplate from wo.core.logging import Log from wo.core.mysql import WOMysql from wo.core.services import WOService @@ -146,46 +147,31 @@ def post_pref(self, apt_packages, packages): # Nginx configuration if set(WOVariables.wo_nginx).issubset(set(apt_packages)): # Nginx main configuration - if os.path.isfile('/etc/nginx/nginx.conf'): - if (WOVariables.wo_distro == 'ubuntu' or - WOVariables.wo_platform_codename == 'buster'): - data = dict(tls13=True) - else: - data = dict(tls13=False) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/nginx.conf') - wo_nginx = open('/etc/nginx/nginx.conf', - encoding='utf-8', mode='w') - self.app.render( - (data), 'nginx-core.mustache', out=wo_nginx) - wo_nginx.close() + ngxcnf = '/etc/nginx/conf.d' + ngxcom = '/etc/nginx/common' + ngxroot = '/var/www/' + if (WOVariables.wo_distro == 'ubuntu' or + WOVariables.wo_platform_codename == 'buster'): + data = dict(tls13=True) + else: + data = dict(tls13=False) + WOTemplate.tmpl_render(self, + '/etc/nginx/nginx.conf', + 'nginx-core.mustache', data) - if not os.path.isfile('/etc/nginx/conf.d/gzip.conf.disabled'): + if not os.path.isfile('{0}/gzip.conf.disabled'.format(ngxcnf)): data = dict() - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/conf.d/gzip.conf') - wo_nginx = open('/etc/nginx/conf.d/gzip.conf', - encoding='utf-8', mode='w') - self.app.render( - (data), 'gzip.mustache', out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, '{0}/gzip.conf'.format(ngxcnf), + 'gzip.mustache', data) - if not os.path.isfile('/etc/nginx/conf.d/brotli.conf'): - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/conf.d/brotli.conf.disabled') - wo_nginx = open('/etc/nginx/conf.d/brotli.conf.disabled', - encoding='utf-8', mode='w') - self.app.render( - (data), 'brotli.mustache', out=wo_nginx) - wo_nginx.close() + if not os.path.isfile('{0}/brotli.conf'.format(ngxcnf)): + WOTemplate.tmpl_render(self, + '{0}/brotli.conf.disabled' + .format(ngxcnf), + 'brotli.mustache', data) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/conf.d/tweaks.conf') - wo_nginx = open('/etc/nginx/conf.d/tweaks.conf', - encoding='utf-8', mode='w') - self.app.render( - (data), 'tweaks.mustache', out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, '{0}/tweaks.conf'.format(ngxcnf), + 'tweaks.mustache', data) # Fix for white screen death with NGINX PLUS if not WOFileUtils.grep(self, '/etc/nginx/fastcgi_params', @@ -198,54 +184,32 @@ def post_pref(self, apt_packages, packages): if os.path.isfile('/etc/nginx/nginx.conf'): data = dict(php="9000", debug="9001", php7="9070", debug7="9170") - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/conf.d/upstream.conf') - wo_nginx = open('/etc/nginx/conf.d/upstream.conf', - encoding='utf-8', mode='w') - self.app.render( - (data), 'upstream.mustache', out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render( + self, '{0}/upstream.conf'.format(ngxcnf), + 'upstream.mustache', data, overwrite=True) data = dict(phpconf=True if WOAptGet.is_installed(self, 'php7.2-fpm') else False) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/conf.d/stub_status.conf') - wo_nginx = open('/etc/nginx/conf.d/stub_status.conf', - encoding='utf-8', mode='w') - self.app.render( - (data), 'stub_status.mustache', out=wo_nginx) - wo_nginx.close() - + WOTemplate.tmpl_render(self, + '{0}/stub_status.conf'.format(ngxcnf), + 'stub_status.mustache', data) data = dict() - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/conf.d/webp.conf') - wo_nginx = open('/etc/nginx/conf.d/webp.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'webp.mustache', - out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, + '{0}/webp.conf'.format(ngxcnf), + 'webp.mustache', data) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/conf.d/cloudflare.conf') - wo_nginx = open('/etc/nginx/conf.d/cloudflare.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'cloudflare.mustache', - out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, + '{0}/cloudflare.conf'.format(ngxcnf), + 'cloudflare.mustache', data) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/conf.d/' - 'map-wp-fastcgi-cache.conf') - wo_nginx = open('/etc/nginx/conf.d/' - 'map-wp-fastcgi-cache.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'map-wp.mustache', - out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, + '{0}/map-wp-fastcgi-cache.conf'.format( + ngxcnf), + 'map-wp.mustache', data) # Setup Nginx common directory - if not os.path.exists('/etc/nginx/common'): + if not os.path.exists('{0}'.format(ngxcom)): Log.debug(self, 'Creating directory' '/etc/nginx/common') os.makedirs('/etc/nginx/common') @@ -254,138 +218,88 @@ def post_pref(self, apt_packages, packages): data = dict() # Common Configuration - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/locations-wo.conf') - wo_nginx = open('/etc/nginx/common/locations-wo.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'locations.mustache', - out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, + '{0}/locations-wo.conf' + .format(ngxcom), + 'locations.mustache', data) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wpsubdir.conf') - wo_nginx = open('/etc/nginx/common/wpsubdir.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wpsubdir.mustache', - out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, + '{0}/wpsubdir.conf' + .format(ngxcom), + 'wpsubdir.mustache', data) data = dict(upstream="php72") # PHP 7.2 conf - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/php72.conf') - wo_nginx = open('/etc/nginx/common/php72.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'php.mustache', - out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, + '{0}/php72.conf' + .format(ngxcom), + 'php.mustache', data) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/redis-php72.conf') - wo_nginx = open('/etc/nginx/common/redis-php72.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'redis.mustache', - out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, + '{0}/redis-php72.conf' + .format(ngxcom), + 'redis.mustache', data) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wpcommon-php72.conf') - wo_nginx = open('/etc/nginx/common/wpcommon-php72.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wpcommon.mustache', - out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, + '{0}/wpcommon-php72.conf' + .format(ngxcom), + 'wpcommon.mustache', data) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wpfc-php72.conf') - wo_nginx = open('/etc/nginx/common/wpfc-php72.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wpfc.mustache', - out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, + '{0}/wpfc-php72.conf' + .format(ngxcom), + 'wpfc.mustache', data) + WOTemplate.tmpl_render(self, + '{0}/wpsc-php72.conf' + .format(ngxcom), + 'wpsc.mustache', data) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wpsc-php72.conf') - wo_nginx = open('/etc/nginx/common/wpsc-php72.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wpsc.mustache', - out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, + '{0}/wprocket-php72.conf' + .format(ngxcom), + 'wprocket.mustache', data) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wprocket-php72.conf') - wo_nginx = open('/etc/nginx/common/wprocket-php72.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wprocket.mustache', - out=wo_nginx) - wo_nginx.close() - - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wpce-php72.conf') - wo_nginx = open('/etc/nginx/common/wpce-php72.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wpce.mustache', - out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, + '{0}/wpce-php72.conf' + .format(ngxcom), + 'wpce.mustache', data) # PHP 7.3 conf if os.path.isdir("/etc/nginx/common"): data = dict(upstream="php73") - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/php73.conf') - wo_nginx = open('/etc/nginx/common/php73.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'php.mustache', - out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, + '{0}/php73.conf' + .format(ngxcom), + 'php.mustache', data) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wpcommon-php73.conf') - wo_nginx = open('/etc/nginx/common/wpcommon-php73.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wpcommon.mustache', - out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, + '{0}/redis-php73.conf' + .format(ngxcom), + 'redis.mustache', data) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wpfc-php73.conf') - wo_nginx = open('/etc/nginx/common/wpfc-php73.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wpfc.mustache', - out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, + '{0}/wpcommon-php73.conf' + .format(ngxcom), + 'wpcommon.mustache', data) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wpsc-php73.conf') - wo_nginx = open('/etc/nginx/common/wpsc-php73.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wpsc.mustache', - out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, + '{0}/wpfc-php73.conf' + .format(ngxcom), + 'wpfc.mustache', data) + WOTemplate.tmpl_render(self, + '{0}/wpsc-php73.conf' + .format(ngxcom), + 'wpsc.mustache', data) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wprocket-php73.conf') - wo_nginx = open('/etc/nginx/common/wprocket-php73.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wprocket.mustache', - out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, + '{0}/wprocket-php73.conf' + .format(ngxcom), + 'wprocket.mustache', data) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/wpce-php73.conf') - wo_nginx = open('/etc/nginx/common/wpce-php73.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'wpce.mustache', - out=wo_nginx) - wo_nginx.close() - - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/redis-php73.conf') - wo_nginx = open('/etc/nginx/common/redis-php73.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'redis.mustache', - out=wo_nginx) - wo_nginx.close() + WOTemplate.tmpl_render(self, + '{0}/wpce-php73.conf' + .format(ngxcom), + 'wpce.mustache', data) with open("/etc/nginx/common/release", "w") as release_file: @@ -395,32 +309,19 @@ def post_pref(self, apt_packages, packages): # Following files should not be overwrited - if not os.path.isfile('/etc/nginx/common/acl.conf'): - data = dict(webroot=WOVariables.wo_webroot) - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/common/acl.conf') - wo_nginx = open('/etc/nginx/common/acl.conf', - encoding='utf-8', mode='w') - self.app.render((data), 'acl.mustache', - out=wo_nginx) - wo_nginx.close() - if not os.path.isfile('/etc/nginx/conf.d/blockips.conf'): - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/conf.d/blockips.conf') - wo_nginx = open('/etc/nginx/conf.d/blockips.conf', - encoding='utf-8', mode='w') - self.app.render( - (data), 'blockips.mustache', out=wo_nginx) - wo_nginx.close() - - if not os.path.isfile('/etc/nginx/conf.d/fastcgi.conf'): - Log.debug(self, 'Writting the nginx configuration to ' - 'file /etc/nginx/conf.d/fastcgi.conf') - wo_nginx = open('/etc/nginx/conf.d/fastcgi.conf', - encoding='utf-8', mode='w') - self.app.render( - (data), 'fastcgi.mustache', out=wo_nginx) - wo_nginx.close() + data = dict(webroot=ngxroot) + WOTemplate.tmpl_render(self, + '{0}/acl.conf' + .format(ngxcom), + 'acl.mustache', data, overwrite=False) + WOTemplate.tmpl_render(self, + '{0}/blockips.conf' + .format(ngxcnf), + 'blockips.mustache', data, overwrite=False) + WOTemplate.tmpl_render(self, + '{0}/fastcgi.conf' + .format(ngxcnf), + 'fastcgi.mustache', data, overwrite=False) # add redis cache format if not already done if (os.path.isfile("/etc/nginx/nginx.conf") and @@ -486,72 +387,74 @@ def post_pref(self, apt_packages, packages): '22222']) # Create log and cert folder and softlinks if not os.path.exists('{0}22222/logs' - .format(WOVariables.wo_webroot)): + .format(ngxroot)): Log.debug(self, "Creating directory " "{0}22222/logs " - .format(WOVariables.wo_webroot)) + .format(ngxroot)) os.makedirs('{0}22222/logs' - .format(WOVariables.wo_webroot)) + .format(ngxroot)) if not os.path.exists('{0}22222/cert' - .format(WOVariables.wo_webroot)): + .format(ngxroot)): Log.debug(self, "Creating directory " "{0}22222/cert" - .format(WOVariables.wo_webroot)) + .format(ngxroot)) os.makedirs('{0}22222/cert' - .format(WOVariables.wo_webroot)) + .format(ngxroot)) - if not os.path.exists('{0}22222/conf/nginx' - .format(WOVariables.wo_webroot)): + if not os.path.isdir('{0}22222/conf/nginx' + .format(ngxroot)): Log.debug(self, "Creating directory " "{0}22222/conf/nginx" - .format(WOVariables.wo_webroot)) + .format(ngxroot)) os.makedirs('{0}22222/conf/nginx' - .format(WOVariables.wo_webroot)) + .format(ngxroot)) - WOFileUtils.create_symlink(self, ['/var/log/nginx/' - '22222.access.log', - '{0}22222/' - 'logs/access.log' - .format(WOVariables.wo_webroot)] + WOFileUtils.create_symlink(self, + ['/var/log/nginx/' + '22222.access.log', + '{0}22222/' + 'logs/access.log' + .format(ngxroot)] ) - WOFileUtils.create_symlink(self, ['/var/log/nginx/' - '22222.error.log', - '{0}22222/' - 'logs/error.log' - .format(WOVariables.wo_webroot)] + WOFileUtils.create_symlink(self, + ['/var/log/nginx/' + '22222.error.log', + '{0}22222/' + 'logs/error.log' + .format(ngxroot)] ) try: WOShellExec.cmd_exec(self, "openssl genrsa -out " "{0}22222/cert/22222.key 2048" - .format(WOVariables.wo_webroot)) + .format(ngxroot)) WOShellExec.cmd_exec(self, "openssl req -new -batch " "-subj /commonName=localhost/ " "-key {0}22222/cert/22222.key " "-out {0}22222/cert/" "22222.csr" - .format(WOVariables.wo_webroot)) + .format(ngxroot)) WOFileUtils.mvfile(self, "{0}22222/cert/22222.key" - .format(WOVariables.wo_webroot), + .format(ngxroot), "{0}22222/cert/" "22222.key.org" - .format(WOVariables.wo_webroot)) + .format(ngxroot)) WOShellExec.cmd_exec(self, "openssl rsa -in " "{0}22222/cert/" "22222.key.org -out " "{0}22222/cert/22222.key" - .format(WOVariables.wo_webroot)) + .format(ngxroot)) WOShellExec.cmd_exec(self, "openssl x509 -req -days " "3652 -in {0}22222/cert/" "22222.csr -signkey {0}" "22222/cert/22222.key -out " "{0}22222/cert/22222.crt" - .format(WOVariables.wo_webroot)) + .format(ngxroot)) except CommandExecutionError as e: Log.debug(self, "{0}".format(e)) @@ -560,7 +463,7 @@ def post_pref(self, apt_packages, packages): "certificate for 22222") if not os.path.isfile('{0}22222/conf/nginx/ssl.conf' - .format(WOVariables.wo_webroot)): + .format(ngxroot)): with open("/var/www/22222/conf/nginx/" "ssl.conf", "a") as php_file: @@ -646,16 +549,21 @@ def post_pref(self, apt_packages, packages): "\"$http_user_agent\"';\n") if set(WOVariables.wo_php).issubset(set(apt_packages)): + 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/') os.makedirs('/var/log/php/7.2/') - # Parse etc/php/7.2/fpm/php.ini + if not os.path.isfile('/etc/php/7.2/fpm/php.ini.orig'): + WOFileUtils.copyfile(self, '/etc/php/7.2/fpm/php.ini', + '/etc/php/7.2/fpm/php.ini.orig') + + # Parse etc/php/7.2/fpm/php.ini config = configparser.ConfigParser() Log.debug(self, "configuring php file " "/etc/php/7.2/fpm/php.ini") - config.read('/etc/php/7.2/fpm/php.ini') + config.read('/etc/php/7.2/fpm/php.ini.orig') config['PHP']['expose_php'] = 'Off' config['PHP']['post_max_size'] = '100M' config['PHP']['upload_max_filesize'] = '100M' @@ -688,10 +596,13 @@ def post_pref(self, apt_packages, packages): self.app.render((data), 'php-fpm.mustache', out=wo_php_fpm) wo_php_fpm.close() + if not os.path.isfile('/etc/php/7.2/fpm/pool.d/www.conf.orig'): + WOFileUtils.copyfile(self, '/etc/php/7.2/fpm/pool.d/www.conf', + '/etc/php/7.2/fpm/pool.d/www.conf.orig') # Parse /etc/php/7.2/fpm/pool.d/www.conf config = configparser.ConfigParser() config.read_file(codecs.open('/etc/php/7.2/fpm/' - 'pool.d/www.conf', + 'pool.d/www.conf.orig', "r", "utf8")) config['www']['ping.path'] = '/ping' config['www']['pm.status_path'] = '/status' @@ -773,35 +684,35 @@ def post_pref(self, apt_packages, packages): # PHP and Debug pull configuration if not os.path.exists('{0}22222/htdocs/fpm/status/' - .format(WOVariables.wo_webroot)): + .format(ngxroot)): Log.debug(self, 'Creating directory ' '{0}22222/htdocs/fpm/status/ ' - .format(WOVariables.wo_webroot)) + .format(ngxroot)) os.makedirs('{0}22222/htdocs/fpm/status/' - .format(WOVariables.wo_webroot)) + .format(ngxroot)) open('{0}22222/htdocs/fpm/status/debug72' - .format(WOVariables.wo_webroot), + .format(ngxroot), encoding='utf-8', mode='a').close() open('{0}22222/htdocs/fpm/status/php72' - .format(WOVariables.wo_webroot), + .format(ngxroot), encoding='utf-8', mode='a').close() # Write info.php if not os.path.exists('{0}22222/htdocs/php/' - .format(WOVariables.wo_webroot)): + .format(ngxroot)): Log.debug(self, 'Creating directory ' '{0}22222/htdocs/php/ ' - .format(WOVariables.wo_webroot)) + .format(ngxroot)) os.makedirs('{0}22222/htdocs/php' - .format(WOVariables.wo_webroot)) + .format(ngxroot)) with open("{0}22222/htdocs/php/info.php" - .format(WOVariables.wo_webroot), + .format(ngxroot), encoding='utf-8', mode='w') as myfile: myfile.write("") WOFileUtils.chown(self, "{0}22222/htdocs" - .format(WOVariables.wo_webroot), + .format(ngxroot), WOVariables.wo_php_user, WOVariables.wo_php_user, recursive=True) @@ -810,16 +721,21 @@ def post_pref(self, apt_packages, packages): # PHP7.3 configuration if set(WOVariables.wo_php73).issubset(set(apt_packages)): + ngxroot = '/var/www/' # Create log directories if not os.path.exists('/var/log/php/7.3/'): Log.debug(self, 'Creating directory /var/log/php/7.3/') os.makedirs('/var/log/php/7.3/') + if not os.path.isfile('/etc/php/7.3/fpm/php.ini.orig'): + WOFileUtils.copyfile(self, '/etc/php/7.3/fpm/php.ini', + '/etc/php/7.3/fpm/php.ini.orig') + # Parse etc/php/7.3/fpm/php.ini config = configparser.ConfigParser() Log.debug(self, "configuring php file /etc/php/7.3/" "fpm/php.ini") - config.read('/etc/php/7.3/fpm/php.ini') + config.read('/etc/php/7.3/fpm/php.ini.orig') config['PHP']['expose_php'] = 'Off' config['PHP']['post_max_size'] = '100M' config['PHP']['upload_max_filesize'] = '100M' @@ -853,9 +769,12 @@ def post_pref(self, apt_packages, packages): wo_php_fpm.close() # Parse /etc/php/7.3/fpm/pool.d/www.conf + if not os.path.isfile('/etc/php/7.3/fpm/pool.d/www.conf.orig'): + WOFileUtils.copyfile(self, '/etc/php/7.3/fpm/pool.d/www.conf', + '/etc/php/7.3/fpm/pool.d/www.conf.orig') config = configparser.ConfigParser() config.read_file(codecs.open('/etc/php/7.3/fpm/' - 'pool.d/www.conf', + 'pool.d/www.conf.orig', "r", "utf8")) config['www']['ping.path'] = '/ping' config['www']['pm.status_path'] = '/status' @@ -937,35 +856,35 @@ def post_pref(self, apt_packages, packages): # PHP and Debug pull configuration if not os.path.exists('{0}22222/htdocs/fpm/status/' - .format(WOVariables.wo_webroot)): + .format(ngxroot)): Log.debug(self, 'Creating directory ' '{0}22222/htdocs/fpm/status/ ' - .format(WOVariables.wo_webroot)) + .format(ngxroot)) os.makedirs('{0}22222/htdocs/fpm/status/' - .format(WOVariables.wo_webroot)) + .format(ngxroot)) open('{0}22222/htdocs/fpm/status/debug73' - .format(WOVariables.wo_webroot), + .format(ngxroot), encoding='utf-8', mode='a').close() open('{0}22222/htdocs/fpm/status/php73' - .format(WOVariables.wo_webroot), + .format(ngxroot), encoding='utf-8', mode='a').close() # Write info.php if not os.path.exists('{0}22222/htdocs/php/' - .format(WOVariables.wo_webroot)): + .format(ngxroot)): Log.debug(self, 'Creating directory ' '{0}22222/htdocs/php/ ' - .format(WOVariables.wo_webroot)) + .format(ngxroot)) os.makedirs('{0}22222/htdocs/php' - .format(WOVariables.wo_webroot)) + .format(ngxroot)) with open("{0}22222/htdocs/php/info.php" - .format(WOVariables.wo_webroot), + .format(ngxroot), encoding='utf-8', mode='w') as myfile: myfile.write("") WOFileUtils.chown(self, "{0}22222/htdocs" - .format(WOVariables.wo_webroot), + .format(ngxroot), WOVariables.wo_php_user, WOVariables.wo_php_user, recursive=True) @@ -1195,7 +1114,7 @@ def post_pref(self, apt_packages, packages): WOService.reload_service(self, 'proftpd') # Redis configuration - if set(["redis-server"]).issubset(set(apt_packages)): + if set(WOVariables.wo_redis).issubset(set(apt_packages)): # set redis.conf parameter # set maxmemory 10% for ram below 512MB and 20% for others # set maxmemory-policy allkeys-lru diff --git a/wo/cli/plugins/stack_upgrade.py b/wo/cli/plugins/stack_upgrade.py index d9b1e85..7fa7236 100644 --- a/wo/cli/plugins/stack_upgrade.py +++ b/wo/cli/plugins/stack_upgrade.py @@ -149,12 +149,7 @@ class WOStackUpgradeController(CementBaseController): "releases/download/v{0}/wordops-dashboard.tar.gz" .format(WOVariables.wo_dashboard), "/var/lib/wo/tmp/wo-dashboard.tar.gz", - "WordOps Dashboard"], - ["https://github.com/soerennb/" - "extplorer/archive/v{0}.tar.gz" - .format(WOVariables.wo_extplorer), - "/var/lib/wo/tmp/extplorer.tar.gz", - "eXtplorer"]] + "WordOps Dashboard"]] if pargs.phpmyadmin: if os.path.isdir('/var/www/22222/htdocs/db/pma'): @@ -177,95 +172,94 @@ class WOStackUpgradeController(CementBaseController): else: Log.error(self, "Composer isn't installed") - if len(packages) or len(apt_packages): - if len(apt_packages): - Log.info(self, "Your site may be down for few seconds if " - "you are upgrading Nginx, PHP-FPM, MariaDB or Redis") - # Check prompt - if ((not pargs.no_prompt) and (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") - Log.info(self, "Updating APT packages, please wait...") - # apt-get update - WOAptGet.update(self) - if set(WOVariables.wo_php).issubset(set(apt_packages)): - WOAptGet.remove(self, ['php7.2-fpm'], - auto=False, purge=True) - if set(WOVariables.wo_php73).issubset(set(apt_packages)): - WOAptGet.remove(self, ['php7.3-fpm'], - auto=False, purge=True) - # Update packages - WOAptGet.install(self, apt_packages) - post_pref(self, apt_packages, empty_packages) - # Post Actions after package updates + if len(apt_packages): + Log.info(self, "Your site may be down for few seconds if " + "you are upgrading Nginx, PHP-FPM, MariaDB or Redis") + # Check prompt + if ((not pargs.no_prompt) and (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") + Log.info(self, "Updating APT packages, please wait...") + # apt-get update + WOAptGet.update(self) + if set(WOVariables.wo_php).issubset(set(apt_packages)): + WOAptGet.remove(self, ['php7.2-fpm'], + auto=False, purge=True) + if set(WOVariables.wo_php73).issubset(set(apt_packages)): + WOAptGet.remove(self, ['php7.3-fpm'], + auto=False, purge=True) + # Update packages + WOAptGet.install(self, apt_packages) + post_pref(self, apt_packages, empty_packages) + # Post Actions after package updates - if len(packages): - if pargs.wpcli: - WOFileUtils.rm(self, '/usr/local/bin/wp') + if len(packages): + if pargs.wpcli: + WOFileUtils.rm(self, '/usr/local/bin/wp') - if pargs.netdata: - WOFileUtils.rm(self, '/var/lib/wo/tmp/kickstart.sh') + if pargs.netdata: + WOFileUtils.rm(self, '/var/lib/wo/tmp/kickstart.sh') - if pargs.dashboard: - WOFileUtils.rm(self, '/var/www/22222/htdocs/index.php') + if pargs.dashboard: + WOFileUtils.rm(self, '/var/www/22222/htdocs/index.php') - Log.debug(self, "Downloading following: {0}".format(packages)) - WODownload.download(self, packages) + Log.debug(self, "Downloading following: {0}".format(packages)) + WODownload.download(self, packages) - if pargs.wpcli: - WOFileUtils.chmod(self, "/usr/local/bin/wp", 0o775) + if pargs.wpcli: + WOFileUtils.chmod(self, "/usr/local/bin/wp", 0o775) - if pargs.netdata: - Log.info(self, "Upgrading Netdata, please wait...") - WOShellExec.cmd_exec(self, "/bin/bash /var/lib/wo/tmp/" - "kickstart.sh " - "--dont-wait") + if pargs.netdata: + Log.info(self, "Upgrading Netdata, please wait...") + WOShellExec.cmd_exec(self, "/bin/bash /var/lib/wo/tmp/" + "kickstart.sh " + "--dont-wait") - if pargs.dashboard: - Log.debug(self, "Extracting wo-dashboard.tar.gz " - "to location {0}22222/htdocs/" - .format(WOVariables.wo_webroot)) - WOExtract.extract(self, '/var/lib/wo/tmp/' - 'wo-dashboard.tar.gz', - '{0}22222/htdocs' - .format(WOVariables.wo_webroot)) - WOFileUtils.chown(self, "{0}22222/htdocs" - .format(WOVariables.wo_webroot), - WOVariables.wo_php_user, - WOVariables.wo_php_user, recursive=True) + if pargs.dashboard: + Log.debug(self, "Extracting wo-dashboard.tar.gz " + "to location {0}22222/htdocs/" + .format(WOVariables.wo_webroot)) + WOExtract.extract(self, '/var/lib/wo/tmp/' + 'wo-dashboard.tar.gz', + '{0}22222/htdocs' + .format(WOVariables.wo_webroot)) + WOFileUtils.chown(self, "{0}22222/htdocs" + .format(WOVariables.wo_webroot), + WOVariables.wo_php_user, + WOVariables.wo_php_user, recursive=True) - if pargs.composer: - Log.info(self, "Upgrading Composer, please wait...") - WOShellExec.cmd_exec(self, "php -q /var/lib/wo" - "/tmp/composer-install " - "--install-dir=/var/lib/wo/tmp/") - shutil.copyfile('/var/lib/wo/tmp/composer.phar', - '/usr/local/bin/composer') - WOFileUtils.chmod(self, "/usr/local/bin/composer", 0o775) + if pargs.composer: + Log.info(self, "Upgrading Composer, please wait...") + WOShellExec.cmd_exec(self, "php -q /var/lib/wo" + "/tmp/composer-install " + "--install-dir=/var/lib/wo/tmp/") + shutil.copyfile('/var/lib/wo/tmp/composer.phar', + '/usr/local/bin/composer') + WOFileUtils.chmod(self, "/usr/local/bin/composer", 0o775) - if pargs.phpmyadmin: - Log.info(self, "Upgrading phpMyAdmin, please wait...") - WOExtract.extract(self, '/var/lib/wo/tmp/pma.tar.gz', - '/var/lib/wo/tmp/') - shutil.copyfile(('{0}22222/htdocs/db/pma' - '/config.inc.php' - .format(WOVariables.wo_webroot)), - ('/var/lib/wo/tmp/phpMyAdmin-{0}' - '-all-languages/config.inc.php' - .format(WOVariables.wo_phpmyadmin)) - ) - WOFileUtils.rm(self, '{0}22222/htdocs/db/pma' - .format(WOVariables.wo_webroot)) - shutil.move('/var/lib/wo/tmp/phpMyAdmin-{0}' - '-all-languages/' - .format(WOVariables.wo_phpmyadmin), - '{0}22222/htdocs/db/pma/' - .format(WOVariables.wo_webroot)) - WOFileUtils.chown(self, "{0}22222/htdocs" - .format(WOVariables.wo_webroot), - WOVariables.wo_php_user, - WOVariables.wo_php_user, recursive=True) + if pargs.phpmyadmin: + Log.info(self, "Upgrading phpMyAdmin, please wait...") + WOExtract.extract(self, '/var/lib/wo/tmp/pma.tar.gz', + '/var/lib/wo/tmp/') + shutil.copyfile(('{0}22222/htdocs/db/pma' + '/config.inc.php' + .format(WOVariables.wo_webroot)), + ('/var/lib/wo/tmp/phpMyAdmin-{0}' + '-all-languages/config.inc.php' + .format(WOVariables.wo_phpmyadmin)) + ) + WOFileUtils.rm(self, '{0}22222/htdocs/db/pma' + .format(WOVariables.wo_webroot)) + shutil.move('/var/lib/wo/tmp/phpMyAdmin-{0}' + '-all-languages/' + .format(WOVariables.wo_phpmyadmin), + '{0}22222/htdocs/db/pma/' + .format(WOVariables.wo_webroot)) + WOFileUtils.chown(self, "{0}22222/htdocs" + .format(WOVariables.wo_webroot), + WOVariables.wo_php_user, + WOVariables.wo_php_user, recursive=True) Log.info(self, "Successfully updated packages") else: diff --git a/wo/cli/templates/map-wp.mustache b/wo/cli/templates/map-wp.mustache index 4a663b8..22e62cb 100644 --- a/wo/cli/templates/map-wp.mustache +++ b/wo/cli/templates/map-wp.mustache @@ -54,6 +54,12 @@ map $request_uri $uri_no_cache { "~*/resetpass/" 1; } +map $http_user_agent $mobile_prefix { + default ""; + "~*iphone" -mobile; + "~*android" -mobile; +} + # do not cache requests with query strings map $is_args $query_no_cache { default 1; diff --git a/wo/cli/templates/wpce.mustache b/wo/cli/templates/wpce.mustache index e345a2b..f907397 100644 --- a/wo/cli/templates/wpce.mustache +++ b/wo/cli/templates/wpce.mustache @@ -1,4 +1,4 @@ -# WPCE NGINX CONFIGURATION - WO v3.9.7 +# WPCE NGINX CONFIGURATION - WO v3.9.8 # DO NOT MODIFY, ALL CHANGES WILL BE LOST AFTER AN WordOps (wo) UPDATE # $cache_uri variable set in /etc/nginx/conf.d/map-wp.conf # Use cached or actual file if they exists, Otherwise pass request to WordPress @@ -10,10 +10,10 @@ location ~ \.php$ { include fastcgi_params; fastcgi_pass {{upstream}}; } -location ~* /cache/cache-enabler/\.html$ { +location ~ /wp-content/cache/cache-enabler/.*html$ { etag on; add_header Vary "Accept-Encoding, Cookie"; access_log off; log_not_found off; expires 10h; -} +} \ No newline at end of file diff --git a/wo/cli/templates/wprocket.mustache b/wo/cli/templates/wprocket.mustache index 8e01d9d..d2be90d 100644 --- a/wo/cli/templates/wprocket.mustache +++ b/wo/cli/templates/wprocket.mustache @@ -1,16 +1,16 @@ -# WPROCKET NGINX CONFIGURATION - WO v3.9.7 +# WPROCKET NGINX CONFIGURATION - WO v3.9.8 # DO NOT MODIFY, ALL CHANGES WILL BE LOST AFTER AN WordOps (wo) UPDATE # $cache_uri variable set in /etc/nginx/conf.d/map-wp.conf # Use cached or actual file if they exists, Otherwise pass request to WordPress location / { - try_files /wp-content/cache/wp-rocket/$http_host/$cache_uri/index$https_prefix.html $uri $uri/ /index.php$is_args$args; + try_files /wp-content/cache/wp-rocket/$http_host/$cache_uri/index${mobile_prefix}${https_prefix}.html /wp-content/cache/wp-rocket/$http_host/$cache_uri/index${https_prefix}.html $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { try_files $uri =404; include fastcgi_params; - fastcgi_pass {{upstream}}; + fastcgi_pass {{upstream}}; } -location ~* /cache/wp-rocket/\.html$ { +location ~ /wp-content/cache/wp-rocket/.*html$ { etag on; add_header Vary "Accept-Encoding, Cookie"; access_log off; diff --git a/wo/core/template.py b/wo/core/template.py index cacad75..a39200b 100644 --- a/wo/core/template.py +++ b/wo/core/template.py @@ -1,27 +1,38 @@ -from wo.core.logging import Log -import os - -""" -Render Templates -""" - - -class WOTemplate(): - def tmpl_render(self, fileconf, template, data, overwrite=False): - if overwrite: - Log.debug(self, 'Writting the configuration to ' - 'file {0}'.format(fileconf)) - wo_template = open('{0}'.format(fileconf), - encoding='utf-8', mode='w') - self.app.render((data), '{0}'.format(template), - out=wo_template) - wo_template.close() - else: - if not os.path.isfile('{0}'.format(fileconf)): - Log.debug(self, 'Writting the configuration to ' - 'file {0}'.format(fileconf)) - wo_template = open('{0}'.format(fileconf), - encoding='utf-8', mode='w') - self.app.render((data), '{0}'.format(template), - out=wo_template) - wo_template.close() +from wo.core.logging import Log +import os + +""" +Render Templates +""" + + +class WOTemplate(): + def tmpl_render(self, fileconf, template, data, overwrite=True): + data = dict(data) + if (not overwrite): + if not os.path.isfile('{0}'.format(fileconf)): + Log.debug(self, 'Writting the configuration to ' + 'file {0}'.format(fileconf)) + wo_template = open('{0}'.format(fileconf), + encoding='utf-8', mode='w') + self.app.render((data), '{0}'.format(template), + out=wo_template) + wo_template.close() + else: + if (not os.path.isfile('{0}.custom' + .format(fileconf))): + Log.debug(self, 'Writting the configuration to ' + 'file {0}'.format(fileconf)) + wo_template = open('{0}'.format(fileconf), + encoding='utf-8', mode='w') + self.app.render((data), '{0}'.format(template), + out=wo_template) + wo_template.close() + else: + Log.debug(self, 'Writting the configuration to ' + 'file {0}.orig'.format(fileconf)) + wo_template = open('{0}.orig'.format(fileconf), + encoding='utf-8', mode='w') + self.app.render((data), '{0}'.format(template), + out=wo_template) + wo_template.close() diff --git a/wo/core/variables.py b/wo/core/variables.py index 7069670..68b9080 100644 --- a/wo/core/variables.py +++ b/wo/core/variables.py @@ -1,5 +1,5 @@ """WordOps core variable module""" -import platform +import distro import socket import configparser import os @@ -10,7 +10,7 @@ class WOVariables(): """Intialization of core variables""" # WordOps version - wo_version = "3.9.8.1" + wo_version = "3.9.8.2" # WordOps packages versions wo_wp_cli = "2.2.0" wo_adminer = "4.7.2" @@ -25,11 +25,12 @@ class WOVariables(): wo_date = datetime.datetime.now().strftime('%d%b%Y%H%M%S') # WordOps core variables - wo_distro = os.popen("/usr/bin/lsb_release -si " - "| tr -d \'\\n\'").read().lower() - wo_platform_version = platform.linux_distribution()[1] - wo_platform_codename = os.popen( - "/usr/bin/lsb_release -sc | tr -d \'\\n\'").read() + wo_distro = distro.linux_distribution( + full_distribution_name=False)[0].lower() + wo_platform_version = distro.linux_distribution( + full_distribution_name=False)[1].lower() + wo_platform_codename = distro.linux_distribution( + full_distribution_name=False)[2].lower() # Get timezone of system if os.path.isfile('/etc/timezone'):