diff --git a/.travis.yml b/.travis.yml
index b630e9c..341ef4d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -33,7 +33,6 @@ script:
- sudo apt-get install -qq --force-yes git python3-setuptools python3-dev python3-apt ccze tree
- sudo bash install -b $TRAVIS_BRANCH --travis
- sudo wo --help && sudo wo stack install && sudo wo stack install --proftpd
- - sudo wo stack upgrade --netdata --no-prompt
- 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
@@ -49,5 +48,8 @@ script:
- sudo wo info
- sudo tree -L 2 /etc/nginx
- sudo cat /var/www/wp1.com/wp-config.php
+ - sudo wo stack upgrade --netdata --no-prompt
+ - sudo wo stack upgrade --phpmyadmin --no-prompt
+ - sudo wo stack upgrade --composer --no-prompt
- sudo wo update --travis
- sudo wo stack status
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c22e222..52abb6a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,12 +8,22 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
### v3.9.x - [Unreleased]
+### v3.9.6.2 - 2019-07-23
+
+#### Fixed
+
+- phpMyAdmin archive download link archive
+- Arguments `--letsencrypt=clean/purge`
+- Incorrect directory removal during stack upgrade
+
+
### v3.9.6.1 - 2019-07-23
#### Fixed
- Typo in `--letsencrypt=subdomain`
- phpMyAdmin upgrade archive extraction
+- Error in the command `wo update`. Please `wo update --beta` as workaround
### v3.9.6 - 2019-07-20
diff --git a/config/bash_completion.d/wo_auto.rc b/config/bash_completion.d/wo_auto.rc
index ec38270..b8facb7 100644
--- a/config/bash_completion.d/wo_auto.rc
+++ b/config/bash_completion.d/wo_auto.rc
@@ -165,7 +165,7 @@ _wo_complete()
"update")
COMPREPLY=( $(compgen \
- -W "--password --php --php73 --mysql --wp --wpsubdir --wpsubdomain --wpfc --wpsc --wpredis --letsencrypt --letsencrypt=subdomain --letsencrypt=off --letsencrypt=renew -le -le=subdomain -le=wildcard --dns --dns=dns_cf --dns=dns_do" \
+ -W "--password --php --php73 --mysql --wp --wpsubdir --wpsubdomain --wpfc --wpsc --wpredis --letsencrypt --letsencrypt=subdomain --letsencrypt=off --letsencrypt=renew --letsencrypt=clean -le -le=subdomain -le=wildcard --dns --dns=dns_cf --dns=dns_do" \
-- $cur) )
;;
"delete")
@@ -213,7 +213,7 @@ _wo_complete()
if [ ${COMP_WORDS[2]} == "create" ]; then
retlist="--wp --wpsc --wpfc --user --email --pass --wpredis --letsencrypt -le --letsencrypt=subdomain --letsencrypt=wildcard --dns --dns=dns_cf --dns=dns_do --php73"
elif [ ${COMP_WORDS[2]} == "update" ]; then
- retlist="--wp --wpfc --wpsc --php73 --php73=off --wpredis --letsencrypt --letsencrypt=subdomain --letsencrypt=wildcard --letsencrypt=off --letsencrypt=renew -le -le=off -le=wildcard --dns --dns=dns_cf --dns=dns_do"
+ retlist="--wp --wpfc --wpsc --php73 --php73=off --wpredis --letsencrypt --letsencrypt=subdomain --letsencrypt=wildcard --letsencrypt=off --letsencrypt=renew --letsencrypt=clean -le -le=off -le=wildcard --dns --dns=dns_cf --dns=dns_do"
else
retlist=""
fi
@@ -232,7 +232,7 @@ _wo_complete()
if [ ${COMP_WORDS[2]} == "create" ]; then
retlist="--wpsc --wpfc --user --email --pass --wpredis --letsencrypt --letsencrypt=subdomain --letsencrypt=wildcard -le --php73 --dns --dns=dns_cf --dns=dns_do"
elif [ ${COMP_WORDS[2]} == "update" ]; then
- retlist="--wpfc --wpsc --php73 --php73=off --wpredis --letsencrypt --letsencrypt=subdomain --letsencrypt=wildcard --letsencrypt=off --letsencrypt=renew -le --dns --dns=dns_cf --dns=dns_do"
+ retlist="--wpfc --wpsc --php73 --php73=off --wpredis --letsencrypt --letsencrypt=subdomain --letsencrypt=wildcard --letsencrypt=off --letsencrypt=renew --letsencrypt=clean -le --dns --dns=dns_cf --dns=dns_do"
else
retlist=""
fi
@@ -261,7 +261,7 @@ _wo_complete()
"--wpredis" | "--wpfc")
if [ ${COMP_WORDS[2]} == "update" ]; then
- retlist="--password --php --php73 --mysql --wp --wpsubdir --wpsubdomain --wpfc --wpsc --wpredis --letsencrypt --letsencrypt=subdomain --letsencrypt=off --letsencrypt=renew -le --dns --dns=dns_cf --dns=dns_do"
+ retlist="--password --php --php73 --mysql --wp --wpsubdir --wpsubdomain --wpfc --wpsc --wpredis --letsencrypt --letsencrypt=subdomain --letsencrypt=off --letsencrypt=renew --letsencrypt=clean -le --dns --dns=dns_cf --dns=dns_do"
else
retlist=""
fi
diff --git a/docs/wo.8 b/docs/wo.8
index 97e48b8..6ad30fa 100644
--- a/docs/wo.8
+++ b/docs/wo.8
@@ -1,314 +1,314 @@
-.TH wo 8 "WordOps (wo) version: 3.3.8" "Sep 10,2015" "WordOps"
-.SH NAME
-.B WordOps (wo)
-\- Manage Nginx Based Websites.
-.SH SYNOPSIS
-wo [ --version | --help | info | stack | site | debug | update | clean | import_slow_log | log | secure | sync | maintenance ]
-.TP
-wo stack [ install | remove | purge | migrate | upgrade] [ --web | --all | --nginx | --php | --php73 | --mysql | --admin | --adminer | --redis | --phpmyadmin | --phpredisadmin | --wpcli | --utils | --dashboard | --netdata ]
-.TP
-wo stack [ status | start | stop | reload | restart ] [--all | --nginx | --php | --php73 |--mysql | --web | --redis]
-.TP
-wo site [ list | info | show | enable | disable | edit | cd | show ] [ example.com ]
-.TP
-wo site create example.com [ --html | --php | --php73 | --mysql] [[--wp | --wpsubdir | --wpsubdomain ] [--wpsc | --wpfc | --wpredis | --letsencrypt/-le/--letsencrypt=subdomain/wildcard][--dns=dns_cf/dns_do]]
-.TP
-wo site update example.com [ --php | --php73 |--mysql] [[--wp | --wpsubdir | --wpsubdomain ] [--wpsc | --wpfc | --wpredis ] [--password] [-le/--letsencrypt=on/off/subdomain/renew/wildcard] [--dns=dns_cf/dns_do]]
-.TP
-wo site delete example.com [--db | --files | --all | --no-prompt | --force/-f ]
-.TP
-wo debug [ -i | --all=on/off |--nginx=on/off | --rewrite=on/off | --php=on/off | --fpm=on/off | --mysql=on/off ]
-.TP
-wo debug example.com [ -i | --all=on/off | --nginx=on/off | --rewrite=on/off | --wp=on/off ]
-.TP
-wo secure [ --auth | --port | --ip ]
-.SH DESCRIPTION
-WordOps aka wo is the opensource project developed with the purpose to automate web-server configuration.
-.br
-WordOps is the collection of python script that provides automation for the web-server
-.br
-installation, site creation, services debugging & monitoring.
-.SH OPTIONS
-.TP
-.B --version
-.br
-Display WordOps (wo) version information.
-.TP
-.B info
-.br
-wo info - Display Nginx, PHP, MySQL and wo common location information
-.br
-wo site info - Diplay given website details like enable, disable. weboot and log files.
-.TP
-.B --help
-.br
-Display WordOps (wo) help.
-.TP
-.B stack
-.TP
-.B install [ --all | --web | --nginx | --php | --php73 |--mysql | --redis | --adminer | --phpmyadmin | --phpredismyadmin | --wpcli | --utils | --netdata | --dashboard ]
-.br
-Install Nginx PHP5 MySQL Postfix stack Packages if not used with
-.br
-any options.Installs specific package if used with option.
-.TP
-.B remove [ --all | --web | --nginx | --php | --php73 |--mysql | --redis | --adminer | --phpmyadmin | --phpredismyadmin | --wpcli | --utils | --netdata | --dashboard ]
-.br
-Remove Nginx PHP5 MySQL Postfix stack Packages if not used with
-.br
-any options. Remove specific package if used with option.
-.TP
-.B purge [ --all | --web | --nginx | --php | --php73 |--mysql | --redis | --adminer | --phpmyadmin | --phpredismyadmin | --wpcli | --utils | --netdata | --dashboard ]
-.br
-Purge Nginx PHP5 MySQL Postfix stack Packages if not used with any
-.br
-options.Purge specific package if used with option.
-.TP
-.B status
-.br
-Display status of NGINX, PHP7.2-FPM, MySQL, Redis-Server services.
-.TP
-.B start
-.br
-Start services NGINX, PHP7.2-FPM, MySQL, Redis-Server.
-.TP
-.B stop
-.br
-Stop services NGINX, PHP7.2-FPM, MySQL, Redis-Server.
-.TP
-.B reload
-.br
-Reload services NGINX, PHP7.2-FPM, MySQL, Redis-Server.
-.TP
-.B restart
-.br
-Restart services NGINX, PHP7.2-FPM, MySQL, Redis-Server.
-.TP
-.B site
-.br
-.TP
-.B cd [ example.com ]
-.br
-Change directory to webroot of specified site in subshell.
-.TP
-.B log [ example.com ]
-.br
-monitor access and error logs for site specified.
-.TP
-.B list [ --enabled | --disabled ]
-.br
-Lists all available sites from /etc/nginx/sites-enabled/
-.br
-by default & enable argument. Display sites list from
-.br
-/etc/nginx/sites-available/ if used with available option.
-.TP
-.B info [ example.com ]
-.br
-prints information about site such as access log, error log
-.br
-location and type of site.
-.TP
-.B show [ example.com ]
-.br
-Display NGINX configuration of site.
-.TP
-.B enable [ example.com ]
-.br
-Enable site by creating softlink with site file in
-.br
-/etc/nginx/sites-available to /etc/nginx/sites-enabled/.
-.TP
-.B disable [ example.com ]
-.br
-Disable site by Destroying softlink with site file in
-.br
-/etc/nginx/sites-available to /etc/nginx/sites-enabled/.
-.TP
-.B edit [ example.com ]
-.br
-Edit NGINX configuration of site.
-.TP
-.B create [ example.com ] [ --html | --php | --php73 |--mysql] [[--wp | --wpsubdir | --wpsubdomain ] [--wpsc | --wpfc | --wpredis ]]
-.br
-Create new site according to given options. If no options provided
-.br
-create static site with html only.
-.TP
-.B update [ example.com ] [ --html | --php | --php73 |--mysql] [[--wp | --wpsubdir | --wpsubdomain ] [ --wpsc | --wpfc | --wpredis ] [--password]]
-.br
-Update site configuration according to specified options.
-.TP
-.B delete [ example.com ] [--no-prompt ] [--force/-f] [ --db | --files | --all ]
-.br
-Delete site i.e webroot, database, ad configuration permanently.
-.TP
-.B debug [ -i | --nginx=on/off | --php=on/off | --php73=on/off | --mysql=on/off | --rewrite=on/off | --fpm=on/off | --fpm7=on/off ]
-.br
-Starts server level debugging. If this is used without arguments it will start debugging
-.br
-all services.Else it will debug only service provided with argument.This will Stop
-.br
-Debugging if used with --all=off argument.
-.TP
-.B debug example.com [ -i | --nginx=on/off | --rewrite=on/off | --wp=on/off | --all=on/off ]
-.br
-Starts site level debugging. If this is used without arguments it will start debugging all
-.br
-services.Else it will debug only service provided with argument.This will Stop Debugging
-.br
-if used with --all=off argument.
-.TP
-.B secure [ --auth | --port | --ip ]
-.br
-Update security settings.
-.TP
-.B clean [ --fastcgi | --opcache | --redis | --all ]
-.br
-Clean NGINX fastCGI cache, Opcache, memcached, Redis cache.
-.br
-Clean NGINX fastCGI cache if no option specified.
-.SH ARGUMENTS
-.TP
-.B -i
-.br
-setup intractive mode while used with debug.
-.TP
-.B --nginx=on/off
-.br
-used with wo debug command. used to start or stop nginx debugging.
-.TP
-.B --php=on/off
-.br
-used with wo debug command. used to start or stop php debugging.
-.TP
-.B --php73=on/off
-.br
-used with wo debug command. used to start or stop php72 debugging.
-.TP
-.B --mysql=on/off
-.br
-used with wo debug command. used to start or stop mysql debugging.
-.TP
-.B --rewrite=on/off
-.br
-used with wo debug command. used to start or stop nginx rewrite rules debugging.
-.TP
-.B --fpm=on/off
-.br
-used with wo debug command. used to start or stop fpm debugging.
-.TP
-.B --wp=on/off
-.br
-used with wo debug command. used to start or stop wordpress site debugging.
-.TP
-.B --all=on/off
-.br
-used with wo debug command. used to stop debugging.
-.TP
-.B --all=off
-.br
-used with wo debug command. used to stop debugging.
-.TP
-.B --html
-.br
-Create a HTML website.
-.TP
-.B --php
-.br
-Create a PHP website.
-.TP
-.B --mysql
-.br
-Create a PHP+MySQL website.
-.TP
-.B --wp
-.br
-Create a WordPress Website.
-.TP
-.B --wpsubdir
-.br
-Create a Wordpress Multisite with Sub Directories Setup.
-.TP
-.B --wpsubdomain
-.br
-Create a Wordpress Multisite with Sub Domains Setup.
-.br
-.TP
-.B --db
-.br
-Delete website database.
-.br
-.TP
-.B --files
-.br
-Delete website webroot.
-.br
-.TP
-.B --no-prompt
-.br
-Does not prompt for confirmation when delete command used.
-.br
-.TP
-.B --force/-f
-.br
-Delete website webroot and database forcefully.Remove nginx configuration for site.
-.br
-.TP
-.B --auth
-.br
-used with wo secure command. Update credential of HTTP authentication
-.TP
-.B --port
-.br
-used with wo secure command. Change WordOps admin port 22222.
-.TP
-.B --ip
-.br
-used with wo secure command. Update whitelist IP address
-.SH WORDPRESS CACHING OPTIONS
-.TP
-.B --wpsc
-.br
-Install and activate Nginx-helper and WP Super Cache plugin.
-.TP
-.B --wpfc
-.br
-Install and activate Nginx-helper plugin with
-.br
-Nginx FastCGI cache.
-.TP
-.B --wpredis
-.br
-Install, activate, configure Nginx-helper and Redis Object Cache Plugin, Configure NGINX for Redis Page Caching.
-.SH FILES
-.br
-/etc/wo/wo.conf
-.SH BUGS
-Report bugs at
-.SH AUTHOR
-.br
-.B rtCamp Team
-.I \
-.br
-.B Mitesh Shah
-.I \
-.br
-.B Manish
-.I \
-.br
-.B Gaurav
-.I \
-.br
-.B Harshad
-.I \
-.br
-.B Prabuddha
-.I \
-.br
-.B Shital
-.I \
-.br
-.B Rajdeep Sharma
-.I \
-.br
+.TH wo 8 "WordOps (wo) version: 3.3.8" "Sep 10,2015" "WordOps"
+.SH NAME
+.B WordOps (wo)
+\- Manage Nginx Based Websites.
+.SH SYNOPSIS
+wo [ --version | --help | info | stack | site | debug | update | clean | import_slow_log | log | secure | sync | maintenance ]
+.TP
+wo stack [ install | remove | purge | migrate | upgrade] [ --web | --all | --nginx | --php | --php73 | --mysql | --admin | --adminer | --redis | --phpmyadmin | --phpredisadmin | --wpcli | --utils | --dashboard | --netdata ]
+.TP
+wo stack [ status | start | stop | reload | restart ] [--all | --nginx | --php | --php73 |--mysql | --web | --redis]
+.TP
+wo site [ list | info | show | enable | disable | edit | cd | show ] [ example.com ]
+.TP
+wo site create example.com [ --html | --php | --php73 | --mysql] [[--wp | --wpsubdir | --wpsubdomain ] [--wpsc | --wpfc | --wpredis | --letsencrypt/-le/--letsencrypt=subdomain/wildcard][--dns=dns_cf/dns_do]]
+.TP
+wo site update example.com [ --php | --php73 |--mysql] [[--wp | --wpsubdir | --wpsubdomain ] [--wpsc | --wpfc | --wpredis ] [--password] [-le/--letsencrypt=on/off/subdomain/renew/wildcard] [--dns=dns_cf/dns_do]]
+.TP
+wo site delete example.com [--db | --files | --all | --no-prompt | --force/-f ]
+.TP
+wo debug [ -i | --all=on/off |--nginx=on/off | --rewrite=on/off | --php=on/off | --fpm=on/off | --mysql=on/off ]
+.TP
+wo debug example.com [ -i | --all=on/off | --nginx=on/off | --rewrite=on/off | --wp=on/off ]
+.TP
+wo secure [ --auth | --port | --ip ]
+.SH DESCRIPTION
+WordOps aka wo is the opensource project developed with the purpose to automate web-server configuration.
+.br
+WordOps is the collection of python script that provides automation for the web-server
+.br
+installation, site creation, services debugging & monitoring.
+.SH OPTIONS
+.TP
+.B --version
+.br
+Display WordOps (wo) version information.
+.TP
+.B info
+.br
+wo info - Display Nginx, PHP, MySQL and wo common location information
+.br
+wo site info - Diplay given website details like enable, disable. weboot and log files.
+.TP
+.B --help
+.br
+Display WordOps (wo) help.
+.TP
+.B stack
+.TP
+.B install [ --all | --web | --nginx | --php | --php73 |--mysql | --redis | --adminer | --phpmyadmin | --phpredismyadmin | --wpcli | --utils | --netdata | --dashboard ]
+.br
+Install Nginx PHP5 MySQL Postfix stack Packages if not used with
+.br
+any options.Installs specific package if used with option.
+.TP
+.B remove [ --all | --web | --nginx | --php | --php73 |--mysql | --redis | --adminer | --phpmyadmin | --phpredismyadmin | --wpcli | --utils | --netdata | --dashboard ]
+.br
+Remove Nginx PHP5 MySQL Postfix stack Packages if not used with
+.br
+any options. Remove specific package if used with option.
+.TP
+.B purge [ --all | --web | --nginx | --php | --php73 |--mysql | --redis | --adminer | --phpmyadmin | --phpredismyadmin | --wpcli | --utils | --netdata | --dashboard ]
+.br
+Purge Nginx PHP5 MySQL Postfix stack Packages if not used with any
+.br
+options.Purge specific package if used with option.
+.TP
+.B status
+.br
+Display status of NGINX, PHP7.2-FPM, MySQL, Redis-Server services.
+.TP
+.B start
+.br
+Start services NGINX, PHP7.2-FPM, MySQL, Redis-Server.
+.TP
+.B stop
+.br
+Stop services NGINX, PHP7.2-FPM, MySQL, Redis-Server.
+.TP
+.B reload
+.br
+Reload services NGINX, PHP7.2-FPM, MySQL, Redis-Server.
+.TP
+.B restart
+.br
+Restart services NGINX, PHP7.2-FPM, MySQL, Redis-Server.
+.TP
+.B site
+.br
+.TP
+.B cd [ example.com ]
+.br
+Change directory to webroot of specified site in subshell.
+.TP
+.B log [ example.com ]
+.br
+monitor access and error logs for site specified.
+.TP
+.B list [ --enabled | --disabled ]
+.br
+Lists all available sites from /etc/nginx/sites-enabled/
+.br
+by default & enable argument. Display sites list from
+.br
+/etc/nginx/sites-available/ if used with available option.
+.TP
+.B info [ example.com ]
+.br
+prints information about site such as access log, error log
+.br
+location and type of site.
+.TP
+.B show [ example.com ]
+.br
+Display NGINX configuration of site.
+.TP
+.B enable [ example.com ]
+.br
+Enable site by creating softlink with site file in
+.br
+/etc/nginx/sites-available to /etc/nginx/sites-enabled/.
+.TP
+.B disable [ example.com ]
+.br
+Disable site by Destroying softlink with site file in
+.br
+/etc/nginx/sites-available to /etc/nginx/sites-enabled/.
+.TP
+.B edit [ example.com ]
+.br
+Edit NGINX configuration of site.
+.TP
+.B create [ example.com ] [ --html | --php | --php73 |--mysql] [[--wp | --wpsubdir | --wpsubdomain ] [--wpsc | --wpfc | --wpredis ]]
+.br
+Create new site according to given options. If no options provided
+.br
+create static site with html only.
+.TP
+.B update [ example.com ] [ --html | --php | --php73 |--mysql] [[--wp | --wpsubdir | --wpsubdomain ] [ --wpsc | --wpfc | --wpredis ] [--password]]
+.br
+Update site configuration according to specified options.
+.TP
+.B delete [ example.com ] [--no-prompt ] [--force/-f] [ --db | --files | --all ]
+.br
+Delete site i.e webroot, database, ad configuration permanently.
+.TP
+.B debug [ -i | --nginx=on/off | --php=on/off | --php73=on/off | --mysql=on/off | --rewrite=on/off | --fpm=on/off | --fpm7=on/off ]
+.br
+Starts server level debugging. If this is used without arguments it will start debugging
+.br
+all services.Else it will debug only service provided with argument.This will Stop
+.br
+Debugging if used with --all=off argument.
+.TP
+.B debug example.com [ -i | --nginx=on/off | --rewrite=on/off | --wp=on/off | --all=on/off ]
+.br
+Starts site level debugging. If this is used without arguments it will start debugging all
+.br
+services.Else it will debug only service provided with argument.This will Stop Debugging
+.br
+if used with --all=off argument.
+.TP
+.B secure [ --auth | --port | --ip ]
+.br
+Update security settings.
+.TP
+.B clean [ --fastcgi | --opcache | --redis | --all ]
+.br
+Clean NGINX fastCGI cache, Opcache, memcached, Redis cache.
+.br
+Clean NGINX fastCGI cache if no option specified.
+.SH ARGUMENTS
+.TP
+.B -i
+.br
+setup intractive mode while used with debug.
+.TP
+.B --nginx=on/off
+.br
+used with wo debug command. used to start or stop nginx debugging.
+.TP
+.B --php=on/off
+.br
+used with wo debug command. used to start or stop php debugging.
+.TP
+.B --php73=on/off
+.br
+used with wo debug command. used to start or stop php72 debugging.
+.TP
+.B --mysql=on/off
+.br
+used with wo debug command. used to start or stop mysql debugging.
+.TP
+.B --rewrite=on/off
+.br
+used with wo debug command. used to start or stop nginx rewrite rules debugging.
+.TP
+.B --fpm=on/off
+.br
+used with wo debug command. used to start or stop fpm debugging.
+.TP
+.B --wp=on/off
+.br
+used with wo debug command. used to start or stop wordpress site debugging.
+.TP
+.B --all=on/off
+.br
+used with wo debug command. used to stop debugging.
+.TP
+.B --all=off
+.br
+used with wo debug command. used to stop debugging.
+.TP
+.B --html
+.br
+Create a HTML website.
+.TP
+.B --php
+.br
+Create a PHP website.
+.TP
+.B --mysql
+.br
+Create a PHP+MySQL website.
+.TP
+.B --wp
+.br
+Create a WordPress Website.
+.TP
+.B --wpsubdir
+.br
+Create a Wordpress Multisite with Sub Directories Setup.
+.TP
+.B --wpsubdomain
+.br
+Create a Wordpress Multisite with Sub Domains Setup.
+.br
+.TP
+.B --db
+.br
+Delete website database.
+.br
+.TP
+.B --files
+.br
+Delete website webroot.
+.br
+.TP
+.B --no-prompt
+.br
+Does not prompt for confirmation when delete command used.
+.br
+.TP
+.B --force/-f
+.br
+Delete website webroot and database forcefully.Remove nginx configuration for site.
+.br
+.TP
+.B --auth
+.br
+used with wo secure command. Update credential of HTTP authentication
+.TP
+.B --port
+.br
+used with wo secure command. Change WordOps admin port 22222.
+.TP
+.B --ip
+.br
+used with wo secure command. Update whitelist IP address
+.SH WORDPRESS CACHING OPTIONS
+.TP
+.B --wpsc
+.br
+Install and activate Nginx-helper and WP Super Cache plugin.
+.TP
+.B --wpfc
+.br
+Install and activate Nginx-helper plugin with
+.br
+Nginx FastCGI cache.
+.TP
+.B --wpredis
+.br
+Install, activate, configure Nginx-helper and Redis Object Cache Plugin, Configure NGINX for Redis Page Caching.
+.SH FILES
+.br
+/etc/wo/wo.conf
+.SH BUGS
+Report bugs at
+.SH AUTHOR
+.br
+.B rtCamp Team
+.I \
+.br
+.B Mitesh Shah
+.I \
+.br
+.B Manish
+.I \
+.br
+.B Gaurav
+.I \
+.br
+.B Harshad
+.I \
+.br
+.B Prabuddha
+.I \
+.br
+.B Shital
+.I \
+.br
+.B Rajdeep Sharma
+.I \
+.br
diff --git a/install b/install
index 2d096d8..4d0a4e5 100755
--- a/install
+++ b/install
@@ -7,10 +7,10 @@
# Copyright (c) 2019 - WordOps
# This script is licensed under M.I.T
# -------------------------------------------------------------------------
-# Version 3.9.6 - 2019-07-20
+# Version 3.9.6 - 2019-07-24
# -------------------------------------------------------------------------
readonly wo_version_old="2.2.3"
-readonly wo_version_new="3.9.6.1"
+readonly wo_version_new="3.9.6.2"
# CONTENTS
# ---
# 1. VARIABLES AND DECLARATIONS
@@ -175,19 +175,20 @@ wo_install_dep() {
[ -z "$wo_travis" ] && {
# update server packages
- DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confmiss" -o Dpkg::Options::="--force-confold" -y dist-upgrade
- } > /dev/null 2>&1
+ DEBIAN_FRONTEND=noninteractive apt-get dist-upgrade --option=Dpkg::options::=--force-confmiss --option=Dpkg::options::=--force-confold --option=Dpkg::options::=--force-unsafe-io --assume-yes --quiet
+ }
if [ "$wo_linux_distro" == "Ubuntu" ]; then
# install dependencies
- DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confmiss" -o Dpkg::Options::="--force-confold" -y install build-essential curl gzip python3 python3-apt python3-setuptools python3-dev sqlite3 git tar software-properties-common pigz gnupg2 cron ccze rsync tree haveged ufw > /dev/null 2>&1
+ DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confmiss" -o Dpkg::Options::="--force-confold" --assume-yes install build-essential curl gzip python3 python3-apt python3-setuptools python3-dev sqlite3 git tar software-properties-common pigz gnupg2 cron ccze rsync tree haveged ufw > /dev/null 2>&1
else
+ # install dependencies
+ DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confmiss" -o Dpkg::Options::="--force-confold" --assume-yes install build-essential curl gzip dirmngr sudo python3 python3-apt python3-setuptools python3-dev ca-certificates sqlite3 git tar software-properties-common pigz apt-transport-https gnupg2 cron ccze rsync tree haveged ufw > /dev/null 2>&1
+ # add php repository gpg key
+ [ -d /etc/apt/trusted.gpg.d ] && { wget -qO /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg; }
# add nginx repository gpg key
wget https://download.opensuse.org/repositories/home:virtubox:WordOps/Debian_9.0/Release.key -O Release.key
apt-key add - < Release.key
rm -f Release.key
- # install dependencies
- DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confmiss" -o Dpkg::Options::="--force-confold" -y install build-essential curl gzip dirmngr sudo python3 python3-apt python3-setuptools python3-dev ca-certificates sqlite3 git tar software-properties-common pigz apt-transport-https gnupg2 cron ccze rsync tree haveged ufw > /dev/null 2>&1
- [ -d /etc/apt/trusted.gpg.d ] && { wget -qO /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg; }
fi
locale-gen en
@@ -405,18 +406,21 @@ wo_install() {
{
rm -f /etc/bash_completion.d/wo_auto.rc
rm -rf /tmp/WordOps
- git clone https://github.com/WordOps/WordOps.git /tmp/WordOps -b "$wo_branch"
+ git clone -b "$wo_branch" --depth=50 https://github.com/WordOps/WordOps.git /tmp/WordOps
cd /tmp/WordOps || exit 1
} \
>> "$wo_install_log" 2>&1
+ if [ "$wo_force_install" = "y" ]; then
+ [ ! -f "$HOME/.gitconfig" ] && { bash -c 'echo -e "[user]\n\tname = $USER\n\temail = root@$HOSTNAME.local" > $HOME/.gitconfig'; }
+ fi
+
if [ -f "$HOME/.gitconfig" ]; then
+ # install and redirect log to not print python package install
python3 setup.py install >> $wo_install_log 2>&1
else
- if [ "$wo_force_install" = "y" ]; then
- [ ! -f "$HOME/.gitconfig" ] && { bash -c 'echo -e "[user]\n\tname = $USER\n\temail = root@$HOSTNAME" > $HOME/.gitconfig'; }
- fi
+ # install without redirecting logs to prompt user for name & email
python3 setup.py install
fi
@@ -444,17 +448,16 @@ wo_upgrade_nginx() {
# add new Nginx repository
if [ "$wo_linux_distro" = "Ubuntu" ]; then
+ if [ ! -f /etc/apt/sources.list.d/wordops-ubuntu-nginx-wo-"$(lsb_release -sc)".list ]; then
add-apt-repository ppa:wordops/nginx-wo -y -u
+ fi
else
if [ "$wo_distro_version" == "jessie" ]; then
- wget -qO /tmp/nginx-wo.key https://download.opensuse.org/repositories/home:virtubox:WordOps/Debian_8.0/Release.key
+ curl -sL https://download.opensuse.org/repositories/home:virtubox:WordOps/Debian_8.0/Release.key | apt-key add -
else
- wget -qO /tmp/nginx-wo.key https://download.opensuse.org/repositories/home:virtubox:WordOps/Debian_9.0/Release.key
+ curl -sL https://download.opensuse.org/repositories/home:virtubox:WordOps/Debian_9.0/Release.key | apt-key add -
fi
# import the respository key for updates
- apt-key add - < /tmp/nginx-wo.key
- rm -f /tmp/nginx-wo.key
- apt-get update -qq
fi
# stop nginx
@@ -487,7 +490,7 @@ wo_upgrade_nginx() {
fi
/usr/local/bin/wo stack install --nginx --php
- rm -f /etc/nginx/common/acl.conf /etc/nginx/conf.d/{map-wp-cache.conf,map-wp.conf,fascgi.conf} /etc/nginx/htpasswd-wo
+ rm -f /etc/nginx/common/acl.conf /etc/nginx/conf.d/{map-wp-cache.conf,map-wp.conf,fascgi.conf,blockips.conf} /etc/nginx/htpasswd-wo
fi
# restore sites and configuration
@@ -637,7 +640,7 @@ wo_tweak_kernel() {
if [ ! -f /etc/sysctl.d/60-wo-tweaks.conf ]; then
if [ "$WO_ARCH" = "x86_64" ]; then
rm -f /etc/sysctl.d/60-ubuntu-nginx-web-server.conf
- wget -qO /etc/sysctl.d/60-wo-tweaks.conf https://raw.githubusercontent.com/WordOps/WordOps/updating-configuration/wo/cli/templates/sysctl.mustache
+ wget -qO /etc/sysctl.d/60-wo-tweaks.conf https://raw.githubusercontent.com/WordOps/WordOps/master/wo/cli/templates/sysctl.mustache
if [ "$wo_distro_version" = "bionic" ] || [ "$wo_distro_version" = "disco" ] || [ "$wo_distro_version" = "buster" ]; then
modprobe tcp_bbr && echo 'tcp_bbr' >> /etc/modules-load.d/bbr.conf
echo -e '\nnet.ipv4.tcp_congestion_control = bbr\nnet.ipv4.tcp_notsent_lowat = 16384' >> /etc/sysctl.d/60-wo-tweaks.conf
@@ -774,6 +777,7 @@ elif [ "$wo_upgrade" = "1" ]; then
else
wo_lib_echo "WordOps (wo) installed successfully"
fi
+echo
wo_lib_echo_info "For autocompletion, run the following command:"
wo_lib_echo_info "source /etc/bash_completion.d/wo_auto.rc"
echo
diff --git a/setup.py b/setup.py
index d0d701c..c1efb3d 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.6.1',
+ version='3.9.6.2',
description=long_description,
long_description=long_description,
classifiers=[],
diff --git a/tests/cli/2_test_stack_services_start.py b/tests/cli/2_test_stack_services_start.py
index 4b7323d..4eca160 100644
--- a/tests/cli/2_test_stack_services_start.py
+++ b/tests/cli/2_test_stack_services_start.py
@@ -15,7 +15,7 @@ class CliTestCaseStack(test.WOTestCase):
self.app.run()
self.app.close()
- def test_wo_cli_stack_services_start_php5_fpm(self):
+ def test_wo_cli_stack_services_start_php_fpm(self):
self.app = get_test_app(argv=['stack', 'start', '--php'])
self.app.setup()
self.app.run()
@@ -27,12 +27,6 @@ class CliTestCaseStack(test.WOTestCase):
self.app.run()
self.app.close()
- def test_wo_cli_stack_services_start_memcached(self):
- self.app = get_test_app(argv=['stack', 'start', '--memcache'])
- self.app.setup()
- self.app.run()
- self.app.close()
-
def test_wo_cli_stack_services_start_all(self):
self.app = get_test_app(argv=['stack', 'start'])
self.app.setup()
diff --git a/tests/cli/3_test_stack_services_status.py b/tests/cli/3_test_stack_services_status.py
index 9527779..904bd6d 100644
--- a/tests/cli/3_test_stack_services_status.py
+++ b/tests/cli/3_test_stack_services_status.py
@@ -15,7 +15,7 @@ class CliTestCaseStack(test.WOTestCase):
self.app.run()
self.app.close()
- def test_wo_cli_stack_services_status_php5_fpm(self):
+ def test_wo_cli_stack_services_status_php_fpm(self):
self.app = get_test_app(argv=['stack', 'status', '--php'])
self.app.setup()
self.app.run()
diff --git a/tests/cli/4_test_stack_services_stop.py b/tests/cli/4_test_stack_services_stop.py
index 17da27c..577dc54 100644
--- a/tests/cli/4_test_stack_services_stop.py
+++ b/tests/cli/4_test_stack_services_stop.py
@@ -15,7 +15,7 @@ class CliTestCaseStack(test.WOTestCase):
self.app.run()
self.app.close()
- def test_wo_cli_stack_services_stop_php5_fpm(self):
+ def test_wo_cli_stack_services_stop_php_fpm(self):
self.app = get_test_app(argv=['stack', 'stop', '--php'])
self.app.setup()
self.app.run()
@@ -27,12 +27,6 @@ class CliTestCaseStack(test.WOTestCase):
self.app.run()
self.app.close()
- def test_wo_cli_stack_services_stop_memcached(self):
- self.app = get_test_app(argv=['stack', 'stop', '--memcache'])
- self.app.setup()
- self.app.run()
- self.app.close()
-
def test_wo_cli_stack_services_stop_all(self):
self.app = get_test_app(argv=['stack', 'stop'])
self.app.setup()
diff --git a/tests/cli/5_test_stack_services_restart.py b/tests/cli/5_test_stack_services_restart.py
index 20e51d8..60dff84 100644
--- a/tests/cli/5_test_stack_services_restart.py
+++ b/tests/cli/5_test_stack_services_restart.py
@@ -15,7 +15,7 @@ class CliTestCaseStack(test.WOTestCase):
self.app.run()
self.app.close()
- def test_wo_cli_stack_services_restart_php5_fpm(self):
+ def test_wo_cli_stack_services_restart_php_fpm(self):
self.app = get_test_app(argv=['stack', 'restart', '--php'])
self.app.setup()
self.app.run()
@@ -27,12 +27,6 @@ class CliTestCaseStack(test.WOTestCase):
self.app.run()
self.app.close()
- def test_wo_cli_stack_services_restart_memcached(self):
- self.app = get_test_app(argv=['stack', 'restart', '--memcache'])
- self.app.setup()
- self.app.run()
- self.app.close()
-
def test_wo_cli_stack_services_restart_all(self):
self.app = get_test_app(argv=['stack', 'restart'])
self.app.setup()
diff --git a/tests/cli/test_clean.py b/tests/cli/test_clean.py
index a21a7d2..04728c4 100644
--- a/tests/cli/test_clean.py
+++ b/tests/cli/test_clean.py
@@ -27,12 +27,6 @@ class CliTestCaseClean(test.WOTestCase):
self.app.run()
self.app.close()
- def test_wo_cli_clean_memcache(self):
- self.app = get_test_app(argv=['clean', '--memcache'])
- self.app.setup()
- self.app.run()
- self.app.close()
-
def test_wo_cli_clean_opcache(self):
self.app = get_test_app(argv=['clean', '--opcache'])
self.app.setup()
diff --git a/wo/cli/plugins/site.py b/wo/cli/plugins/site.py
index 5fd383d..d0fc061 100644
--- a/wo/cli/plugins/site.py
+++ b/wo/cli/plugins/site.py
@@ -820,7 +820,7 @@ class WOSiteUpdateController(CementBaseController):
dict(help="configure letsencrypt ssl for the site",
action='store' or 'store_const',
choices=('on', 'off', 'renew', 'subdomain',
- 'wildcard', 'clean'),
+ 'wildcard', 'clean', 'purge'),
const='on', nargs='?')),
(['--dns'],
dict(help="choose dns provider api for letsencrypt",
@@ -1186,6 +1186,9 @@ class WOSiteUpdateController(CementBaseController):
elif pargs.letsencrypt == 'clean':
data['letsencrypt'] = False
letsencrypt = False
+ elif pargs.letsencrypt == 'purge':
+ data['letsencrypt'] = False
+ letsencrypt = False
if letsencrypt is check_ssl:
if letsencrypt is False:
@@ -1214,13 +1217,16 @@ class WOSiteUpdateController(CementBaseController):
if pargs.letsencrypt == "on":
if oldsitetype in ['wpsubdomain']:
- data['letsencrypt'] = True
- letsencrypt = True
- pargs.letsencrypt == 'wildcard'
+ if pargs.dns:
+ data['letsencrypt'] = True
+ letsencrypt = True
+ pargs.letsencrypt == 'wildcard'
+ else:
+ data['letsencrypt'] = True
+ letsencrypt = True
else:
data['letsencrypt'] = True
letsencrypt = True
- wildcard = False
if pargs.wpredis and data['currcachetype'] != 'wpredis':
data['wpredis'] = True
@@ -1345,16 +1351,9 @@ class WOSiteUpdateController(CementBaseController):
'{0}/conf/nginx/'
'hsts.conf.disabled'
.format(wo_site_webroot))
- if self.app.pargs.letsencrypt == "clean":
- if os.path.isfile("{0}/conf/nginx/ssl.conf"
- .format(wo_site_webroot)):
- WOFileUtils.remove(self, "{0}/conf/nginx/ssl.conf"
- .format(wo_site_webroot))
- WOFileUtils.remove(self, "/etc/letsencrypt/live"
- "/{0}".format(wo_domain))
- WOFileUtils.remove(self, "/etc/nginx/conf.d/"
- "force-ssl-{0}.conf"
- .format(wo_domain_name))
+ elif (self.app.pargs.letsencrypt == "clean" or
+ self.app.pargs.letsencrypt == "purge"):
+ removeAcmeConf(self, wo_domain)
if not WOService.reload_service(self, 'nginx'):
Log.error(self, "service nginx reload failed. "
"check issues with `nginx -t` command")
diff --git a/wo/cli/plugins/site_functions.py b/wo/cli/plugins/site_functions.py
index dc9900d..b0bf70f 100644
--- a/wo/cli/plugins/site_functions.py
+++ b/wo/cli/plugins/site_functions.py
@@ -1307,11 +1307,19 @@ def removeAcmeConf(self, domain):
"-d {0} --ecc"
.format(domain))
except CommandExecutionError as e:
- Log.error(self, "Cert removal failed")
- WOFileUtils.remove(self, '/etc/letsencrypt/renewal/{0}_ecc'
+ Log.error(self, "Cert removal failed")
+ WOFileUtils.rm(self, '/etc/letsencrypt/renewal/{0}_ecc'
.format(domain))
- WOFileUtils.remove(self, '/etc/letsencrypt/live/{0}'
+ WOFileUtils.rm(self, '/etc/letsencrypt/live/{0}'
.format(domain))
+ WOFileUtils.rm(self, '/var/www/{0}/conf/nginx/ssl.conf'.format(domain))
+ WOFileUtils.rm(self, '/var/www/{0}/conf/nginx/ssl.conf.disabled'
+ .format(domain))
+ WOFileUtils.rm(
+ self, '/etc/nginx/conf.d/force-ssl-{0}.conf'.format(domain))
+ WOFileUtils.rm(
+ self, '/etc/nginx/conf.d/force-ssl-{0}.conf.disabled'.format(domain))
+
WOGit.add(self, ["/etc/letsencrypt"],
msg="Deleted {0} "
.format(domain))
diff --git a/wo/cli/plugins/stack_upgrade.py b/wo/cli/plugins/stack_upgrade.py
index 181558a..7f3e4f8 100644
--- a/wo/cli/plugins/stack_upgrade.py
+++ b/wo/cli/plugins/stack_upgrade.py
@@ -158,7 +158,7 @@ class WOStackUpgradeController(CementBaseController):
"/phpMyAdmin/{0}/"
"phpMyAdmin-{0}-"
"all-languages"
- ".zip".format(WOVariables.wo_phpmyadmin),
+ ".tar.gz".format(WOVariables.wo_phpmyadmin),
"/var/lib/wo/tmp/pma.tar.gz",
"PHPMyAdmin"]]
else:
@@ -229,17 +229,17 @@ class WOStackUpgradeController(CementBaseController):
if self.app.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)
+ 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.remove(self, '{0}22222/htdocs/db/pma'
- .format(WOVariables.wo_webroot))
+ 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),
diff --git a/wo/core/aptget.py b/wo/core/aptget.py
index a480202..75e0e11 100644
--- a/wo/core/aptget.py
+++ b/wo/core/aptget.py
@@ -83,11 +83,14 @@ class WOAptGet():
try:
with open('/var/log/wo/wordops.log', 'a') as f:
proc = subprocess.Popen("DEBIAN_FRONTEND=noninteractive "
- "apt-get dist-upgrade -o "
- "Dpkg::Options::=\"--force-confdef\""
- " -o "
- "Dpkg::Options::=\"--force-confold\""
- " -y ",
+ "apt-get dist-upgrade "
+ "--option=Dpkg::options::="
+ "--force-confdef "
+ "--option=Dpkg::options::="
+ "--force-unsafe-io "
+ "--option=Dpkg::options::="
+ "--force-confold "
+ "--assume-yes --quiet ",
shell=True, stdin=None,
stdout=f, stderr=f,
executable="/bin/bash")
@@ -110,11 +113,13 @@ class WOAptGet():
try:
with open('/var/log/wo/wordops.log', 'a') as f:
proc = subprocess.Popen("DEBIAN_FRONTEND=noninteractive "
- "apt-get install -o "
- "Dpkg::Options::=\"--force-confdef\""
- " -o "
- "Dpkg::Options::=\"--force-confold\""
- " -y --allow-unauthenticated {0}"
+ "apt-get install "
+ "--option=Dpkg::options::="
+ "--force-confdef "
+ "--option=Dpkg::options::="
+ "--force-confold "
+ "--assume-yes "
+ "--allow-unauthenticated {0}"
.format(all_packages), shell=True,
stdin=None, stdout=f, stderr=f,
executable="/bin/bash")
@@ -141,12 +146,14 @@ class WOAptGet():
try:
with open('/var/log/wo/wordops.log', 'a') as f:
if purge:
- proc = subprocess.Popen('apt-get purge -y {0}'
+ proc = subprocess.Popen('apt-get autoremove --purge '
+ '--assume-yes {0}'
.format(all_packages), shell=True,
stdin=None, stdout=f, stderr=f,
executable="/bin/bash")
else:
- proc = subprocess.Popen('apt-get remove -y {0}'
+ proc = subprocess.Popen('apt-get autoremove '
+ '--assume-yes {0}'
.format(all_packages), shell=True,
stdin=None, stdout=f, stderr=f,
executable="/bin/bash")
diff --git a/wo/core/variables.py b/wo/core/variables.py
index 51ab851..750bf7f 100644
--- a/wo/core/variables.py
+++ b/wo/core/variables.py
@@ -11,7 +11,7 @@ class WOVariables():
"""Intialization of core variables"""
# WordOps version
- wo_version = "3.9.6.1"
+ wo_version = "3.9.6.2"
# WordOps packages versions
wo_wp_cli = "2.2.0"
wo_adminer = "4.7.1"