wp subfolder

Now we can install WP in a subfolder.
This commit is contained in:
Cristhian Martínez Ochoa 2019-08-15 20:12:19 -06:00
parent 617896233e
commit b77923ec2e
4 changed files with 122 additions and 38 deletions

View file

@ -135,8 +135,8 @@ db_delete() {
# Get dbname and dbuser of a WP site
if [[ -a /var/www/$domain/wp-config.php ]]; then
wpconfpath="/var/www/$domain/wp-config.php"
elif [[ -a /var/www/$domain/htdocs/wp-config.php ]]; then
wpconfpath="/var/www/$domain/htdocs/wp-config.php"
elif [[ -a /var/www/$domain/htdocs$subfolder/wp-config.php ]]; then
wpconfpath="/var/www/$domain/htdocs$subfolder/wp-config.php"
else
return
fi

View file

@ -7,10 +7,12 @@ source /opt/webinoly/lib/site-ssl
wp_cache_plugins() {
api-events_update si3
[[ -z $subfolder ]] && local subfolder=""
if [[ ! -d /var/www/$domain/htdocs/wp-content/plugins/nginx-helper ]]; then
# Download Nginx Helper Plugin
sudo wget --timeout=15 -t 1 -qrO /var/www/$domain/htdocs/nginx-helper-plugin.zip https://downloads.wordpress.org/plugin/nginx-helper.latest-stable.zip
sudo unzip -qq /var/www/$domain/htdocs/nginx-helper-plugin.zip -d /var/www/$domain/htdocs/wp-content/plugins/
sudo unzip -qq /var/www/$domain/htdocs/nginx-helper-plugin.zip -d /var/www/$domain/htdocs$subfolder/wp-content/plugins/
sudo rm /var/www/$domain/htdocs/nginx-helper-plugin.zip
echo ""
echo "${gre} Nginx Helper Plugin has been installed!"
@ -27,7 +29,7 @@ wp_cache_plugins() {
if [[ ! -d /var/www/$domain/htdocs/wp-content/plugins/redis-cache ]]; then
# Download Redis Object Cache Plugin
sudo wget --timeout=15 -t 1 -qrO /var/www/$domain/htdocs/redis-cache-plugin.zip https://downloads.wordpress.org/plugin/redis-cache.latest-stable.zip
sudo unzip -qq /var/www/$domain/htdocs/redis-cache-plugin.zip -d /var/www/$domain/htdocs/wp-content/plugins/
sudo unzip -qq /var/www/$domain/htdocs/redis-cache-plugin.zip -d /var/www/$domain/htdocs$subfolder/wp-content/plugins/
sudo rm /var/www/$domain/htdocs/redis-cache-plugin.zip
echo ""
echo "${gre} Redis Object Cache Plugin has been installed!"
@ -96,7 +98,15 @@ dbword_check() {
wpinstall() {
api-events_update si2
[[ -z $domain && -n $mysql ]] && local dom="Webinoly_$(pwgen -s -1)" || local dom=$(echo $domain | sed "s/[^0-9A-Za-z]/_/g")
if [[ -z $domain && -n $mysql ]]; then
local dom="Webinoly_$(pwgen -s -1)"
elif [[ -n $subfolder ]]; then
local dom=$(echo "$domain$subfolder" | sed "s/[^0-9A-Za-z]/_/g")
sudo mkdir -p /var/www/$domain/htdocs$subfolder
else
local dom=$(echo $domain | sed "s/[^0-9A-Za-z]/_/g")
fi
local ROOT_PASS=$( echo $(conf_read mysql-root) | openssl enc -d -a -salt )
local AUTOGENPASS_WPDB=`pwgen -s -1 16`
local setupmysql="y"
@ -141,9 +151,9 @@ wpinstall() {
# Download WP (latest version)
if [[ $type == [123] ]]; then
sudo wget --timeout=15 -t 1 -qrO /var/www/$domain/htdocs/wp.tar.gz https://wordpress.org/latest.tar.gz
sudo tar -xf /var/www/$domain/htdocs/wp.tar.gz -C /var/www/$domain/htdocs/
sudo mv /var/www/$domain/htdocs/wordpress/* /var/www/$domain/htdocs/
sudo rm -rf /var/www/$domain/htdocs/wordpress
sudo tar -xf /var/www/$domain/htdocs/wp.tar.gz -C /var/www/$domain/
sudo mv /var/www/$domain/wordpress/* /var/www/$domain/htdocs$subfolder/
sudo rm -rf /var/www/$domain/wordpress
sudo rm /var/www/$domain/htdocs/wp.tar.gz
fi
@ -396,41 +406,42 @@ _EOF_
#WP-Config.php auto-setup
if [[ $setupwp == [yY] ]] ; then
cp /var/www/$domain/htdocs/wp-config-sample.php /var/www/$domain/wp-config.php
[[ -z $subfolder ]] && local wpcon="/var/www/$domain/wp-config.php" || local wpcon="/var/www/$domain/htdocs$subfolder/wp-config.php"
cp /var/www/$domain/htdocs$subfolder/wp-config-sample.php $wpcon
# Fill new wp-config with data
sudo sed -i "/DB_NAME/c \define('DB_NAME', '$dbname');" /var/www/$domain/wp-config.php
sudo sed -i "/DB_USER/c \define('DB_USER', '$dbuser');" /var/www/$domain/wp-config.php
sudo sed -i "/DB_PASSWORD/c \define('DB_PASSWORD', '$dbpass');" /var/www/$domain/wp-config.php
sudo sed -i "/DB_HOST/c \define('DB_HOST', '$dbhost');" /var/www/$domain/wp-config.php
sudo sed -i "/table_prefix/c \$table_prefix = '$dbpref';" /var/www/$domain/wp-config.php
sudo sed -i "/DB_NAME/c \define('DB_NAME', '$dbname');" $wpcon
sudo sed -i "/DB_USER/c \define('DB_USER', '$dbuser');" $wpcon
sudo sed -i "/DB_PASSWORD/c \define('DB_PASSWORD', '$dbpass');" $wpcon
sudo sed -i "/DB_HOST/c \define('DB_HOST', '$dbhost');" $wpcon
sudo sed -i "/table_prefix/c \$table_prefix = '$dbpref';" $wpcon
sudo sed -i "/'AUTH_KEY'/c \define('AUTH_KEY', '$(pwgen -s -1 64)');" /var/www/$domain/wp-config.php
sudo sed -i "/'SECURE_AUTH_KEY'/c \define('SECURE_AUTH_KEY', '$(pwgen -s -1 64)');" /var/www/$domain/wp-config.php
sudo sed -i "/'LOGGED_IN_KEY'/c \define('LOGGED_IN_KEY', '$(pwgen -s -1 64)');" /var/www/$domain/wp-config.php
sudo sed -i "/'NONCE_KEY'/c \define('NONCE_KEY', '$(pwgen -s -1 64)');" /var/www/$domain/wp-config.php
sudo sed -i "/'AUTH_SALT'/c \define('AUTH_SALT', '$(pwgen -s -1 64)');" /var/www/$domain/wp-config.php
sudo sed -i "/'SECURE_AUTH_SALT'/c \define('SECURE_AUTH_SALT','$(pwgen -s -1 64)');" /var/www/$domain/wp-config.php
sudo sed -i "/'LOGGED_IN_SALT'/c \define('LOGGED_IN_SALT', '$(pwgen -s -1 64)');" /var/www/$domain/wp-config.php
sudo sed -i "/'NONCE_SALT'/c \define('NONCE_SALT', '$(pwgen -s -1 64)');" /var/www/$domain/wp-config.php
sudo sed -i "/'AUTH_KEY'/c \define('AUTH_KEY', '$(pwgen -s -1 64)');" $wpcon
sudo sed -i "/'SECURE_AUTH_KEY'/c \define('SECURE_AUTH_KEY', '$(pwgen -s -1 64)');" $wpcon
sudo sed -i "/'LOGGED_IN_KEY'/c \define('LOGGED_IN_KEY', '$(pwgen -s -1 64)');" $wpcon
sudo sed -i "/'NONCE_KEY'/c \define('NONCE_KEY', '$(pwgen -s -1 64)');" $wpcon
sudo sed -i "/'AUTH_SALT'/c \define('AUTH_SALT', '$(pwgen -s -1 64)');" $wpcon
sudo sed -i "/'SECURE_AUTH_SALT'/c \define('SECURE_AUTH_SALT','$(pwgen -s -1 64)');" $wpcon
sudo sed -i "/'LOGGED_IN_SALT'/c \define('LOGGED_IN_SALT', '$(pwgen -s -1 64)');" $wpcon
sudo sed -i "/'NONCE_SALT'/c \define('NONCE_SALT', '$(pwgen -s -1 64)');" $wpcon
# Redis Conf
sudo sed -i "/stop editing/i \define('WP_REDIS_SELECTIVE_FLUSH', true);" /var/www/$domain/wp-config.php
sudo sed -i "/stop editing/i \define('WP_CACHE_KEY_SALT', 'redis_object_cache_for_wp_$domain');" /var/www/$domain/wp-config.php
sudo sed -i "/stop editing/i \define('WP_REDIS_SELECTIVE_FLUSH', true);" $wpcon
sudo sed -i "/stop editing/i \define('WP_CACHE_KEY_SALT', 'redis_object_cache_for_wp_$domain');" $wpcon
# Multisite wp-config
if [[ -n $wpsubdir || -n $wpsubdom ]]; then
sudo sed -i "/stop editing/i \define('WP_ALLOW_MULTISITE', true);" /var/www/$domain/wp-config.php
sudo sed -i "/stop editing/i \#define('MULTISITE', true);" /var/www/$domain/wp-config.php
sudo sed -i "/stop editing/i \#define('DOMAIN_CURRENT_SITE', '$domain');" /var/www/$domain/wp-config.php
sudo sed -i "/stop editing/i \#define('PATH_CURRENT_SITE', '/');" /var/www/$domain/wp-config.php
sudo sed -i "/stop editing/i \#define('SITE_ID_CURRENT_SITE', 1);" /var/www/$domain/wp-config.php
sudo sed -i "/stop editing/i \#define('BLOG_ID_CURRENT_SITE', 1);" /var/www/$domain/wp-config.php
sudo sed -i "/stop editing/i \define('WP_ALLOW_MULTISITE', true);" $wpcon
sudo sed -i "/stop editing/i \#define('MULTISITE', true);" $wpcon
sudo sed -i "/stop editing/i \#define('DOMAIN_CURRENT_SITE', '$domain');" $wpcon
sudo sed -i "/stop editing/i \#define('PATH_CURRENT_SITE', '/');" $wpcon
sudo sed -i "/stop editing/i \#define('SITE_ID_CURRENT_SITE', 1);" $wpcon
sudo sed -i "/stop editing/i \#define('BLOG_ID_CURRENT_SITE', 1);" $wpcon
fi
if [[ -n $wpsubdir ]]; then
sudo sed -i "/stop editing/i \#define('SUBDOMAIN_INSTALL', false);" /var/www/$domain/wp-config.php
sudo sed -i "/stop editing/i \#define('SUBDOMAIN_INSTALL', false);" $wpcon
elif [[ -n $wpsubdom ]]; then
sudo sed -i "/stop editing/i \#define('SUBDOMAIN_INSTALL', true);" /var/www/$domain/wp-config.php
sudo sed -i "/stop editing/i \#define('SUBDOMAIN_INSTALL', true);" $wpcon
sudo sed -i "/server_name /c \ server_name $domain *.$domain;" /etc/nginx/sites-available/$domain
fi
fi
@ -470,6 +481,7 @@ deletesite() {
# Delete site files
sudo rm -rf /etc/nginx/apps.d/$domain*.conf
sudo rm -rf /etc/nginx/sites-available/$domain
sudo rm -rf /etc/nginx/sites-enabled/$domain
sudo rm -rf /var/www/$domain
@ -484,7 +496,7 @@ createsite() {
# Check domain and then prevent reserved characters for file names.
domain_check $domain
domain=$(echo $domain | sed "s/[^\.0-9A-Za-z\-]/_/g" | sed "s/^[\.]/_/g" | sed "s/\.\./_/g")
# Check for duplicate sites
if [[ -a /etc/nginx/sites-available/$domain ]]; then
echo "${red}[ERROR] Can not create site${blu} $domain ${red}because already exists!${end}"

View file

@ -3,7 +3,7 @@
# Site Manager Plugin (Create, delete and de/activate)
# Syntax: site <domain> <option> <argument>
# Options: -html, -php, -mysql, -wp, -wpsubdir, -wpsubdom, -parked, -proxy, -on, -off, -delete, -delete-all, -list, -cache, -ssl, -force-redirect, -yoast-sitemap
# Arguments: -cache, -root, -root-path, -subdomain, -ignore-ssl, -wildcard, -raw, -external-db, -revoke, -ssl-crt, -ssl-key, -ssl-ocsp
# Arguments: -cache, -root, -root-path, -subdomain, -ignore-ssl, -wildcard, -raw, -external-db, -revoke, -ssl-crt, -ssl-key, -ssl-ocsp, -subfolder
# shopt is necessary for this kind !(html|22222) of patterns
shopt -s extglob
@ -104,6 +104,14 @@ if [[ -n $wp || -n $wpsubdir || -n $wpsubdom || -n $mysql ]]; then
fi
fi
fi
# Check for valid WP subfolder
[[ -z $subfolder ]] && subfolder=""
if [[ -n $subfolder && $type != [123] ]]; then
echo "${red}[ERROR] Subfolder option is only supported for WordPress sites!${end}"
exit 1
fi
# Check for stack packages
[[ $type == [123] || -n $php ]] && check_for_php -ask
[[ $type == [24] ]] && check_for_mysql -ask
@ -204,10 +212,52 @@ elif [[ -n $html && -n $domain ]]; then
# Create WP site
elif [[ -n $wp && -n $domain ]]; then
createsite
sudo sed -i '/locations.conf/i \ include common/wpcommon.conf;' /etc/nginx/sites-available/$domain
[[ $(conf_read wp-admin-auth) == "purged" ]] && sudo httpauth -wp-admin=off -site=$domain
[[ $(conf_read yoast-sitemap) != "purged" ]] && sudo site $domain -yoast-sitemap=on
if [[ -z $subfolder ]]; then
createsite
sudo sed -i '/locations.conf/i \ include common/wpcommon.conf;' /etc/nginx/sites-available/$domain
[[ $(conf_read wp-admin-auth) == "purged" ]] && sudo httpauth -wp-admin=off -site=$domain
[[ $(conf_read yoast-sitemap) != "purged" ]] && sudo site $domain -yoast-sitemap=on
else
if [[ -n $subfolder && ! ( $subfolder =~ ^\/([A-Za-z0-9_\/\-]+)?[^\/]$ ) ]]; then
echo "${red}[ERROR] Please, enter a valid value for subfolder!${end}"
exit 1
fi
if [[ -a /etc/nginx/sites-available/$domain && -n $subfolder && $type == [123] && -d /var/www/$domain/htdocs$subfolder ]]; then
echo "${red}[ERROR] Subfolder ${blu}'$subfolder'${red} already exists!${end}"
exit 1
elif [[ -a /etc/nginx/sites-available/$domain && -n $subfolder && $type == [123] && ! -d /var/www/$domain/htdocs$subfolder ]]; then
wpinstall
echo "${gre}WordPress has been successfully installed in${blu} $domain$subfolder ${gre}subfolder!${end}"
else
createsite
fi
subname=$(echo $subfolder | sed "s/\//_/g")
sudo sed -i "/# WebinolyCustom$/a \ include apps.d/$domain$subname-php.conf;" /etc/nginx/sites-available/$domain
sudo cp /etc/nginx/common/php.conf /etc/nginx/apps.d/$domain$subname-php.conf
sudo cp /etc/nginx/common/wpfc.conf /etc/nginx/apps.d/$domain$subname-wpfc.conf
sudo cp /etc/nginx/common/wpcommon.conf /etc/nginx/apps.d/$domain$subname-wpcommon.conf
sudo cp /etc/nginx/common/locations.conf /etc/nginx/apps.d/$domain$subname-locations.conf
#sudo cp /etc/nginx/common/yoast-sitemap.conf /etc/nginx/apps.d/$domain$subname-yoast-sitemap.conf
sudo sed -i "/^location \/ {/,/^}$/{/.*/d}" /etc/nginx/apps.d/$domain$subname-php.conf
sudo sed -i "/^location \/ {/,/^}$/{/.*/d}" /etc/nginx/apps.d/$domain$subname-wpfc.conf
sudo sed -i '/DO NOT MODIFY,/r /opt/webinoly/templates/template-site-wpsubfolder' /etc/nginx/apps.d/$domain$subname-php.conf
sudo cat /opt/webinoly/templates/template-site-wpsubfolder >> /etc/nginx/apps.d/$domain$subname-wpfc.conf
sudo sed -i "s#subfolder#$subfolder#g" /etc/nginx/apps.d/$domain$subname-php.conf
sudo sed -i "s#subfolder#$subfolder#g" /etc/nginx/apps.d/$domain$subname-wpfc.conf
sudo sed -i "s/domain/$domain/g" /etc/nginx/apps.d/$domain$subname-php.conf
sudo sed -i "s/domain/$domain/g" /etc/nginx/apps.d/$domain$subname-wpfc.conf
sudo sed -i "s/subname/$subname/g" /etc/nginx/apps.d/$domain$subname-php.conf
sudo sed -i "s/subname/$subname/g" /etc/nginx/apps.d/$domain$subname-wpfc.conf
sed -ri "s/^location(.*)\/([a-z].*)$/location\1subfolder\/\2/" /etc/nginx/apps.d/$domain$subname-locations.conf
sed -ri "s/location(.*) \/(.*) \{$/location\1 subfolder\/\2 \{/" /etc/nginx/apps.d/$domain$subname-wpcommon.conf
sudo sed -i "s#subfolder#$subfolder#g" /etc/nginx/apps.d/$domain$subname-locations.conf
sudo sed -i "s#subfolder#$subfolder#g" /etc/nginx/apps.d/$domain$subname-wpcommon.conf
fi
# Create WP Multisite (Sub-directory)
elif [[ -n $wpsubdir && -n $domain ]]; then
@ -332,6 +382,18 @@ elif [[ -n $delete && -a /etc/nginx/sites-available/$domain ]]; then
if [[ $domain == "default" || $domain == $(conf_read tools-port) ]]; then
echo "${red}[ERROR] System sites can not be removed!${end}"
exit 1
elif [[ -n $subfolder ]]; then
if [[ ! -a /var/www/$domain/htdocs$subfolder/wp-config.php ]]; then
echo "${red}[ERROR] Subfolder not found or is not a WP subsite!${end}"
exit 1
fi
db_delete $domain
subname=$(echo $subfolder | sed "s/\//_/g")
sudo rm -rf /var/www/$domain/htdocs$subfolder
sudo rm -rf /etc/nginx/apps.d/$domain$subname*.conf
sudo sed -i "/# WebinolyCustom/,/# WebinolyCustomEnd/{/$domain$subname-php.conf/d}" /etc/nginx/sites-available/$domain
sudo sed -i "/# WebinolyCustom/,/# WebinolyCustomEnd/{/$domain$subname-wpfc.conf/d}" /etc/nginx/sites-available/$domain
echo "${gre}Subfolder${blu} $subfolder ${gre}from${blu} $domain ${gre}has been successfully deleted!${end}"
else
deletesite
fi

View file

@ -0,0 +1,10 @@
location subfolder/ {
try_files $uri $uri/ subfolder/index.php?q=$uri&$args;
include apps.d/domainsubname-wpcommon.conf;
include apps.d/domainsubname-locations.conf;
include common/headers-http.conf;
include common/headers-html.conf;
include /var/www/domain.com/*subname-nginx.conf;
}