2082 lines
94 KiB
Bash
2082 lines
94 KiB
Bash
#!/bin/bash
|
|
|
|
# This is a library for Site Manager Plugin
|
|
# Functions for site creation and delete
|
|
source /opt/webinoly/lib/site-ssl
|
|
|
|
|
|
warning_messages() {
|
|
# Warning Messages
|
|
if [[ $warning_mes != "true" ]]; then
|
|
if [[ $type == [123] && $dbhost != "localhost" && $(conf_read dbrole) =~ ^(all|grant)$ ]]; then
|
|
echo "${dim}[WARNING] You have set '$(conf_read dbrole)' as default privileges, some external DB services may not support it!${end}"
|
|
fi
|
|
if [[ $type == [123] && $(conf_read wp-admin-auth) != "purged" && ! -s /etc/nginx/.htpasswd && ! -s /etc/nginx/apps.d/.htpasswd-$domain ]]; then
|
|
echo "${dim}[WARNING] HTTP Authentication Credentials not found and you may need it to complete the WordPress installation process!!${end}"
|
|
fi
|
|
if [[ $(conf_read login-www-data) != "true" && (( -z $forward && -z $proxy && -z $parked && -z $mysql ) || ( -n $mysql && -n $domain )) ]]; then
|
|
echo "${dim}[WARNING] Login for www-data is not enabled and you may need it to upload your site files!${end}"
|
|
fi
|
|
warning_mes="true"
|
|
fi
|
|
}
|
|
|
|
wp_cache_plugins() {
|
|
api-events_update si3
|
|
|
|
if [[ ! -d /var/www/$domain/htdocs$subfolder/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
|
|
if [[ -s /var/www/$domain/htdocs/nginx-helper-plugin.zip ]]; then
|
|
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!"
|
|
echo " Please, activate this plugin for a better experience with FastCgi Cache."
|
|
echo "${blu} ** IMPORTANT - Plugin Settings **"
|
|
echo "- The “Caching Method” should be set to “Nginx FastCgi Cache”."
|
|
echo "- Support for purge/url method is a premium feature only included in NGINX Plus (not-free) and we recommend not to trust in solutions or tools that use third-party NGINX modules to offer this feature."
|
|
echo "- The Purge Method should be set to “Delete local server cache file”."
|
|
echo "${end}"
|
|
else
|
|
echo "${red}[ERROR] Downloading Nginx-Helper plugin failed!${end}"
|
|
fi
|
|
else
|
|
echo "${gre}Nginx Helper Plugin is already installed!${end}"
|
|
fi
|
|
|
|
if [[ ! -d /var/www/$domain/htdocs$subfolder/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
|
|
if [[ -s /var/www/$domain/htdocs/redis-cache-plugin.zip ]]; then
|
|
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!"
|
|
echo " Please, activate this plugin for a better experience with WordPress Object Cache."
|
|
echo "${blu} ** IMPORTANT - Plugin Settings **"
|
|
echo "- Go to “Menu > Settings > Redis” and be sure that Object Cache is enabled. "
|
|
echo "${end}"
|
|
else
|
|
echo "${red}[ERROR] Downloading Redis-Cache plugin failed!${end}"
|
|
fi
|
|
else
|
|
echo "${gre}Redis Object Cache Plugin is already installed!${end}"
|
|
fi
|
|
|
|
sudo find /var/www/$domain/htdocs$subfolder/wp-content/plugins -type f -print0 | sudo xargs -r -0 chmod 644
|
|
sudo chown -R www-data:www-data /var/www/$domain/htdocs$subfolder/wp-content/plugins
|
|
}
|
|
|
|
|
|
wpinstall() {
|
|
api-events_update si2
|
|
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 AUTOGENPASS_WPDB=`pwgen -s -1 16`
|
|
local setupmysql="y"
|
|
local setupwp="y"
|
|
local dbhost="localhost"
|
|
local dbname=$dom
|
|
local dbuser=$dom
|
|
local dbpass=$AUTOGENPASS_WPDB
|
|
local dbpref="wp_"
|
|
|
|
# WP Unattended
|
|
if [[ $type == [35] ]]; then
|
|
[[ $setmsqcustom == "false" ]] && setupmysql="n"
|
|
[[ $setpwpcustom == "false" ]] && setupwp="n"
|
|
|
|
dbhost="$dbhostcustom"
|
|
dbname="$dbnamecustom"
|
|
dbuser="$dbusercustom"
|
|
dbpass="$dbpasscustom"
|
|
dbpref="$dbprefcustom"
|
|
dburoot="$exusercustom"
|
|
dbproot="$expasscustom"
|
|
fi
|
|
|
|
echo "${blu}"
|
|
if [[ $type == 1 ]]; then
|
|
echo "Do you need to setup new MySQL database? [Y/n]"
|
|
while read -r -n 1 -s setupmysql; do
|
|
setupmysql=${setupmysql:-y}
|
|
[[ $setupmysql = [YyNn] ]] && break
|
|
done
|
|
echo "Create WP-Config file automatically? [Y/n]"
|
|
while read -r -n 1 -s setupwp; do
|
|
setupwp=${setupwp:-y}
|
|
[[ $setupwp = [YyNn] ]] && break
|
|
done
|
|
fi
|
|
|
|
# Just create DB, not install WP
|
|
[[ $type == [045] ]] && setupwp="n"
|
|
|
|
# Download WP (latest version)
|
|
if [[ $type == [123] ]]; then
|
|
echo "${dim}Downloading WordPress...${end}${blu}"
|
|
sudo wget --timeout=15 -t 1 -qrO /var/www/$domain/htdocs/wp.tar.gz https://wordpress.org/latest.tar.gz
|
|
if [[ ! -s /var/www/$domain/htdocs/wp.tar.gz ]]; then
|
|
echo "${red}[ERROR] Downloading WordPress failed!${end}"
|
|
exit 1
|
|
fi
|
|
|
|
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
|
|
|
|
# Generate and auto-fill wp-config.php and also create database
|
|
if [[ $setupmysql == [yY] || $setupwp == [yY] ]]; then
|
|
local done="0"
|
|
|
|
while [[ $done != "1" ]]
|
|
do
|
|
done="1"
|
|
echo "${blu}"
|
|
|
|
# Ask DB data or suggest default values
|
|
[[ $(conf_read mysql) == "true" ]] && local dbhost_suggested="localhost" || local dbhost_suggested="external.host:port"
|
|
|
|
if [[ -n $(conf_read external-dbh) && -n $(conf_read external-dbu) && -n $(conf_read external-dbp) ]]; then
|
|
[[ -n $(conf_read external-dbx) ]] && local dbhost_suggested="$(conf_read external-dbh):$(conf_read external-dbx)" || local dbhost_suggested=$(conf_read external-dbh)
|
|
dburoot=$(conf_read external-dbu)
|
|
dbproot=$(conf_read external-dbp)
|
|
fi
|
|
|
|
[[ $type == [2345] ]] || read -p "Database Host [${dbhost_suggested}]: " dbhost
|
|
dbhost=${dbhost:-$dbhost_suggested}
|
|
[[ ${dbhost,,} == "localhost" && $setupmysql == [yY] ]] && check_for_mysql
|
|
|
|
# In case of external db
|
|
if [[ $dbhost != "localhost" ]]; then
|
|
# DB host validation
|
|
is_url $dbhost -split
|
|
if [[ -n $url_path ]]; then
|
|
echo "${red}[ERROR] Invalid database host/port!${dim} (Folders in DB host are not supported: ${dbhost}) ${end}"
|
|
url_path=""
|
|
done="0"
|
|
[[ $type == [2345] ]] && exit 1 || continue 1
|
|
elif [[ $(is_url $dbhost) =~ ^(http|https|ip|true)$ ]]; then
|
|
local dburl=$url_host
|
|
local dbport=$url_port
|
|
else
|
|
echo "${red}[ERROR] Invalid database host/port!${dim} ($dbhost) ${end}"
|
|
done="0"
|
|
[[ $type == [2345] ]] && exit 1 || continue 1
|
|
fi
|
|
|
|
# Default external DB port
|
|
if [[ -z $dbport ]]; then
|
|
read -p "Database Host Port [3306]: " dbport
|
|
dbport=${dbport:-3306}
|
|
dbhost="${dbhost}:${dbport}"
|
|
fi
|
|
fi
|
|
|
|
# Check for MySQL Connection
|
|
if [[ $setupmysql == [yY] ]]; then
|
|
echo "${blu}"
|
|
|
|
if [[ $dbhost != "localhost" && ( $type == [135] && ( -z $dburoot || -z $dbproot )) ]]; then
|
|
read -p "External DB username: " dburoot
|
|
read -p "External DB password: " dbproot
|
|
echo ""
|
|
fi
|
|
|
|
if [[ -n $retry && $retry -ge 3 ]]; then
|
|
setupmysql="N"
|
|
local db_error_flag="true"
|
|
echo "${red}[ERROR] Database creation failed after 3 retries! ${blu}"
|
|
elif [[ ( $dbhost == "localhost" && $(check_mysql_connection localhost) != "true" ) || ( $dbhost != "localhost" && $(check_mysql_connection $dburl $dbport $dburoot $dbproot) != "true" ) ]]; then
|
|
# Reset variables
|
|
local dburl=""
|
|
local dbport=""
|
|
local dburoot=""
|
|
local dbproot=""
|
|
|
|
# Prevent infinite loops, just 3 intents!
|
|
[[ -z $retry ]] && local retry=0
|
|
local retry=$(($retry+1))
|
|
|
|
# While loop
|
|
done="0"
|
|
echo "${blu}"
|
|
continue 1
|
|
fi
|
|
fi
|
|
|
|
# ************* Ask for DB Name and validate data *************** #
|
|
dom=$(dbword_check $dom)
|
|
[[ $type == [2345] ]] || read -p "Database Name [$dom]:" dbname
|
|
dbname=${dbname:-$dom}
|
|
|
|
# Check for duplicate database names, if already exists ask for another dbname to create the new db
|
|
if [[ $setupmysql == [yY] ]]; then
|
|
local newdbname="$dbname"
|
|
while [[ $dbname == $newdbname && $dbreuse != [yY] ]]; do
|
|
if [[ $dbhost == "localhost" ]]; then
|
|
# https://stackoverflow.com/questions/7364709/bash-script-check-if-mysql-database-exists-perform-action-based-on-result
|
|
local newdbname=$(sudo mysqlshow --user=admin -p$ADMIN_PASS | grep -ow $dbname)
|
|
else
|
|
local newdbname=$(sudo mysqlshow -h "$dburl" -P "$dbport" -u"$dburoot" -p"$dbproot" | grep -ow $dbname)
|
|
fi
|
|
|
|
if [[ $newdbname == $dbname || $dbname != $(dbword_check $dbname) ]]; then
|
|
echo ""
|
|
if [[ $newdbname == $dbname ]]; then
|
|
echo "${red}[ERROR] Database ${blu}$dbname ${red}already exists!${end}"
|
|
[[ $type == [35] ]] && exit 1 # Unattended sites should exit instead of asking
|
|
echo "${blu}Do you want to use this DB in your new site? [y/N]"
|
|
while read -r -n 1 -s dbreuse; do
|
|
local dbreuse=${dbreuse:-n}
|
|
[[ $dbreuse == [YyNn] ]] && break
|
|
done
|
|
fi
|
|
if [[ $dbname != $(dbword_check $dbname) ]]; then
|
|
if [[ $type == [24] ]]; then
|
|
newdbname="Webinoly_$(pwgen -s -1)"
|
|
dbname="$newdbname"
|
|
continue 1
|
|
fi
|
|
echo "${red}[ERROR] The DB Name can not be a reserved word or should only contain allowed characters!${blu}"
|
|
dbreuse="n"
|
|
fi
|
|
|
|
if [[ $dbreuse != [yY] ]]; then
|
|
echo ""
|
|
read -p "Please enter a new DB_NAME for your Database: " newdbname
|
|
[[ -z "$newdbname" ]] && newdbname="$dbname"
|
|
dbname="$newdbname"
|
|
elif [[ $dbreuse == [yY] ]]; then
|
|
# If you want to use the DB that already exist, abort DB creation.
|
|
setupmysql="n"
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# ************* Ask for DB User and validate data *************** #
|
|
[[ $type == [2345] ]] || read -p "Database User [$dom]:" dbuser
|
|
dbuser=${dbuser:-$dom}
|
|
|
|
# Check for duplicate database users, if already exists ask for another dbuser to create the new user
|
|
if [[ $setupmysql == [yY] || $dbreuse == [yY] ]]; then
|
|
local newdbuser=$dbuser
|
|
while [[ $dbuser == $newdbuser && $dbureuse != [yY] ]]; do
|
|
if [[ $dbhost == "localhost" ]]; then
|
|
# https://stackoverflow.com/questions/7364709/bash-script-check-if-mysql-database-exists-perform-action-based-on-result
|
|
[[ -z $(sudo mysql --connect-timeout=10 --user=admin -p$ADMIN_PASS -e "SELECT User FROM mysql.user;" | grep -ow $dbuser) ]] && newdbuser=""
|
|
else
|
|
[[ -z $(sudo mysql --connect-timeout=10 -h "$dburl" -P "$dbport" -u"$dburoot" -p"$dbproot" -e "SELECT User FROM mysql.user;" | grep -ow $dbuser) ]] && newdbuser=""
|
|
fi
|
|
|
|
if [[ $newdbuser == $dbuser || $dbuser != $(dbword_check $dbuser user) ]]; then
|
|
echo ""
|
|
if [[ $newdbuser == $dbuser ]]; then
|
|
echo "${red}[ERROR] User ${blu}$dbuser ${red}already exists!${end}"
|
|
[[ $type == [35] ]] && exit 1 # Unattended sites should exit instead of asking
|
|
echo "${blu}Do you want to use this DB User for your new site? [y/N]"
|
|
while read -r -n 1 -s dbureuse; do
|
|
local dbureuse=${dbureuse:-n}
|
|
[[ $dbureuse == [YyNn] ]] && break
|
|
done
|
|
fi
|
|
if [[ $dbuser != $(dbword_check $dbuser user) ]]; then
|
|
if [[ $type == [24] ]]; then
|
|
newdbuser="Webinoly_$(pwgen -s -1)"
|
|
dbuser=$newdbuser
|
|
continue 1
|
|
fi
|
|
echo "${red}[ERROR] The DB User can not be a reserved word or should only contain allowed characters!${blu}"
|
|
dbureuse="n"
|
|
fi
|
|
|
|
if [[ $dbureuse != [yY] ]]; then
|
|
echo ""
|
|
read -p "Please enter a new DB_User for your Database: " newdbuser
|
|
[[ -z "$newdbuser" ]] && newdbuser=$dbuser
|
|
dbuser=$newdbuser
|
|
elif [[ $dbureuse == [yY] ]]; then
|
|
# If you want to use a user that already exist, abort DB creation.
|
|
setupmysql="n"
|
|
fi
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if [[ $type != [2345] || $dbreuse == [yY] || $dbureuse == [yY] ]]; then
|
|
if [[ $dbureuse == [yY] ]]; then
|
|
read -p "${blu}Current Password:" dbpass
|
|
if [[ -z $dbpass ]]; then
|
|
done="0"
|
|
continue 1
|
|
fi
|
|
else
|
|
read -p "${blu}Create Password [$AUTOGENPASS_WPDB]:" dbpass
|
|
dbpass=${dbpass:-$AUTOGENPASS_WPDB}
|
|
fi
|
|
|
|
# Not ask for wp_prefix when type=0 (mysql only site)
|
|
[[ $type == 1 ]] && read -p "Database Prefix [wp_]:" dbpref
|
|
dbpref=${dbpref:-wp_}
|
|
echo "${end}"
|
|
fi
|
|
|
|
|
|
# If DBuser will be reused, we need to check if data is valid to establish connection
|
|
if [[ $dbureuse == [yY] && (( $dbhost == "localhost" && $(check_mysql_connection localhost $dbuser $dbpass) != "true" ) || ( $dbhost != "localhost" && $(check_mysql_connection $dburl $dbport $dbuser $dbpass) != "true" )) ]]; then
|
|
done="0"
|
|
dbreuse=""
|
|
dbureuse=""
|
|
setupmysql="Y"
|
|
continue 1
|
|
elif [[ $dbureuse == [yY] ]]; then
|
|
echo "${gre}${dim}DB name and user successfully validated!${end}"
|
|
fi
|
|
# If only DBname will be reuse it, we need to reassing a new dbuser to this DB.
|
|
[[ $setupmysql != [yY] && $dbreuse == [yY] && $dbureuse != [yY] ]] && local dbreassign="db"
|
|
[[ $setupmysql != [yY] && $dbreuse != [yY] && $dbureuse == [yY] ]] && local dbreassign="dbuser"
|
|
|
|
# In case of custom db role
|
|
echo "${end}"
|
|
[[ -n $db_role ]] && db_role_check $db_role unattended
|
|
[[ -z $db_role && -n $(conf_read dbrole) ]] && db_role_check $(conf_read dbrole) unattended # Just to display the warning message!
|
|
echo "${blu}"
|
|
|
|
# Database Configuration!
|
|
if [[ $setupmysql == [yY] || -n $dbreassign ]] ; then
|
|
if [[ $dbhost == "localhost" && -z $dbreassign ]]; then
|
|
# Starting with MySQL 8 you no longer can (implicitly) create a user using the GRANT command.
|
|
sudo mysql --connect-timeout=10 --user=admin -p$ADMIN_PASS <<_EOF_
|
|
CREATE DATABASE $dbname;
|
|
CREATE USER '${dbuser}'@'localhost' IDENTIFIED BY '${dbpass}';
|
|
GRANT $(db_user_role) on ${dbname}.* to '${dbuser}'@'localhost';
|
|
FLUSH PRIVILEGES;
|
|
_EOF_
|
|
|
|
elif [[ -z $dbreassign ]]; then
|
|
# We can not use GRAN ALL PRIVILIGES with AWS RDS, that's why are all separate.
|
|
sudo mysql --connect-timeout=10 -h "$dburl" -P "$dbport" -u"$dburoot" -p"$dbproot" <<_EOF_
|
|
CREATE DATABASE ${dbname};
|
|
CREATE USER '${dbuser}'@'%' IDENTIFIED BY '${dbpass}';
|
|
GRANT $(db_user_role) on ${dbname}.* to '${dbuser}'@'%';
|
|
FLUSH PRIVILEGES;
|
|
_EOF_
|
|
|
|
|
|
# Reuse Database
|
|
elif [[ $dbhost == "localhost" && $dbreassign == "db" ]]; then
|
|
# Starting with MySQL 8 you no longer can (implicitly) create a user using the GRANT command.
|
|
sudo mysql --connect-timeout=10 --user=admin -p$ADMIN_PASS <<_EOF_
|
|
CREATE USER '${dbuser}'@'localhost' IDENTIFIED BY '${dbpass}';
|
|
GRANT $(db_user_role) on ${dbname}.* to '${dbuser}'@'localhost';
|
|
FLUSH PRIVILEGES;
|
|
_EOF_
|
|
|
|
elif [[ $dbreassign == "db" ]]; then
|
|
# We can not use GRAN ALL PRIVILIGES with AWS RDS, that's why are all separate.
|
|
sudo mysql --connect-timeout=10 -h "$dburl" -P "$dbport" -u"$dburoot" -p"$dbproot" <<_EOF_
|
|
CREATE USER '${dbuser}'@'%' IDENTIFIED BY '${dbpass}';
|
|
GRANT $(db_user_role) on ${dbname}.* to '${dbuser}'@'%';
|
|
FLUSH PRIVILEGES;
|
|
_EOF_
|
|
|
|
|
|
# Reuse User
|
|
elif [[ $dbhost == "localhost" && $dbreassign == "dbuser" ]]; then
|
|
# Starting with MySQL 8 you no longer can (implicitly) create a user using the GRANT command.
|
|
sudo mysql --connect-timeout=10 --user=admin -p$ADMIN_PASS <<_EOF_
|
|
CREATE DATABASE ${dbname};
|
|
GRANT $(db_user_role) on ${dbname}.* to '${dbuser}'@'localhost';
|
|
FLUSH PRIVILEGES;
|
|
_EOF_
|
|
|
|
elif [[ $dbreassign == "dbuser" ]]; then
|
|
# We can not use GRAN ALL PRIVILIGES with AWS RDS, that's why are all separate.
|
|
sudo mysql --connect-timeout=10 -h "$dburl" -P "$dbport" -u"$dburoot" -p"$dbproot" <<_EOF_
|
|
CREATE DATABASE ${dbname};
|
|
GRANT $(db_user_role) on ${dbname}.* to '${dbuser}'@'%';
|
|
FLUSH PRIVILEGES;
|
|
_EOF_
|
|
|
|
|
|
else
|
|
# Just in case
|
|
echo "${red}[ERROR] Whoops...Something went wrong!${end}"
|
|
fi
|
|
|
|
if [ $? != "0" ]; then
|
|
done="0"
|
|
echo "${red}============================================"
|
|
echo " [Error]: Database configuration failed."
|
|
echo "============================================${end}"
|
|
echo ""
|
|
elif [[ $dbreassign == "db" ]]; then
|
|
echo "${gre}${dim}Database successfully reassigned and configured!${end}"
|
|
elif [[ $dbreassign == "dbuser" ]]; then
|
|
echo "${gre}${dim}DB User successfully reassigned and configured!${end}"
|
|
fi
|
|
fi
|
|
|
|
if [[ $done != "1" ]]; then
|
|
echo "${red}Some error ocurred during Database Configuration."
|
|
echo "${blu}Retry [Y/n]?"
|
|
while read -r -n 1 -s done; do
|
|
done=${done:-y}
|
|
[[ $done = [YyNn] ]] && break
|
|
done
|
|
[[ $done == [nN] ]] && done="1"
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Display data just to confirm the DB creation.
|
|
if [[ $type == [45] && $db_error_flag != "true" ]]; then
|
|
echo "${blu}"
|
|
echo "Database Host: $dbhost"
|
|
echo "Database Name: $dbname"
|
|
echo "Database User: $dbuser"
|
|
echo "Password: $dbpass"
|
|
echo "${gre}"
|
|
echo "Database successfully created!"
|
|
fi
|
|
echo "${end}"
|
|
|
|
#WP-Config.php auto-setup
|
|
if [[ $setupwp == [yY] ]] ; then
|
|
[[ -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
|
|
wp_config_write $domain DB_NAME \'$dbname\' $subfolder
|
|
wp_config_write $domain DB_USER \'$dbuser\' $subfolder
|
|
wp_config_write $domain DB_PASSWORD \'$dbpass\' $subfolder
|
|
wp_config_write $domain DB_HOST \'$dbhost\' $subfolder
|
|
|
|
sudo sed -i "/table_prefix/c \$table_prefix = '$dbpref';" $wpcon
|
|
|
|
wp_config_write $domain AUTH_KEY \'$(pwgen -s -1 64)\' $subfolder
|
|
wp_config_write $domain SECURE_AUTH_KEY \'$(pwgen -s -1 64)\' $subfolder
|
|
wp_config_write $domain LOGGED_IN_KEY \'$(pwgen -s -1 64)\' $subfolder
|
|
wp_config_write $domain NONCE_KEY \'$(pwgen -s -1 64)\' $subfolder
|
|
wp_config_write $domain AUTH_SALT \'$(pwgen -s -1 64)\' $subfolder
|
|
wp_config_write $domain SECURE_AUTH_SALT \'$(pwgen -s -1 64)\' $subfolder
|
|
wp_config_write $domain LOGGED_IN_SALT \'$(pwgen -s -1 64)\' $subfolder
|
|
wp_config_write $domain NONCE_SALT \'$(pwgen -s -1 64)\' $subfolder
|
|
|
|
# Redis Conf
|
|
wp_config_write $domain WP_REDIS_SELECTIVE_FLUSH true $subfolder
|
|
wp_config_write $domain WP_CACHE_KEY_SALT \'wp_$domain$(echo $subfolder | sed "s/\//_/g")\' $subfolder
|
|
fi
|
|
|
|
warning_messages
|
|
}
|
|
|
|
|
|
db_delete() {
|
|
# Example: db_delete $domain $subfolder
|
|
wp_conf_retrieve $1 true false $2
|
|
[[ -z $wp_config ]] && return
|
|
|
|
if [[ -z $wp_dbhost || -z $wp_dbname || -z $wp_dbuser ]]; then
|
|
echo "${red}[ERROR] Database${blu} ${1}${2} ${red}cannot be deleted! ${dim}(WP configuration corrupted)${end}"
|
|
return
|
|
elif [[ ( $wp_dbhost == "localhost" && ( $(conf_read mysql) != "true" || $(check_mysql_connection localhost) != "true" )) || ( $wp_dbhost != "localhost" && $(check_mysql_connection $extdb_url $extdb_port $extdb_user $extdb_pass) != "true" ) ]]; then
|
|
echo "${red}[ERROR] Database${blu} ${1}${2} ${red}cannot be deleted! ${dim}(DB Connection failed)${end}"
|
|
return
|
|
fi
|
|
|
|
dbsetup="DELETE FROM mysql.user WHERE User='$wp_dbuser';DROP DATABASE IF EXISTS $wp_dbname;DELETE FROM mysql.db WHERE Db='$wp_dbname' OR Db='$wp_dbname\\_%';FLUSH PRIVILEGES;"
|
|
if [[ $wp_dbhost == "localhost" ]]; then
|
|
sudo mysql --connect-timeout=10 --user=admin -p$ADMIN_PASS -e "$dbsetup"
|
|
echo "${gre}${dim}Database of your site ${blu}${1}${2}${gre} has been successfully deleted! ${end}"
|
|
else
|
|
if [[ $extdb_user == "root" && -z $extdb_pass ]]; then
|
|
echo "${red}Action aborted, database not deleted!${end}"
|
|
else
|
|
sudo mysql --connect-timeout=10 -h "$extdb_url" -P "$extdb_port" -u"$extdb_user" -p"$extdb_pass" -e "$dbsetup"
|
|
echo "${gre}${dim}Database of your site ${blu}${1}${2}${gre} has been successfully deleted! ${end}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
deletesite() {
|
|
if [[ $domain == $(conf_read tools-site) && -z $delete_all && ${delete,,} != "force" ]]; then
|
|
echo "${red}[ERROR] Can not delete a site that is assigned to access your server tools (Tools-Site)!${end}"
|
|
exit 1
|
|
elif [[ $domain == $(conf_read default-site) && -z $delete_all && ${delete,,} != "force" ]]; then
|
|
echo "${red}[ERROR] Can not delete a site that is set as default site!${end}"
|
|
exit 1
|
|
fi
|
|
if [[ $(conf_read smtp) == "true" && -s /etc/mailname && $domain == $(sudo cat /etc/mailname | head -n 1) ]]; then
|
|
echo "${red}[WARNING] This site is set to be used as main site in your SMTP configuration."
|
|
fi
|
|
if [[ $domain == $(conf_read tools-site) && ( -n $delete_all || ${delete,,} == "force" ) ]]; then
|
|
echo "${red}[WARNING] This site is set to be used to access your server tools. Deleting this site can cause unexpected behaviour in your server."
|
|
sudo webinoly -tools-site=default
|
|
fi
|
|
if [[ $domain == $(conf_read default-site) && ( -n $delete_all || ${delete,,} == "force" ) ]]; then
|
|
echo "${red}[WARNING] This site is set as default site. Deleting this site can cause unexpected behaviour in your server."
|
|
sudo webinoly -default-site=default
|
|
fi
|
|
if [[ $(is_parked $domain) == "true" ]]; then
|
|
echo "${dim}This site is a parked site and main site data will not be removed.${end}"
|
|
fi
|
|
|
|
[[ ${delete,,} == "force" ]] && local dbdel="Y"
|
|
[[ ${delete,,} == "keep-db" ]] && local dbdel="N"
|
|
|
|
# Check if site contains WP in subfolders.
|
|
if [[ -z $dbdel || $dbdel = [Yy] ]]; then
|
|
for site in "/etc/nginx/apps.d/${domain}_"*-wpcommon.conf
|
|
do
|
|
subfolder="/$(echo $site | cut -f 2- -d "_" -s | cut -f -1 -d "-" -s | sed "s/_/\//g")"
|
|
if [[ -n $subfolder && -f /var/www/$domain/htdocs$subfolder/wp-config.php ]]; then
|
|
if ! [[ ${delete,,} =~ ^(force|keep-db)$ ]]; then
|
|
echo "${blu}Delete Database [Y/n]? ${dim}(${domain}${subfolder}) ${end}"
|
|
while read -r -n 1 -s dbsubdel; do
|
|
local dbsubdel=${dbsubdel:-y}
|
|
[[ $dbsubdel = [YyNn] ]] && break
|
|
done
|
|
fi
|
|
[[ $dbsubdel == [yY] || $dbdel == [yY] ]] && db_delete $domain $subfolder
|
|
fi
|
|
subfolder=""
|
|
done
|
|
fi
|
|
|
|
# Determine if main site is WP, so you should delete the DB too.
|
|
if [[ ( -z $dbdel || $dbdel = [Yy] ) && ( -f /var/www/$domain/wp-config.php || -f /var/www/$domain/htdocs/wp-config.php ) ]]; then
|
|
if ! [[ ${delete,,} =~ ^(force|keep-db)$ ]]; then
|
|
echo "${blu}Delete Database [Y/n]? ${dim}(${domain}${subfolder}) ${end}"
|
|
while read -r -n 1 -s dbdel; do
|
|
local dbdel=${dbdel:-y}
|
|
[[ $dbdel = [YyNn] ]] && break
|
|
done
|
|
fi
|
|
[[ $dbdel == [yY] ]] && db_delete $domain
|
|
fi
|
|
|
|
# Revoke SSL Cert
|
|
if [[ -d /etc/letsencrypt/live/$domain && -z $revoke && ${delete,,} != "force" ]]; then
|
|
echo "${blu}Revoke SSL Cert [Y/n]?${end}"
|
|
while read -r -n 1 -s revoke; do
|
|
local revoke=${revoke:-y}
|
|
[[ $revoke = [YyNn] ]] && break
|
|
done
|
|
fi
|
|
[[ $revoke =~ ^(on|y|Y)$ && -d /etc/letsencrypt/live/$domain ]] && ssl_revoke
|
|
|
|
|
|
# Delete site files
|
|
sudo rm -rf /etc/nginx/apps.d/$domain*.conf
|
|
sudo rm -rf /etc/nginx/apps.d/.htpasswd-$domain
|
|
sudo rm -rf /etc/nginx/sites-available/$domain
|
|
sudo rm -rf /etc/nginx/sites-enabled/$domain
|
|
sudo rm -rf /var/www/$domain
|
|
|
|
# In case of custom cache
|
|
if [[ -f /etc/nginx/conf.d/webinoly.conf ]]; then
|
|
sudo sed -i "/^fastcgi_cache_path \/run\/nginx-cache\/$(echo $domain | sed 's/[^0-9A-Za-z]/_/g').*/d" /etc/nginx/conf.d/webinoly.conf
|
|
[[ ! -s /etc/nginx/conf.d/webinoly.conf ]] && sudo rm /etc/nginx/conf.d/webinoly.conf
|
|
fi
|
|
|
|
echo "${gre}Site${blu} $domain ${gre}has been successfully deleted!${end}"
|
|
}
|
|
|
|
|
|
deletesite_subfolder() {
|
|
if [[ $(is_subfolder $domain $subfolder) == "false" ]]; then
|
|
echo "${red}[ERROR] Subfolder site not found!${end}"
|
|
exit 1
|
|
fi
|
|
|
|
[[ ${delete,,} == "force" ]] && local dbdel="Y"
|
|
[[ ${delete,,} == "keep-db" ]] && local dbdel="N"
|
|
|
|
# Check if site contains WP in subfolders.
|
|
local subfolder_original=$subfolder
|
|
|
|
for site in "/etc/nginx/apps.d/${domain}${subname}"*-wpcommon.conf
|
|
do
|
|
local subfolder="/$(echo $site | cut -f 2- -d "_" -s | cut -f -1 -d "-" -s | sed "s/_/\//g")"
|
|
local subname=$(echo $subfolder | sed "s/\//_/g")
|
|
|
|
if [[ -z $dbdel || $dbdel = [Yy] ]]; then
|
|
if [[ -n $subfolder && -f /var/www/$domain/htdocs$subfolder/wp-config.php ]]; then
|
|
if ! [[ ${delete,,} =~ ^(force|keep-db)$ ]]; then
|
|
echo "${blu}Delete Database [Y/n]? ${dim}(${domain}${subfolder}) ${end}"
|
|
while read -r -n 1 -s dbsubdel; do
|
|
local dbsubdel=${dbsubdel:-y}
|
|
[[ $dbsubdel = [YyNn] ]] && break
|
|
done
|
|
fi
|
|
[[ $dbsubdel == [yY] || $dbdel == [yY] ]] && db_delete $domain $subfolder
|
|
fi
|
|
fi
|
|
|
|
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-phpx.conf/d}" /etc/nginx/sites-available/$domain
|
|
sudo sed -i "/# WebinolyCustom/,/# WebinolyCustomEnd/{/$domain$subname-wpfc.conf/d}" /etc/nginx/sites-available/$domain
|
|
sudo sed -i "/# WebinolyCustom/,/# WebinolyCustomEnd/{/$domain$subname-proxy.conf/d}" /etc/nginx/sites-available/$domain
|
|
sudo sed -i "/# WebinolyNginxServerStart/,/# WebinolyNginxServerEnd/{\|location $subfolder/ |d}" /etc/nginx/sites-available/$domain
|
|
|
|
# In case of custom cache
|
|
if [[ -f /etc/nginx/conf.d/webinoly.conf ]]; then
|
|
sudo sed -i "/^fastcgi_cache_path \/run\/nginx-cache\/$(echo $domain | sed 's/[^0-9A-Za-z]/_/g')${subname} .*/d" /etc/nginx/conf.d/webinoly.conf
|
|
[[ ! -s /etc/nginx/conf.d/webinoly.conf ]] && sudo rm /etc/nginx/conf.d/webinoly.conf
|
|
fi
|
|
|
|
echo "${gre}${dim}Subfolder${blu} $subfolder ${gre}from${blu} $domain ${gre}has been successfully deleted!${end}"
|
|
done
|
|
|
|
# Restore original values
|
|
subfolder=$subfolder_original
|
|
subname=$(echo $subfolder | sed "s/\//_/g")
|
|
|
|
sudo rm -rf /var/www/$domain/htdocs$subfolder
|
|
echo "${gre}Subfolder successfully removed!${end}"
|
|
}
|
|
|
|
|
|
delete_all_sites() {
|
|
echo "${red}"
|
|
echo "All your sites files will be removed."
|
|
echo "This action will only delete Databases attached to a WordPress site, any other Database will not be deleted. ${end}"
|
|
|
|
if ! [[ ${delete_all,,} =~ ^(force|keep-db)$ ]]; then
|
|
echo "${blu}"
|
|
echo "Are you sure [y/N]? ${end}"
|
|
while read -r -n 1 -s answer; do
|
|
answer=${answer:-n}
|
|
echo ""
|
|
[[ $answer = [YyNn] ]] && break
|
|
done
|
|
|
|
if [[ $answer == [Nn] ]]; then
|
|
echo "${red}Action aborted!${end}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
for site in "/etc/nginx/sites-available"/*
|
|
do
|
|
[[ ${delete_all,,} == "keep-db" ]] && delete="keep-db" || delete="force"
|
|
domain=$(echo $site | cut -f 5 -d "/")
|
|
[[ $domain != "default" && $domain != $(conf_read tools-port) && $domi != *".dpkg-"* ]] && deletesite
|
|
done
|
|
|
|
# Delete all files - double check!
|
|
# -rf is necessary to not generate an error when is empty.
|
|
sudo rm -rf /etc/nginx/sites-available/!(default|$(conf_read tools-port)|*".dpkg-"*)
|
|
sudo rm -rf /etc/nginx/sites-enabled/!(default|$(conf_read tools-port))
|
|
sudo rm -rf /var/www/!(html|$(conf_read tools-port))
|
|
echo ""
|
|
echo "${gre}All sites and data has been deleted successfully!${end}"
|
|
}
|
|
|
|
|
|
create_empty_site() {
|
|
createsite
|
|
sudo sed -i '/ common\/php.conf;/d' /etc/nginx/sites-available/$domain
|
|
|
|
if [[ $1 == "-full" ]]; then
|
|
sudo sed -i "/locations.conf;/d" /etc/nginx/sites-available/$domain
|
|
sudo sed -i "/include .*header.*.conf;/d" /etc/nginx/sites-available/$domain
|
|
sudo sed -i "/include .*headers-.*.conf;/d" /etc/nginx/sites-available/$domain
|
|
fi
|
|
}
|
|
|
|
|
|
createsite() {
|
|
api-events_update si1
|
|
|
|
# First check if valid TLD
|
|
[[ -z $tld ]] && echo "${dim}[WARNING] Domain name is not a valid TLD (Top Level Domain).${end}"
|
|
|
|
# Check domain and then prevent reserved characters for file names.
|
|
if [[ $(is_domain $domain) != "true" ]]; then
|
|
echo "${red}[ERROR] Domain names can only contain letters, numbers or a hyphen; can not start or end with a hyphen or period or having two periods together, and can be up to 67 characters long.${end}"
|
|
exit 1
|
|
fi
|
|
|
|
# Check for reserved domain names
|
|
if [[ $domain == "default" ]]; then
|
|
echo "${red}[ERROR] Domain name reserved!${end}"
|
|
exit 1
|
|
fi
|
|
|
|
# Check for duplicate sites
|
|
if [[ -f /etc/nginx/sites-available/$domain ]]; then
|
|
echo "${red}[ERROR] Can not create site${blu} $domain ${red}because already exists!${end}"
|
|
exit 1
|
|
fi
|
|
|
|
sudo cp /opt/webinoly/templates/template-site-php /etc/nginx/sites-available/$domain
|
|
|
|
if [[ $subdomain == "true" ]]; then
|
|
# Remove www support for subdomains - only main domain will support both www and non-www.
|
|
sudo sed -i "s/ www.domain.com;/;/g" /etc/nginx/sites-available/$domain
|
|
|
|
# WWW Subdomain Warning!
|
|
if [[ ${sub_domain,,} == "www" ]]; then
|
|
echo "${red}[WARNING] You're creating a site with a WWW subdomain and it won't respond to main domain ${blu}'$main_domain'${red} requests."
|
|
echo "Sites created with the main domain are automatically configured to respond to both www and non-www requests."
|
|
echo "${end}"
|
|
fi
|
|
fi
|
|
|
|
# Nginx conf file for the new site (-php conf is default)
|
|
sudo sed -i "s/domain.com/$domain/g" /etc/nginx/sites-available/$domain
|
|
|
|
sudo chmod 644 /etc/nginx/sites-available/$domain
|
|
sudo chown root:root /etc/nginx/sites-available/$domain
|
|
sudo ln -s /etc/nginx/sites-available/$domain /etc/nginx/sites-enabled/$domain
|
|
|
|
# Create data folder for new site
|
|
if [[ -z $proxy && -z $parked ]]; then
|
|
if [[ ! -d /var/www/$domain/htdocs ]]; then
|
|
sudo mkdir -p /var/www/$domain/htdocs
|
|
[[ $type == [123] ]] && wpinstall
|
|
else
|
|
echo "${blu}"
|
|
echo " We found a folder with${end} $domain ${blu}site data, do you want to use it [Y/n]? "
|
|
while read -r -n 1 -s wwwexist; do
|
|
wwwexist=${wwwexist:-y}
|
|
[[ $wwwexist == [YyNn] ]] && break
|
|
done
|
|
echo ""
|
|
|
|
if [[ $wwwexist == [nN] ]]; then
|
|
sudo rm -rf /var/www/$domain
|
|
sudo mkdir -p /var/www/$domain/htdocs
|
|
[[ $type == [123] ]] && wpinstall
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
# Activate FastCgi cache
|
|
if [[ $cache == "on" && $type == [123] ]]; then
|
|
sudo sed -i '/php.conf/c \ include common/wpfc.conf;' /etc/nginx/sites-available/$domain
|
|
[[ -z $wp_cache_plugins || $wp_cache_plugins == "on" ]] && wp_cache_plugins
|
|
echo "${gre}WordPress Cache successfully enabled!${end}"
|
|
fi
|
|
|
|
# Check if only-error log is enabled
|
|
[[ $(conf_read global-access-log-off) == "true" && $domain != $(conf_read tools-port) ]] && sudo log $domain -only-error=on > /dev/null 2>&1
|
|
|
|
sudo chown -R www-data:www-data /var/www
|
|
[[ $(conf_read login-www-data) == "true" ]] && sudo chown root:root /var/www
|
|
|
|
warning_messages
|
|
echo "${gre}Site${blu} $domain$subfolder ${gre}has been successfully created!${end}"
|
|
}
|
|
|
|
|
|
force_redirect() {
|
|
if ! [[ $force_redirect =~ ^(www|root|off)$ ]]; then
|
|
echo "${red}[ERROR] Please, enter a valid argument!${end}"
|
|
exit 1
|
|
fi
|
|
if [[ $subdomain == "true" ]]; then
|
|
echo "${red}[ERROR] Please, use the main/root domain, Force-Redirection should not be used in Subdomains!${end}"
|
|
exit 1
|
|
fi
|
|
|
|
local rediron=$( grep -F "WebinolyWWWredirectStart" /etc/nginx/sites-available/$domain )
|
|
local sername="server_name $domain www.$domain;"
|
|
cp /opt/webinoly/templates/template-site-wwwredirect /tmp/template-site-wwwredirect
|
|
[[ $(is_ssl $domain) == "true" ]] && local scheme="https" || local scheme="http"
|
|
|
|
case $force_redirect in
|
|
"www")
|
|
[[ -n $rediron ]] && sudo sed -i '/WebinolyWWWredirectStart/,/WebinolyWWWredirectEnd/{/.*/d}' /etc/nginx/sites-available/$domain
|
|
edit_wp_db_url $domain "${scheme}://www.${domain}"
|
|
edit_wp_db_url_multisite $domain "www.${domain}"
|
|
|
|
sudo sed -i "/#server_name;/c \ server_name $domain;" /tmp/template-site-wwwredirect
|
|
sudo sed -i "/#return 301;/c \ return 301 \$scheme://www.${domain}\$request_uri;" /tmp/template-site-wwwredirect
|
|
sudo sed -i "/server_name /c \ server_name www.$domain;" /etc/nginx/sites-available/$domain
|
|
|
|
echo "${gre}Force-Redirection to WWW has been successfully enabled!${end}"
|
|
;;
|
|
"root")
|
|
[[ -n $rediron ]] && sudo sed -i '/WebinolyWWWredirectStart/,/WebinolyWWWredirectEnd/{/.*/d}' /etc/nginx/sites-available/$domain
|
|
edit_wp_db_url $domain "${scheme}://${domain}"
|
|
edit_wp_db_url_multisite $domain $domain
|
|
|
|
sudo sed -i "/#server_name;/c \ server_name www.$domain;" /tmp/template-site-wwwredirect
|
|
sudo sed -i "/#return 301;/c \ return 301 \$scheme://${domain}\$request_uri;" /tmp/template-site-wwwredirect
|
|
sudo sed -i "/server_name /c \ server_name $domain;" /etc/nginx/sites-available/$domain
|
|
echo "${gre}Force-Redirection to non-WWW has been successfully enabled!${end}"
|
|
;;
|
|
"off")
|
|
if [[ -n $rediron ]]; then
|
|
edit_wp_db_url $domain "${scheme}://${domain}"
|
|
edit_wp_db_url_multisite $domain $domain
|
|
|
|
sudo sed -i '/WebinolyWWWredirectStart/,/WebinolyWWWredirectEnd/{/.*/d}' /etc/nginx/sites-available/$domain
|
|
sudo sed -i "/server_name /c \ $sername" /etc/nginx/sites-available/$domain
|
|
echo "${gre}Force-Redirection has been successfully disabled!${end}"
|
|
else
|
|
echo "${red}Force-Redirect is already disabled for site${blu} $domain ${end}"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
# If SSL is enabled insert after that - First redirect should be to HTTPS due to HSTS.
|
|
if [[ $(is_ssl $domain) == "false" && $force_redirect =~ ^(www|root)$ ]]; then
|
|
sudo sed -i '1r /tmp/template-site-wwwredirect' /etc/nginx/sites-available/$domain
|
|
elif [[ $(is_ssl $domain) == "true" && $force_redirect =~ ^(www|root)$ ]]; then
|
|
sudo sed -i '/listen 80/c \ listen 443 ssl http2;' /tmp/template-site-wwwredirect
|
|
sudo sed -i '/listen \[::\]:80/c \ listen [::]:443 ssl http2;' /tmp/template-site-wwwredirect
|
|
|
|
if [[ -z $ignore_ssl ]]; then
|
|
sudo sed -i '/headers-http.conf/a \ include common/headers-https.conf;' /tmp/template-site-wwwredirect
|
|
sudo sed -i '/server_name /r /opt/webinoly/templates/template-site-ssl' /tmp/template-site-wwwredirect
|
|
|
|
local ssl_cer=$(sed -n -e '/WebinolyNginxServerStart/,$p' /etc/nginx/sites-available/$domain | grep -F "ssl_certificate " | tr -d '\t')
|
|
local ssl_key=$(sed -n -e '/WebinolyNginxServerStart/,$p' /etc/nginx/sites-available/$domain | grep -F "ssl_certificate_key " | tr -d '\t')
|
|
local ssl_tru=$(sed -n -e '/WebinolyNginxServerStart/,$p' /etc/nginx/sites-available/$domain | grep -F "ssl_trusted_certificate " | tr -d '\t')
|
|
|
|
sudo sed -i "/ssl_certificate /c\ $ssl_cer" /tmp/template-site-wwwredirect
|
|
sudo sed -i "/ssl_certificate_key /c\ $ssl_key" /tmp/template-site-wwwredirect
|
|
|
|
if [[ -z $ssl_tru ]]; then
|
|
sudo sed -i '/ssl_stapling/d' /tmp/template-site-wwwredirect
|
|
sudo sed -i '/ssl_trusted_certificate/d' /tmp/template-site-wwwredirect
|
|
else
|
|
sudo sed -i "/ssl_trusted_certificate /c\ $ssl_tru" /tmp/template-site-wwwredirect
|
|
fi
|
|
fi
|
|
|
|
sudo sed -i "/WebinolySSLredirectStart/,/WebinolySSLredirectEnd/s/\(server_name\).*$/$sername/" /etc/nginx/sites-available/$domain
|
|
sudo sed -i '/WebinolySSLredirectEnd/r /tmp/template-site-wwwredirect' /etc/nginx/sites-available/$domain
|
|
fi
|
|
|
|
sudo rm /tmp/template-site-wwwredirect
|
|
|
|
}
|
|
|
|
|
|
redirection_manager() {
|
|
if [[ -n $list ]]; then
|
|
[[ -n $raw || $list == "raw" ]] && echo "" || echo "${gre}"
|
|
|
|
if [[ -f /etc/nginx/apps.d/$domain-nginx.conf ]]; then
|
|
isred=$( grep -P "^# RedirectFrom: " /etc/nginx/apps.d/$domain-nginx.conf )
|
|
sudo sed -n '/RedirectFrom/{h;d;}; H; /To:/{x;p;}' /etc/nginx/apps.d/$domain-nginx.conf | sed '/# To:/ s/$/\n/' | sed 's/^# //'
|
|
fi
|
|
[[ -z $isred && -z $raw && $list != "raw" ]] && echo "${blu}[Empty] No redirections were found!${end}"
|
|
|
|
[[ -n $raw || $list == "raw" ]] && echo "" || echo "${end}"
|
|
elif [[ -n $delete ]]; then
|
|
echo ""
|
|
[[ -z $from || $from == "true" ]] && read -p "${blu}Redirect 'from path' to delete: ${end}" from
|
|
if [[ -z $from ]]; then
|
|
echo "${red}[ERROR] Please, enter a valid 'from' path!${end}"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -f /etc/nginx/apps.d/$domain-nginx.conf ]]; then
|
|
sudo sed -Ei '/^# RedirectFrom: '$(escaped_string $from)'( .*)?$/,/^# RedirectEnd/{/.*/d}' /etc/nginx/apps.d/$domain-nginx.conf
|
|
|
|
if [[ ! -s /etc/nginx/apps.d/$domain-nginx.conf ]]; then
|
|
sudo rm /etc/nginx/apps.d/$domain-nginx.conf
|
|
sudo sed -i "/$domain-nginx.conf;/d" /etc/nginx/sites-available/$domain
|
|
fi
|
|
fi
|
|
echo "${gre}Redirection successfully removed!${end}"
|
|
else
|
|
if [[ $(is_forward $domain) == "true" ]]; then
|
|
echo "${red}[ERROR] Forwarded domains are not allowed!${end}"
|
|
exit 1
|
|
fi
|
|
|
|
# Default values
|
|
[[ -z $http_code ]] && http_code="302"
|
|
[[ $regex == "true" ]] && regex="sensitive"
|
|
|
|
echo ""
|
|
[[ -z $from || $from == "true" ]] && read -p "${blu}Redirect from: ${end}" from
|
|
[[ -z $to || $to == "true" ]] && ! [[ $http_code =~ ^(403|410|444|451)$ ]] && read -p "${blu}Redirect to: ${end}" to
|
|
echo ""
|
|
|
|
if [[ -f /etc/nginx/apps.d/$domain-nginx.conf && -n $( grep -E "^# Path: ${from}( \([Exact]+\))?$" /etc/nginx/apps.d/$domain-nginx.conf ) ]]; then
|
|
echo "${red}[ERROR] Protected paths are not allowed for redirections!${end}"
|
|
exit 1
|
|
elif [[ -z $from || ( -z $to && $http_code =~ ^(301|302|303|307|308)$ ) ]]; then
|
|
echo "${red}[ERROR] Please, enter a valid from/to redirection path!${end}"
|
|
exit 1
|
|
elif [[ $from == "/" ]]; then
|
|
echo "${red}[ERROR] Root folder redirection is not allowed, use the 'domain forwarding' feature if want to redirect a complete domain!${end}"
|
|
exit 1
|
|
elif ! [[ $http_code =~ ^(301|302|303|307|308|403|410|444|451)$ ]]; then
|
|
echo "${red}[ERROR] Invalid redirection HTTP Code!${end}"
|
|
exit 1
|
|
elif [[ -n $regex ]] && ! [[ $regex =~ ^(sensitive|insensitive|longest)$ ]]; then
|
|
echo "${red}[ERROR] Invalid regex value!${end}"
|
|
exit 1
|
|
elif [[ ( -z $regex || -n $exact ) && $(is_url_path $from) != "true" ]]; then
|
|
echo "${red}[ERROR] Please, enter a valid 'FROM' redirection path!${end}"
|
|
exit 1
|
|
elif [[ -n $to && $(is_url_path $to) != "true" ]] && ! [[ $(is_url $to) =~ ^(http|https)$ ]]; then
|
|
if [[ $(is_url $to) == "true" ]]; then
|
|
to="http://${to}"
|
|
else
|
|
echo "${red}[ERROR] Please, enter a valid 'TO' redirection path!${end}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [[ ! -f /etc/nginx/apps.d/$domain-nginx.conf ]]; then
|
|
sudo touch /etc/nginx/apps.d/$domain-nginx.conf
|
|
sudo chmod 644 /etc/nginx/apps.d/$domain-nginx.conf
|
|
sudo chown -R root:root /etc/nginx/apps.d/$domain-nginx.conf
|
|
fi
|
|
|
|
local exisa=$( grep -G "^# RedirectFrom: $(escaped_string $from -grep)$" /etc/nginx/apps.d/$domain-nginx.conf )
|
|
local exisb=$( grep -G "^# RedirectFrom: $(escaped_string $from -grep) (Regex)$" /etc/nginx/apps.d/$domain-nginx.conf )
|
|
local exisc=$( grep -G "^# RedirectFrom: $(escaped_string $from -grep) (Exact)$" /etc/nginx/apps.d/$domain-nginx.conf )
|
|
|
|
# Can have both at the same time, one exact and another.
|
|
if [[ ( -z $exisc && $exact == "true" ) || ( -z $exisa && -z $exisb && -z $exact ) ]]; then
|
|
if [[ $exact == true ]]; then
|
|
sign="= "
|
|
code="$from (Exact)"
|
|
elif [[ $regex == "sensitive" ]]; then
|
|
sign="~ "
|
|
code="$from (Regex)"
|
|
elif [[ $regex == "insensitive" ]]; then
|
|
sign="~* "
|
|
code="$from (Regex)"
|
|
elif [[ $regex == "longest" ]]; then
|
|
sign="^~ "
|
|
code="$from (Regex)"
|
|
else
|
|
sign=""
|
|
code="$from"
|
|
fi
|
|
|
|
if [[ $http_code =~ ^(301|302|303|307|308)$ ]]; then
|
|
echo "# RedirectFrom: ${code}
|
|
# To: $to ($http_code)
|
|
location $sign$from {
|
|
return $http_code $to;
|
|
}
|
|
# RedirectEnd" >> /etc/nginx/apps.d/$domain-nginx.conf
|
|
elif [[ $http_code =~ ^(403|410|444|451)$ ]]; then
|
|
echo "# RedirectFrom: ${code}
|
|
# To: $to ($http_code)
|
|
location $sign$from {
|
|
return $http_code;
|
|
}
|
|
# RedirectEnd" >> /etc/nginx/apps.d/$domain-nginx.conf
|
|
fi
|
|
|
|
vconf=$( grep -E "include apps.d/$domain-nginx.conf;" /etc/nginx/sites-available/$domain )
|
|
[[ -z $vconf ]] && sudo sed -i "/# WebinolyCustom$/a \ include apps.d/$domain-nginx.conf;" /etc/nginx/sites-available/$domain
|
|
|
|
# Last verification
|
|
if ! sudo nginx -t > /dev/null 2>&1; then
|
|
sudo site $domain -redirection -from=$from -delete > /dev/null 2>&1
|
|
echo "${red}[ERROR] Seems like you are using some invalid Nginx values or characters!${end}"
|
|
exit 1
|
|
fi
|
|
|
|
echo "${gre}Redirection successfully added!${end}"
|
|
else
|
|
echo "${gre}Redirection already exists!${end}"
|
|
fi
|
|
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
php_subfolder() {
|
|
[[ -n $wp || $(conf_read php-info) == "false" ]] && local file="php.conf" || local file="phpx.conf"
|
|
|
|
sudo sed -i "/# WebinolyCustom$/a \ include apps.d/$domain$subname-$file;" /etc/nginx/sites-available/$domain
|
|
sudo sed -i '/index /c \ index index.php index.html index.htm;' /etc/nginx/sites-available/$domain
|
|
|
|
sudo cp /etc/nginx/common/$file /etc/nginx/apps.d/$domain$subname-$file
|
|
sudo sed -i "/^location \/ {/c location $subfolder/ {" /etc/nginx/apps.d/$domain$subname-$file
|
|
sudo sed -i "/^location ~\* /c location ~* $subfolder/\.*\\\.php\$ {" /etc/nginx/apps.d/$domain$subname-$file
|
|
sudo sed -i "s#/index.php#$subfolder/index.php#" /etc/nginx/apps.d/$domain$subname-$file
|
|
}
|
|
|
|
|
|
wp_subfolder() {
|
|
php_subfolder
|
|
sudo sed -i "/^# DO NOT MODIFY, /a include apps.d/$domain$subname-wpcommon.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 sed -i "/^location \/ {/c location $subfolder/ {" /etc/nginx/apps.d/$domain$subname-wpfc.conf
|
|
sudo sed -i "/^location ~\* /c location ~* $subfolder/\.*\\\.php\$ {" /etc/nginx/apps.d/$domain$subname-wpfc.conf
|
|
sudo sed -i "s#/index.php#$subfolder/index.php#" /etc/nginx/apps.d/$domain$subname-wpfc.conf
|
|
sudo sed -i "/^# DO NOT MODIFY, /a include apps.d/$domain$subname-wpcommon.conf;" /etc/nginx/apps.d/$domain$subname-wpfc.conf
|
|
|
|
sudo cp /etc/nginx/common/wpcommon.conf /etc/nginx/apps.d/$domain$subname-wpcommon.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-wpcommon.conf
|
|
sudo sed -i '/WPRobotStart/,/WPRobotsEnd/{/.*/d}' /etc/nginx/apps.d/$domain$subname-wpcommon.conf
|
|
|
|
sudo cp /etc/nginx/common/wpcommon-noauth.conf /etc/nginx/apps.d/$domain$subname-wpcommon-noauth.conf
|
|
sed -ri "s/location(.*) \/(.*) \{$/location\1 subfolder\/\2 \{/" /etc/nginx/apps.d/$domain$subname-wpcommon-noauth.conf
|
|
sudo sed -i "s#subfolder#$subfolder#g" /etc/nginx/apps.d/$domain$subname-wpcommon-noauth.conf
|
|
sudo sed -i '/WPRobotStart/,/WPRobotsEnd/{/.*/d}' /etc/nginx/apps.d/$domain$subname-wpcommon-noauth.conf
|
|
|
|
[[ $(conf_read wp-admin-auth) == "purged" ]] && sudo httpauth $domain -wp-admin=off -subfolder=$subfolder > /dev/null 2>&1
|
|
|
|
# Activate FastCgi cache
|
|
if [[ $cache == "on" ]]; then
|
|
sudo sed -i "/$domain$subname-php.conf;/c \ include apps.d/$domain$subname-wpfc.conf;" /etc/nginx/sites-available/$domain
|
|
[[ -z $wp_cache_plugins || $wp_cache_plugins == "on" ]] && wp_cache_plugins
|
|
echo "${gre}WordPress Cache successfully enabled!${end}"
|
|
fi
|
|
|
|
sudo chown -R www-data:www-data /var/www
|
|
[[ $(conf_read login-www-data) == "true" ]] && sudo chown root:root /var/www
|
|
echo "${gre}WordPress has been successfully installed in${blu} $domain$subfolder ${gre}subfolder!${end}"
|
|
}
|
|
|
|
|
|
wp_multisite_convertion() {
|
|
wp_config_write $domain WP_ALLOW_MULTISITE true $subfolder
|
|
|
|
echo "${blu}"
|
|
echo "In your WordPress dashboard, go to ${end}“Tools -> Network Setup”${blu},"
|
|
echo "select the type of WP Multisite installation you want (Subdomain or Subdirectory)"
|
|
echo "and then press the ${end}“Install”${blu} button at the bottom."
|
|
echo ""
|
|
echo "After that, you don't need to modify any file, please, don't touch any line of code."
|
|
echo "We will do it for you!"
|
|
echo ""
|
|
echo "${gre}Waiting... we will automatically finish the multisite configuration after you do the install in the WP dashboard!${blu}"
|
|
echo "Write ${end}'quit'${blu} and press ${end}<Enter>${blu} to exit and abort this operation."
|
|
echo "${end}"
|
|
|
|
conf_write quiet true
|
|
while [[ -z $passed || $passed == "false" ]]; do
|
|
if read -t0; then
|
|
read pas
|
|
[[ $pas == "quit" ]] && break
|
|
fi
|
|
sleep 2
|
|
passed=$(is_wp_multisite $domain $subfolder)
|
|
done
|
|
conf_delete quiet
|
|
|
|
if [[ $passed == "false" && $pas == "quit" ]]; then
|
|
wp_config_delete $domain WP_ALLOW_MULTISITE $subfolder
|
|
echo "${red}[ERROR] Action aborted!${end}"
|
|
exit 1
|
|
elif [[ $passed =~ ^(subdomain|subdirectory)$ ]]; then
|
|
# Multisite wp-config
|
|
wp_config_write $domain MULTISITE true $subfolder
|
|
wp_config_write $domain DOMAIN_CURRENT_SITE \'$domain\' $subfolder
|
|
wp_config_write $domain PATH_CURRENT_SITE \'$subfolder/\' $subfolder
|
|
wp_config_write $domain SITE_ID_CURRENT_SITE 1 $subfolder
|
|
wp_config_write $domain BLOG_ID_CURRENT_SITE 1 $subfolder
|
|
|
|
[[ $pas == "quit" ]] && echo "${red}Can not cancel because the installation was already done!${end}"
|
|
|
|
if [[ $passed == "subdomain" ]]; then
|
|
wp_config_write $domain SUBDOMAIN_INSTALL true $subfolder
|
|
sudo sed -i "/server_name /c \ server_name $domain *.$domain;" /etc/nginx/sites-available/$domain
|
|
|
|
[[ -f /etc/letsencrypt/renewal/${domain}.conf && $(is_ssl_wildcard $domain) != "true" ]] && echo "${dim}[WARNING] A Wildcard SSL Cert is recommended, a cert was found but seems like it's not wildcard!${end}"
|
|
|
|
echo "${gre}Subdomain Multisite configuration has been successfully completed!${end}"
|
|
elif [[ $passed == "subdirectory" ]]; then
|
|
wp_config_write $domain SUBDOMAIN_INSTALL false $subfolder
|
|
|
|
if [[ -z $subfolder ]]; then
|
|
sudo sed -i '/locations.conf/i \ include common/wpsubdir.conf;' /etc/nginx/sites-available/$domain
|
|
else
|
|
sudo cp /etc/nginx/common/wpsubdir.conf /etc/nginx/apps.d/$domain$subname-wpsubdir.conf
|
|
sudo sed -i "/DO NOT MODIFY/a \include apps.d\/$domain$subname-wpsubdir.conf;" /etc/nginx/apps.d/$domain$subname-php.conf
|
|
sudo sed -i "/DO NOT MODIFY/a \include apps.d\/$domain$subname-wpsubdir.conf;" /etc/nginx/apps.d/$domain$subname-wpfc.conf
|
|
sed -i "s#\^(#\^$subfolder\(#" /etc/nginx/apps.d/$domain$subname-wpsubdir.conf
|
|
sed -i "s#\$2#$subfolder\$2#" /etc/nginx/apps.d/$domain$subname-wpsubdir.conf
|
|
fi
|
|
|
|
echo "${gre}Subdirectory Multisite configuration has been successfully completed!${end}"
|
|
fi
|
|
else
|
|
wp_config_delete $domain WP_ALLOW_MULTISITE $subfolder
|
|
echo "${red}[ERROR] Multisite installation incomplete or not detected!${end}"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
|
|
parked_domain() {
|
|
[[ $parked == true ]] && read -p "${blu}Main site domain: ${end}" parked
|
|
if [[ ! -f /etc/nginx/sites-available/$parked ]]; then
|
|
echo "${red}[ERROR] Main site domain not found! ${end}"
|
|
exit 1
|
|
elif [[ $(is_forward $parked) == "true" ]]; then
|
|
echo "${red}[ERROR] Parked site cannot point to a forwarded site! ${end}"
|
|
exit 1
|
|
elif [[ $(is_parked $parked) == "true" ]]; then
|
|
echo "${red}[ERROR] Parking a site using a parked site as main site is not allowed! ${end}"
|
|
exit 1
|
|
elif [[ $(is_empty_root_site $parked) =~ ^(true|full)$ ]]; then
|
|
echo "${red}[ERROR] Invalid main site!${end}"
|
|
exit 1
|
|
fi
|
|
|
|
createsite
|
|
|
|
# Nginx conf file for the new parked domain
|
|
sername=$(grep -o "server_name .*;" /etc/nginx/sites-available/$domain)
|
|
sudo truncate -s 0 /etc/nginx/sites-available/$domain
|
|
sudo cat /etc/nginx/sites-available/$parked > /etc/nginx/sites-available/$domain
|
|
|
|
# Prevent if SSL is enabled in main site and ssl data is copied to parked site causing an error.
|
|
[[ $(is_ssl $parked) == "true" ]] && sudo site $domain -ssl=off -revoke=off -no-db-update > /dev/null 2>&1
|
|
|
|
# Prevent if main site is default.
|
|
[[ $(conf_read default-site) == $parked ]] && remove_nginx_default_server $domain
|
|
|
|
sudo sed -i "/include apps.d\/$parked-nginx.conf/d" /etc/nginx/sites-available/$domain
|
|
sudo sed -i "/server_name/c \ $sername" /etc/nginx/sites-available/$domain
|
|
sudo sed -i "s/$parked/$domain/g" /etc/nginx/sites-available/$domain
|
|
sudo sed -i "/include apps.d\/.*-proxy.conf;/{s/$domain/$parked/g}" /etc/nginx/sites-available/$domain
|
|
sudo sed -i "/root/c \ root /var/www/$parked/htdocs;" /etc/nginx/sites-available/$domain
|
|
|
|
# Remove any conf file, this means we will not have subfolder support for parked sites, Should it be supported?
|
|
sudo sed -i "/WebinolyCustom/,/WebinolyCustomEnd/ {/include apps.d\/${domain}.*conf;/d}" /etc/nginx/sites-available/$domain
|
|
|
|
# In case of WP cache, should be disabled in the new parked conf
|
|
sudo sed -i "/include common\/wpfc.conf;/c \ include common\/php.conf;" /etc/nginx/sites-available/$domain
|
|
sudo sed -i "/include apps.d\/${domain}-wpcache.conf;/c \ include common\/php.conf;" /etc/nginx/sites-available/$domain
|
|
[[ $(conf_read php-info) != "false" ]] && sudo sed -i "/include apps.d\/${domain}-phpcache.conf;/c \ include common\/phpx.conf;" /etc/nginx/sites-available/$domain
|
|
[[ $(conf_read php-info) == "false" ]] && sudo sed -i "/include apps.d\/${domain}-phpcache.conf;/c \ include common\/php.conf;" /etc/nginx/sites-available/$domain
|
|
|
|
cusconl=$( grep -o "include /var/www/$domain/.*" /etc/nginx/sites-available/$domain | sed "s/$domain/$parked/" )
|
|
sed -i "/include \/var\/www\/$domain/c \ ${cusconl}" /etc/nginx/sites-available/$domain
|
|
sed -i "/include \/var\/www\/$parked/a \ include \/var\/www\/${parked}/*-$(echo $domain | sed "s/[^0-9A-Za-z]/_/g")_parked.conf;" /etc/nginx/sites-available/$domain
|
|
|
|
# Prevent asking multiple times in case of external DB.
|
|
[[ -n $domain_mapping_wp_id && $domain_mapping_wp_id =~ ^[0-9]+$ && $(is_wp $parked) == "true" ]] && wp_conf_retrieve $parked true false $subfolder
|
|
|
|
# WordPress Domain Mapping
|
|
if [[ $domain_mapping_wp_id == 1 ]]; then
|
|
echo "${red}${dim}[ERROR] Domain Mapping failed because WP blog ID cannot be 1 (main site)! ${end}"
|
|
elif [[ -n $domain_mapping_wp_id && $domain_mapping_wp_id =~ ^[0-9]+$ && $(is_wp_multisite $parked) =~ ^(subdomain|subdirectory)$ ]]; then
|
|
edit_wp_db_url_multisite $parked $domain $domain_mapping_wp_id
|
|
if [[ $? != 1 ]]; then
|
|
# No need of force-redirect check because this is a new and different site.
|
|
edit_wp_db_url $domain "http://${domain}"
|
|
echo "${gre}${dim}Domain Mapping successfully configured! ${end}"
|
|
else
|
|
echo "${red}Domain Mapping configuration failed! ${end}"
|
|
fi
|
|
elif [[ -n $domain_mapping_wp_id && $domain_mapping_wp_id =~ ^[0-9]+$ ]]; then
|
|
echo "${red}${dim}[ERROR] Domain Mapping failed because main site is not a Multisite Network! ${end}"
|
|
elif [[ -n $domain_mapping_wp_id ]]; then
|
|
echo "${red}${dim}[ERROR] Domain Mapping failed because WP blog ID is not a valid value! ${end}"
|
|
fi
|
|
|
|
echo "${gre}"
|
|
echo "Parked domain was successfully configured! "
|
|
echo "${end}"
|
|
}
|
|
|
|
|
|
forward_domain() {
|
|
[[ -z $forward || $forward == "true" ]] && read -p "${gre}Destination domain: ${end}" forward
|
|
if ! [[ $(is_url $forward) =~ ^(http|https|true)$ ]]; then
|
|
echo "${red}[ERROR] Invalid destination domain!${end}"
|
|
exit 1
|
|
elif [[ $(is_url $forward) == "true" ]]; then
|
|
forward="http://${forward}"
|
|
fi
|
|
|
|
createsite
|
|
sudo rm -rf /var/www/$domain
|
|
sudo sed -i '/access_log/,/-nginx.conf;/{/.*/d}' /etc/nginx/sites-available/$domain
|
|
|
|
if [[ $root == "on" ]]; then
|
|
sudo sed -i "/server_name /a \ return 301 $forward;" /etc/nginx/sites-available/$domain
|
|
else
|
|
sudo sed -i "/server_name /a \ return 301 $forward\$request_uri;" /etc/nginx/sites-available/$domain
|
|
fi
|
|
|
|
echo "${blu}Every request to${end} $domain ${blu}will be redirected to ${end}$forward"
|
|
}
|
|
|
|
|
|
reverse_proxy() {
|
|
if [[ $proxy != true ]]; then
|
|
local firstchar=$(echo "${proxy}" | cut -c-1)
|
|
local lastchar=$(echo "${proxy}" | rev | cut -c-1)
|
|
|
|
# Prevent errors
|
|
if [[ ${#proxy} -lt 2 ]]; then
|
|
echo "${red}[ERROR] Invalid data for proxy!${end}"
|
|
exit 1
|
|
fi
|
|
|
|
local proxydata=${proxy:1:-1}
|
|
[[ $firstchar != "[" || $lastchar != "]" ]] && proxydata=""
|
|
else
|
|
read -p "${blu}URL address: ${end}" proxydata
|
|
fi
|
|
|
|
if ! [[ -n $proxydata && $(is_url $proxydata) =~ ^(http|https|ip|unix|true)$ ]]; then
|
|
echo "${red}[ERROR] Please, enter a valid host and port!${end}"
|
|
exit 1
|
|
elif [[ -f /etc/nginx/sites-available/$domain && -z $subfolder && (($(is_empty_root_site $domain) == "full" && $(is_proxy $domain) != "false") || $(is_empty_root_site $domain) == "false") ]]; then
|
|
echo "${red}[ERROR] Site${blu} $domain ${red}already exists!${end}"
|
|
exit 1
|
|
elif [[ -f /etc/nginx/sites-available/$domain && -n $subfolder && $(is_subfolder $domain $subfolder) != "false" ]]; then
|
|
echo "${red}[ERROR] Subfolder${blu} $subfolder ${red}already exists!${end}"
|
|
exit 1
|
|
elif [[ -f /etc/nginx/sites-available/$domain && -n $dedicated_reverse_proxy && $(is_empty_root_site $domain) != "full" && $(is_dedicated_proxy_domain $domain) != "true" ]]; then
|
|
echo "${red}[ERROR] Main site is not a Dedicated Reverse Proxy site!${end}"
|
|
exit 1
|
|
elif [[ $(is_empty_root_site $domain) == "full" && $(is_dedicated_proxy_domain $domain) == "false" ]]; then
|
|
echo "${red}[ERROR] This domain is currently set as Empty (blank), to create a site you need to add your own NGINX configuration. ${dim}(/var/www/example.com/*-nginx.conf)!${end}"
|
|
exit 1
|
|
fi
|
|
|
|
is_url $proxydata -split
|
|
[[ -z $url_scheme || ${url_scheme,,} == "unix" ]] && proxydata="http://${proxydata}"
|
|
|
|
# URI part (subfolders) are not allowed because the proxy configuration we are using includes the static files location
|
|
# This location block is using regex which is not allowed, dedicated reverse proxy are not affected because they don't have static file location block.
|
|
# nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except" block in /etc/nginx/apps.d/testa.qrokes.com-proxy.conf:31
|
|
if [[ -z $dedicated_reverse_proxy && -n $url_path ]]; then
|
|
echo "${red}[ERROR] Subfolders in your endpoint are not allowed in Reverse Proxy sites configured as websites!${end}"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ( -z $subfolder || ( -n $subfolder && ! -f /etc/nginx/sites-available/$domain )) && $(is_empty_root_site $domain) == "false" ]]; then
|
|
[[ -n $dedicated_reverse_proxy ]] && create_empty_site -full || create_empty_site
|
|
elif [[ -z $subfolder && $(is_empty_root_site $domain) == "full" && $(is_dedicated_proxy $domain) == "false" ]]; then
|
|
echo "${gre}Site configuration found: Main site at${blu} $domain ${gre}root has been successfully set as Dedicated Reverse-Proxy!${end}"
|
|
elif [[ -z $subfolder && $(is_empty_root_site $domain) == "true" ]]; then
|
|
echo "${gre}Site configuration found: Main site at${blu} $domain ${gre}root has been successfully set as Reverse-Proxy!${end}"
|
|
fi
|
|
|
|
sudo cp /opt/webinoly/templates/template-site-proxy /etc/nginx/apps.d/$domain$subname-proxy.conf
|
|
sudo sed -i "/# WebinolyCustom$/a \ include apps.d/$domain$subname-proxy.conf;" /etc/nginx/sites-available/$domain
|
|
|
|
if [[ -n $dedicated_reverse_proxy || $(is_dedicated_proxy_domain $domain) == "true" ]]; then
|
|
sudo sed -i '/CacheStaticFiles/,/BasicLocEnd/{/.*/d}' /etc/nginx/apps.d/$domain$subname-proxy.conf
|
|
echo "${blu}${bol}This site is set as Dedicated Reverse Proxy!${end}"
|
|
fi
|
|
|
|
if [[ -n $subfolder ]]; then
|
|
sudo sed -i '/BasicLocationRootFiles/,/BasicLocEnd/{/.*/d}' /etc/nginx/apps.d/$domain$subname-proxy.conf
|
|
sudo sed -i "/^location \/ {/c location $subfolder/ {" /etc/nginx/apps.d/$domain$subname-proxy.conf
|
|
fi
|
|
sudo sed -i "s#http://localhost:8080#${proxydata}#g" /etc/nginx/apps.d/$domain$subname-proxy.conf
|
|
|
|
[[ $(is_ssl $domain) != "true" ]] && sudo sed -i '/CacheStaticFiles/,/expires max;/{/headers-https.conf;/d}' /etc/nginx/apps.d/$domain$subname-proxy.conf
|
|
|
|
# Suggest / at the end of the url to pass
|
|
if [[ -n $dedicated_reverse_proxy && $(echo "${proxydata}" | rev | cut -c-1) != "/" ]]; then
|
|
echo "${dim}[INFO] Your endpoint URL doesn't have a / at the end! You should note that it can have a different behavior."
|
|
echo "Read: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_pass ${end}"
|
|
fi
|
|
|
|
# Check host and port
|
|
local code=$(wget -t 1 --timeout=5 --server-response --spider $proxydata 2>&1 | awk '/^ HTTP/{print $2}')
|
|
code="${code##*$'\n'}"
|
|
[[ -n $code ]] && local mes="(Code: ${code})"
|
|
[[ $code =~ ^(2|3|4)[0-9][0-9]$ ]] || echo "${red}[WARNING] Seems like your Reverse Proxy host is not responding! ${mes}${end}"
|
|
|
|
[[ -n $subfolder ]] && echo "${gre}Reverse proxy${blu} $subfolder ${gre}subfolder successfully created!${end}"
|
|
}
|
|
|
|
|
|
full_empty_not_allowed() {
|
|
# Full Empty sites are only for Dedicated Reverse Proxy sites
|
|
if [[ $(is_dedicated_proxy_domain $domain) == "true" ]]; then
|
|
echo "${red}[ERROR] This domain is currently set as Dedicated Reverse Proxy!${end}"
|
|
exit 1
|
|
elif [[ $(is_empty_root_site $domain) == "full" ]]; then
|
|
echo "${red}[ERROR] This domain is currently set as Empty (blank), to create a site you need to add your own NGINX configuration. ${dim}(/var/www/example.com/*-nginx.conf)!${end}"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
|
|
query_string_cache_default() {
|
|
if [[ $(is_wp $domain $subfolder) == "true" && -f /etc/nginx/apps.d/$domain$subname-wpcache.conf ]]; then
|
|
local cachefile="/etc/nginx/apps.d/$domain$subname-wpcache.conf"
|
|
elif [[ $(is_php $domain $subfolder) == "true" && -f /etc/nginx/apps.d/$domain$subname-phpcache.conf ]]; then
|
|
local cachefile="/etc/nginx/apps.d/$domain$subname-phpcache.conf"
|
|
elif [[ $(is_proxy $domain $subfolder) == "true" && -f /etc/nginx/apps.d/$domain$subname-proxy.conf ]]; then
|
|
local cachefile="/etc/nginx/apps.d/$domain$subname-proxy.conf"
|
|
else
|
|
echo "${red}[ERROR] Custom Cache not found! ${dim}(Must be enabled at least once before you can add these custom rules)${end}"
|
|
exit 1
|
|
fi
|
|
|
|
if ! [[ $query_string_cache_default =~ ^(all|never)$ ]]; then
|
|
echo "${red}[ERROR] Please, enter a valid value for Query-String Cache default!${dim} ('all' or 'never')${end}"
|
|
exit 1
|
|
elif [[ $query_string_cache_default == "all" ]]; then
|
|
sudo sed -i "/# CacheQueryStringDefault/,/# CacheRuleEnd/{/.*/d}" $cachefile
|
|
echo "${gre}Query-String Cache default successfully updated!${dim} (All will be cached by default, except for individual rules if added)${end}"
|
|
elif [[ $query_string_cache_default == "never" ]]; then
|
|
if [[ -z $(grep -F "# CacheQueryStringDefault" $cachefile) ]]; then
|
|
local mark="_$(echo $domain | sed "s/[^0-9A-Za-z]/_/g")${subname}"
|
|
sudo sed -i "/set \$skip_cache${mark} 0;/a # CacheQueryStringDefault\nif (\$query_string) {\n set \$skip_cache${mark} 1;\n}\n# CacheRuleEnd" $cachefile
|
|
echo "${gre}Query-String Cache default successfully updated!${dim} (Never will be cached, except for individual rules if added)${end}"
|
|
else
|
|
echo "${gre}Query-String (Never) Cache default is already enabled!${end}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
wp_cache() {
|
|
if [[ $cache == "off" ]]; then
|
|
api-events_update si9
|
|
if [[ $(is_cache $domain $subfolder) == "custom" ]]; then
|
|
if [[ $(conf_read php-info) != "false" && $(is_wp $domain $subfolder) != "true" ]]; then
|
|
if [[ -z $subfolder ]]; then
|
|
sudo sed -i "/apps.d\/$domain$subname-.*cache.conf;/c \ include common/phpx.conf;" /etc/nginx/sites-available/$domain
|
|
elif [[ -n $subfolder && -f /etc/nginx/apps.d/$domain$subname-phpx.conf ]]; then
|
|
sudo sed -i "/apps.d\/$domain$subname-.*cache.conf;/c \ include apps.d/$domain$subname-phpx.conf;" /etc/nginx/sites-available/$domain
|
|
elif [[ -n $subfolder && ! -f /etc/nginx/apps.d/$domain$subname-phpx.conf ]]; then
|
|
# Try with the other PHP option
|
|
if [[ -n $subfolder && -f /etc/nginx/apps.d/$domain$subname-php.conf ]]; then
|
|
sudo sed -i "/apps.d\/$domain$subname-.*cache.conf;/c \ include apps.d/$domain$subname-php.conf;" /etc/nginx/sites-available/$domain
|
|
else
|
|
echo "${red}[ERROR] PHP Configuration file not found!${end}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
else
|
|
# WP sites are forced to take this option
|
|
if [[ -z $subfolder ]]; then
|
|
sudo sed -i "/apps.d\/$domain$subname-.*cache.conf;/c \ include common/php.conf;" /etc/nginx/sites-available/$domain
|
|
elif [[ -n $subfolder && -f /etc/nginx/apps.d/$domain$subname-php.conf ]]; then
|
|
sudo sed -i "/apps.d\/$domain$subname-.*cache.conf;/c \ include apps.d/$domain$subname-php.conf;" /etc/nginx/sites-available/$domain
|
|
elif [[ -n $subfolder && ! -f /etc/nginx/apps.d/$domain$subname-php.conf ]]; then
|
|
# Try with the other PHP option (except if site is WP)
|
|
if [[ -n $subfolder && -f /etc/nginx/apps.d/$domain$subname-phpx.conf && $(is_wp $domain $subfolder) != "true" ]]; then
|
|
sudo sed -i "/apps.d\/$domain$subname-.*cache.conf;/c \ include apps.d/$domain$subname-phpx.conf;" /etc/nginx/sites-available/$domain
|
|
else
|
|
echo "${red}[ERROR] PHP Configuration file not found!${end}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
echo "${gre}Custom FastCGI Cache in${blu} $domain ${gre}has been disabled!${end}"
|
|
[[ -n $reset && -n $subfolder ]] && site $domain -cache=custom -reset -subfolder=$subfolder
|
|
[[ -n $reset && -z $subfolder ]] && site $domain -cache=custom -reset
|
|
elif [[ $(is_cache $domain $subfolder) == "proxy" ]]; then
|
|
sudo sed -i "/proxy_cache .*;/c \ proxy_cache off;" /etc/nginx/apps.d/$domain$subname-proxy.conf
|
|
echo "${gre}Proxy Cache in${blu} $domain$subfolder ${gre}has been disabled!${end}"
|
|
elif [[ -n $subfolder && $(is_cache $domain $subfolder) == "wp" ]]; then
|
|
sudo sed -i "/apps.d\/$domain$subname-wpfc.conf;/c \ include apps.d/$domain$subname-php.conf;" /etc/nginx/sites-available/$domain
|
|
echo "${gre}FastCGI Cache in${blu} $domain$subfolder ${gre}has been disabled!${end}"
|
|
elif [[ $(is_cache $domain) == "wp" ]]; then
|
|
sudo sed -i '/common\/wpfc.conf/c \ include common/php.conf;' /etc/nginx/sites-available/$domain
|
|
echo "${gre}FastCGI Cache in${blu} $domain ${gre}has been disabled!${end}"
|
|
else
|
|
echo "${gre}Nginx Cache is already disabled on your site${blu} $domain${end}"
|
|
fi
|
|
elif [[ $cache == "on" ]]; then
|
|
api-events_update si8
|
|
if [[ $(is_wp $domain $subfolder) == "true" && $(is_cache $domain $subfolder) == "false" ]]; then
|
|
[[ -z $subfolder ]] && sudo sed -i '/ common\/php.conf/c \ include common/wpfc.conf;' /etc/nginx/sites-available/$domain
|
|
[[ -n $subfolder ]] && sudo sed -i "/ apps.d\/$domain$subname-php.conf;/c \ include apps.d/$domain$subname-wpfc.conf;" /etc/nginx/sites-available/$domain
|
|
if [[ $(is_parked $domain) == "false" && ( ! -d /var/www/$domain/htdocs$subfolder/wp-content/plugins/nginx-helper || ! -d /var/www/$domain/htdocs$subfolder/wp-content/plugins/redis-cache ) ]]; then
|
|
if [[ -z $wp_cache_plugins ]]; then
|
|
echo "${gre}"
|
|
echo "We recommend Nginx Helper Plugin and Redis Object Cache Plugin as an easy way to manage FastCGI and Redis Cache on your WordPress site."
|
|
echo "${blu}Do you want to install it now [Y/n]? ${end}"
|
|
while read -r -n 1 -s answer; do
|
|
answer=${answer:-y}
|
|
if [[ $answer = [YyNn] ]]; then
|
|
[[ $answer = [Yy] ]] && wp_cache_plugins
|
|
break
|
|
fi
|
|
done
|
|
elif [[ $wp_cache_plugins == "on" ]]; then
|
|
wp_cache_plugins
|
|
else
|
|
echo "${blu}WordPress Cache Plugins check bypassed! ${end}"
|
|
fi
|
|
fi
|
|
echo "${gre}"
|
|
echo "FastCGI Cache in${blu} $domain$subfolder ${gre}has been successfully enabled! "
|
|
echo "${end}"
|
|
else
|
|
if [[ $(is_wp $domain $subfolder) == "false" ]]; then
|
|
echo "${red}[ERROR] Site${blu} $domain$subfolder ${red}is not a WP site!${end}"
|
|
exit 1
|
|
else
|
|
echo "${gre}FastCGI Cache is already enabled on your site${blu} $domain$subfolder${end}"
|
|
fi
|
|
fi
|
|
elif [[ $cache == "custom" ]]; then
|
|
if [[ $(is_wp $domain $subfolder) == "true" ]]; then
|
|
local fn="wpcache"
|
|
elif [[ $(is_php $domain $subfolder) == "true" ]]; then
|
|
local fn="phpcache"
|
|
elif [[ $(is_proxy $domain $subfolder) == "true" ]]; then
|
|
local fn="proxycache" # Just to pass the verification, not really needed!
|
|
else
|
|
echo "${red}[ERROR] Custom Cache only supported for PHP, WordPress and Reverse Proxy sites!${end}"
|
|
exit 1
|
|
fi
|
|
|
|
[[ -z $reset ]] && api-events_update si8
|
|
|
|
if [[ -n $reset ]]; then
|
|
if [[ $(is_cache $domain $subfolder) =~ ^(custom|proxy)$ ]]; then
|
|
echo "${red}[ERROR] Cannot remove the Custom Cache configuration file because is currently in use!${end}"
|
|
exit 1
|
|
elif [[ $(is_proxy $domain $subfolder) == "true" && -n $(grep -F "# WebinolyProxyCacheStart" /etc/nginx/apps.d/$domain$subname-proxy.conf) ]]; then
|
|
sudo sed -i '/WebinolyProxyCacheStart/,/WebinolyProxyCacheEnd/{/.*/d}' /etc/nginx/apps.d/$domain$subname-proxy.conf
|
|
sudo sed -i "/^proxy_cache_path \/run\/nginx-cache\/$(echo $domain | sed 's/[^0-9A-Za-z]/_/g')${subname} .*/d" /etc/nginx/conf.d/webinoly.conf
|
|
echo "${gre}Custom Proxy Cache configuration has been successfully removed! ${end}"
|
|
elif [[ -f /etc/nginx/apps.d/$domain$subname-${fn}.conf ]]; then
|
|
sudo rm /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
sudo sed -i "/^fastcgi_cache_path \/run\/nginx-cache\/$(echo $domain | sed 's/[^0-9A-Za-z]/_/g')${subname} .*/d" /etc/nginx/conf.d/webinoly.conf
|
|
echo "${gre}Custom FastCGI Cache configuration file has been successfully removed! ${end}"
|
|
else
|
|
echo "${gre}Custom Nginx Cache configuration not found! ${end}"
|
|
fi
|
|
[[ -f /etc/nginx/conf.d/webinoly.conf && ! -s /etc/nginx/conf.d/webinoly.conf ]] && sudo rm /etc/nginx/conf.d/webinoly.conf
|
|
elif [[ -n $query_string_never_cache || $query_string_cache || $skip_cache || -n $skip_cookie_cache ]]; then
|
|
custom_cache_global -site
|
|
elif [[ -n $query_string_cache_default ]]; then
|
|
query_string_cache_default
|
|
elif [[ -n $cache_valid ]]; then
|
|
config_fastcgi_cache -site $cache_valid
|
|
elif [[ $(is_cache $domain $subfolder) == "false" && $(is_proxy $domain $subfolder) == "true" && -n $(grep -F "# WebinolyProxyCacheStart" /etc/nginx/apps.d/$domain$subname-proxy.conf) ]]; then
|
|
sudo sed -i "/proxy_cache .*;/c \ proxy_cache $(echo $domain | sed "s/[^0-9A-Za-z]/_/g")${subname};" /etc/nginx/apps.d/$domain$subname-proxy.conf
|
|
echo "${gre}Custom Proxy Cache in${blu} $domain$subfolder ${gre}has been successfully enabled! ${end}"
|
|
elif [[ $(is_cache $domain $subfolder) == "false" && $(is_proxy $domain $subfolder) == "true" ]]; then
|
|
if [[ ! -f /etc/nginx/conf.d/webinoly.conf ]]; then
|
|
sudo touch /etc/nginx/conf.d/webinoly.conf
|
|
sudo chmod 644 /etc/nginx/conf.d/webinoly.conf
|
|
sudo chown -R root:root /etc/nginx/conf.d/webinoly.conf
|
|
fi
|
|
|
|
# Cache Size for custom cache will be half of the global value by default
|
|
local cachesize=$(($(grep -F "fastcgi_cache_path " /etc/nginx/conf.d/fastcgi.conf | grep -Eo "max_size=.*m" | cut -d "=" -f 2 -s | grep -Eo "[0-9]+")/2))
|
|
[[ -n $cachesize && $cachesize =~ ^[0-9]+$ && $cachesize -gt 0 ]] || local cachesize=90
|
|
|
|
local dom=$(echo $domain | sed "s/[^0-9A-Za-z]/_/g")
|
|
echo "proxy_cache_path /run/nginx-cache/${dom}${subname} levels=1:2 keys_zone=${dom}${subname}:50m max_size=${cachesize}m inactive=7d;" >> /etc/nginx/conf.d/webinoly.conf
|
|
|
|
sudo sed -i '/proxy_http_version /r /opt/webinoly/templates/template-site-proxycache' /etc/nginx/apps.d/$domain$subname-proxy.conf
|
|
sudo sed -i "/proxy_cache STATIC;/c \ proxy_cache ${dom}${subname};" /etc/nginx/apps.d/$domain$subname-proxy.conf
|
|
sudo sed -i "/example\*site_custom_cache.conf;/c \ include apps.d/${domain}${subname}*site_custom_cache.conf;" /etc/nginx/apps.d/$domain$subname-proxy.conf
|
|
sudo sed -i "s/ \$skip_cache/ \$skip_cache_${dom}${subname}/g" /etc/nginx/apps.d/$domain$subname-proxy.conf
|
|
|
|
echo "${gre}Custom Proxy Cache in${blu} $domain$subfolder ${gre}has been successfully enabled! ${end}"
|
|
elif [[ $(is_cache $domain $subfolder) == "false" ]]; then
|
|
[[ -z $subfolder ]] && sudo sed -i "/ common\/php.conf/c \ include apps.d/$domain$subname-${fn}.conf;" /etc/nginx/sites-available/$domain
|
|
[[ -z $subfolder ]] && sudo sed -i "/ common\/phpx.conf/c \ include apps.d/$domain$subname-${fn}.conf;" /etc/nginx/sites-available/$domain
|
|
[[ -n $subfolder ]] && sudo sed -i "/ apps.d\/$domain$subname-php.conf;/c \ include apps.d/$domain$subname-${fn}.conf;" /etc/nginx/sites-available/$domain
|
|
[[ -n $subfolder ]] && sudo sed -i "/ apps.d\/$domain$subname-phpx.conf;/c \ include apps.d/$domain$subname-${fn}.conf;" /etc/nginx/sites-available/$domain
|
|
|
|
# Creates the custom Webinoly Cache File (.cnf) only if not exists.
|
|
if [[ ! -f /etc/nginx/apps.d/$domain$subname-${fn}.conf ]]; then
|
|
sudo touch /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
sudo chmod 644 /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
sudo chown -R root:root /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
|
|
if [[ ! -f /etc/nginx/conf.d/webinoly.conf ]]; then
|
|
sudo touch /etc/nginx/conf.d/webinoly.conf
|
|
sudo chmod 644 /etc/nginx/conf.d/webinoly.conf
|
|
sudo chown -R root:root /etc/nginx/conf.d/webinoly.conf
|
|
fi
|
|
|
|
# Cache Size for custom cache will be half of the global value by default
|
|
local cachesize=$(($(grep -F "fastcgi_cache_path " /etc/nginx/conf.d/fastcgi.conf | grep -Eo "max_size=.*m" | cut -d "=" -f 2 -s | grep -Eo "[0-9]+")/2))
|
|
[[ -n $cachesize && $cachesize =~ ^[0-9]+$ && $cachesize -gt 0 ]] || local cachesize=90
|
|
|
|
local dom=$(echo $domain | sed "s/[^0-9A-Za-z]/_/g")
|
|
echo "fastcgi_cache_path /run/nginx-cache/${dom}${subname} levels=1:2 keys_zone=${dom}${subname}:50m max_size=${cachesize}m inactive=7d;" >> /etc/nginx/conf.d/webinoly.conf
|
|
|
|
echo -e "# Webinoly Custom FastCGI Cache File \n" >> /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
|
|
if [[ $fn == "phpcache" && $(conf_read php-info) != "false" ]]; then
|
|
sudo cat /etc/nginx/common/phpx.conf >> /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
else
|
|
sudo cat /etc/nginx/common/php.conf >> /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
fi
|
|
|
|
sudo sed -i '/# PHP NGINX CONFIGURATION/,/# DO NOT MODIFY, ALL/{/.*/d}' /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
sudo sed -i "/fastcgi_pass php;/a fastcgi_cache WORDPRESS;" /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
sudo sed -i "/fastcgi_pass php;/a fastcgi_no_cache \$skip_cache;" /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
sudo sed -i "/fastcgi_pass php;/a fastcgi_cache_bypass \$skip_cache;" /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
sudo sed -i '/fastcgi_cache WORDPRESS;/r /etc/nginx/conf.d/fastcgi.conf' /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
sudo sed -i '/# FastCGI cache settings/,/fastcgi_cache_path /{/.*/d}' /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
sudo sed -i "/fastcgi_cache WORDPRESS;/c \ fastcgi_cache ${dom}${subname};" /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
sudo sed -i "s/ \$skip_cache/ \$skip_cache_${dom}${subname}/g" /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
sudo sed -i '/^fastcgi_/s/^/ /' /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
|
|
sudo sed -i "/^# Webinoly Custom FastCGI Cache File /a include apps.d/${domain}${subname}*site_custom_cache.conf;" /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
sudo sed -i "/^# Webinoly Custom FastCGI Cache File /a set \$skip_cache_${dom}${subname} 0;" /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
|
|
if [[ -n $subfolder ]]; then
|
|
sudo sed -i "/^location \/ {/c location $subfolder/ {" /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
sudo sed -i "/^location ~\* /c location ~* $subfolder/\.*\\\.php\$ {" /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
sudo sed -i "s#/index.php#$subfolder/index.php#" /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
[[ $(is_wp $domain $subfolder) == "true" ]] && sudo sed -i "/^# Webinoly Custom FastCGI Cache File /a include apps.d/$domain$subname-wpcommon.conf;" /etc/nginx/apps.d/$domain$subname-${fn}.conf
|
|
fi
|
|
|
|
echo "${gre}${dim}A new FastCGI Cache configuration file has been created!${end}"
|
|
else
|
|
echo "${gre}${dim}FastCGI Cache configuration file found!${end}"
|
|
fi
|
|
|
|
[[ -n $cache_valid && $cache_valid != "true" ]] && config_fastcgi_cache -site $cache_valid
|
|
|
|
echo "${gre}"
|
|
echo "Custom FastCGI Cache in${blu} $domain$subfolder ${gre}has been successfully enabled! ${end}"
|
|
echo "${end}"
|
|
else
|
|
echo "${gre}FastCGI Cache is already enabled on your site${blu} $domain$subfolder${end}"
|
|
fi
|
|
else
|
|
echo "${red}[ERROR] Invalid value for cache! ${end}"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
|
|
cloning_site() {
|
|
if [[ -f /etc/nginx/sites-available/$domain && $overwrite == "on" ]]; then
|
|
echo "${blu}Site already exists! ${dim} Overwriting...${end}"
|
|
|
|
# Preserve these data when overwriting (important because they can be custom)
|
|
if [[ $iswpclone == "true" ]]; then
|
|
local custom_wp_dbname=$( wp_config_read $domain DB_NAME $subfolder )
|
|
local custom_wp_dbuser=$( wp_config_read $domain DB_USER $subfolder )
|
|
local custom_wp_dbpass=$( wp_config_read $domain DB_PASSWORD $subfolder )
|
|
local custom_wp_dbpref=$( grep -F "table_prefix" $(wp_config_path $domain $subfolder) | cut -f 2 -d "'" -s)
|
|
fi
|
|
|
|
if [[ $( wp_config_read $domain DB_HOST $subfolder ) == "localhost" ]]; then
|
|
[[ -z $subfolder ]] && sudo site $domain -delete=force > /dev/null 2>&1 || sudo site $domain -subfolder=$subfolder -delete=force > /dev/null 2>&1
|
|
else
|
|
if [[ -n $extdb_user && -n $extdb_pass && -n $extdb_host ]]; then
|
|
if [[ -z $subfolder ]]; then
|
|
sudo site $domain -delete=force -external_db=[${extdb_user},${extdb_pass},${extdb_host}] > /dev/null 2>&1
|
|
else
|
|
sudo site $domain -subfolder=$subfolder -delete=force -external_db=[${extdb_user},${extdb_pass},${extdb_host}] > /dev/null 2>&1
|
|
fi
|
|
else
|
|
echo "${red}[ERROR] External DB data corrupted!${end}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
else
|
|
echo "${blu}Cloning your site! ${dim} Wait...${end}"
|
|
fi
|
|
|
|
if [[ -n $subfolder ]]; then
|
|
local subtype=$(is_subfolder $clone_from $subfolder)
|
|
[[ ! -f /etc/nginx/sites-available/$domain ]] && create_empty_site
|
|
|
|
# WordPress only runs when is called in a recursive way below!
|
|
if [[ $subtype == "wp" && -n $child ]]; then
|
|
echo "${blu}${dim}Cloning WP subfolder...${end}"
|
|
sudo cp /etc/nginx/apps.d/$clone_from$subname-php.conf /etc/nginx/apps.d/$domain$subname-php.conf
|
|
sudo cp /etc/nginx/apps.d/$clone_from$subname-wpfc.conf /etc/nginx/apps.d/$domain$subname-wpfc.conf
|
|
sudo cp /etc/nginx/apps.d/$clone_from$subname-wpcommon.conf /etc/nginx/apps.d/$domain$subname-wpcommon.conf
|
|
sudo cp /etc/nginx/apps.d/$clone_from$subname-wpcommon-noauth.conf /etc/nginx/apps.d/$domain$subname-wpcommon-noauth.conf
|
|
sudo sed -i "s/$clone_from/$domain/g" /etc/nginx/apps.d/$domain$subname-php.conf
|
|
sudo sed -i "s/$clone_from/$domain/g" /etc/nginx/apps.d/$domain$subname-wpfc.conf
|
|
sudo sed -i "/# WebinolyCustom$/a \ include apps.d/$domain$subname-php.conf;" /etc/nginx/sites-available/$domain
|
|
fi
|
|
|
|
if [[ $subtype == "wp" ]]; then
|
|
echo "${blu}${dim}Cloning WP subfolder...${end}"
|
|
elif [[ $subtype == "php" ]]; then
|
|
echo "${blu}${dim}Cloning PHP subfolder...${end}"
|
|
if [[ -f /etc/nginx/apps.d/$clone_from$subname-php.conf ]]; then
|
|
sudo cp /etc/nginx/apps.d/$clone_from$subname-php.conf /etc/nginx/apps.d/$domain$subname-php.conf
|
|
sudo sed -i "s/$clone_from/$domain/g" /etc/nginx/apps.d/$domain$subname-php.conf
|
|
sudo sed -i "/# WebinolyCustom$/a \ include apps.d/$domain$subname-php.conf;" /etc/nginx/sites-available/$domain
|
|
elif [[ -f /etc/nginx/apps.d/$clone_from$subname-phpx.conf ]]; then
|
|
sudo cp /etc/nginx/apps.d/$clone_from$subname-phpx.conf /etc/nginx/apps.d/$domain$subname-phpx.conf
|
|
sudo sed -i "s/$clone_from/$domain/g" /etc/nginx/apps.d/$domain$subname-phpx.conf
|
|
sudo sed -i "/# WebinolyCustom$/a \ include apps.d/$domain$subname-phpx.conf;" /etc/nginx/sites-available/$domain
|
|
fi
|
|
elif [[ $subtype == "html" ]]; then
|
|
echo "${blu}${dim}Cloning HTML subfolder...${end}"
|
|
elif [[ $subtype == "proxy" ]]; then
|
|
echo "${blu}${dim}Cloning PROXY subfolder...${end}"
|
|
sudo cp /etc/nginx/apps.d/$clone_from$subname-proxy.conf /etc/nginx/apps.d/$domain$subname-proxy.conf
|
|
sudo sed -i "/# WebinolyCustom$/a \ include apps.d/$domain$subname-proxy.conf;" /etc/nginx/sites-available/$domain
|
|
elif [[ $subtype == "true" ]]; then
|
|
echo "${blu}${dim}Cloning subfolder data only...${end}"
|
|
else
|
|
# Don't show this message when WP recursive!
|
|
[[ -z $child ]] && echo "${red}${dim}[ERROR] Unexpected error, subfolder type is undetermined!${end}"
|
|
fi
|
|
|
|
if [[ -d /var/www/$clone_from/htdocs$subfolder ]]; then
|
|
local dest=$( echo $subfolder | rev | cut -f 2- -d "/" -s | rev )
|
|
sudo mkdir -p /var/www/$domain/htdocs$dest
|
|
sudo cp -r /var/www/$clone_from/htdocs$subfolder /var/www/$domain/htdocs$dest
|
|
fi
|
|
else
|
|
[[ -d /var/www/$clone_from ]] && sudo cp -r /var/www/$clone_from /var/www/$domain
|
|
fi
|
|
|
|
[[ -d /var/www/$domain ]] && sudo chown -R www-data:www-data /var/www/$domain
|
|
|
|
if [[ -z $subfolder && ! -f /etc/nginx/sites-available/$domain ]]; then
|
|
sudo cp /etc/nginx/sites-available/$clone_from /etc/nginx/sites-available/$domain
|
|
sudo ln -s /etc/nginx/sites-available/$domain /etc/nginx/sites-enabled/$domain
|
|
sudo sed -i "s/$clone_from/$domain/g" /etc/nginx/sites-available/$domain
|
|
|
|
# Fix server_name according to new domain/site.
|
|
[[ $subdomain == "true" ]] && local sername="server_name $domain;" || local sername="server_name $domain www.$domain;"
|
|
sudo sed -i "/server_name /c \ $sername" /etc/nginx/sites-available/$domain
|
|
fi
|
|
|
|
# Clone Subfolder conf files from apps.d
|
|
if [[ -z $child ]]; then
|
|
conf_write nginx-reload false
|
|
|
|
for appfile in /etc/nginx/apps.d/${clone_from}*.conf
|
|
do
|
|
if [[ -s $appfile ]]; then
|
|
local newfile=$(echo $appfile | sed "s/$clone_from/$domain/")
|
|
sudo cp $appfile $newfile
|
|
|
|
# Check if site contains WP in subfolders.
|
|
if [[ $appfile == "/etc/nginx/apps.d/${clone_from}${subname}"*-wpcommon.conf ]]; then
|
|
local wpsub="/$(echo $appfile | cut -f 2- -d "_" -s | cut -f -1 -d "-" -s | sed "s/_/\//g")"
|
|
if [[ -n $wpsub && -f /var/www/$domain/htdocs$wpsub/wp-config.php ]]; then
|
|
echo "${gre}${dim}WordPress installed in a subfolder${blu} '${wpsub}' ${gre}was found, we will clone it too...${end}"
|
|
# Silenced because some times files are still not all copied and this commands reload nginx causing unexpected errors.
|
|
# At the end when all the files are copied everything is fine and nothing to worry!
|
|
sudo site $domain -subfolder=$wpsub -delete=keep-db > /dev/null 2>&1
|
|
[[ -n $env ]] && local pars="-env=$env "
|
|
[[ -n $cache ]] && local pars="$pars -cache=$cache -wp-cache-plugins=on"
|
|
sudo site $domain -clone-from=$clone_from -subfolder=$wpsub -child $pars > /dev/null 2>&1
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
|
|
conf_delete nginx-reload
|
|
fi
|
|
|
|
# Only for WP sites
|
|
# Main process runs always for WP - Child WP process only run when recursive and skip main if main is subfolder.
|
|
if [[ ( $iswpclone == "true" && -z $subfolder ) || ( $iswpclone == "true" && -n $subfolder && -n $child ) ]]; then
|
|
local dom=$(echo $domain$subfolder | sed "s/[^0-9A-Za-z]/_/g")
|
|
local usr=$dom
|
|
local AUTOGENPASS_WPDB=`pwgen -s -1 16`
|
|
|
|
# Preserve these data when overwriting (important because they can be custom)
|
|
[[ -n $custom_wp_dbname ]] && local dom=$custom_wp_dbname
|
|
[[ -n $custom_wp_dbuser ]] && local usr=$custom_wp_dbuser
|
|
[[ -n $custom_wp_dbpass ]] && local AUTOGENPASS_WPDB=$custom_wp_dbpass
|
|
[[ -n $custom_wp_dbpref ]] && sudo sed -i "/table_prefix/c \$table_prefix = '$custom_wp_dbpref';" $(wp_config_path $domain $subfolder)
|
|
|
|
wp_config_write $domain DB_NAME \'$dom\' $subfolder
|
|
wp_config_write $domain DB_USER \'$usr\' $subfolder
|
|
wp_config_write $domain DB_PASSWORD \'$AUTOGENPASS_WPDB\' $subfolder
|
|
wp_config_write $domain WP_CACHE_KEY_SALT \'wp_$domain$(echo $subfolder | sed "s/\//_/g")\' $subfolder
|
|
|
|
if [[ $wp_dbhost == "localhost" ]]; then
|
|
site -mysql=[localhost,$dom,$usr,$AUTOGENPASS_WPDB] > /dev/null 2>&1
|
|
mysqldump -u admin -p$ADMIN_PASS $wp_dbname | mysql -u admin -p$ADMIN_PASS $dom
|
|
|
|
# No need of force-redirect check because this is a new and different site.
|
|
edit_wp_db_url $domain "http://${domain}${subfolder}" $subfolder
|
|
else
|
|
site -mysql=[$wp_dbhost,$dom,$usr,$AUTOGENPASS_WPDB,$extdb_user,$extdb_pass] > /dev/null 2>&1
|
|
mysqldump -h "$extdb_url" -P "$extdb_port" -u"$extdb_user" -p"$extdb_pass" $wp_dbname | mysql -h "$extdb_url" -P "$extdb_port" -u"$extdb_user" -p"$extdb_pass" $dom
|
|
|
|
# No need of force-redirect check because this is a new and different site.
|
|
edit_wp_db_url $domain "http://${domain}${subfolder}" $subfolder
|
|
fi
|
|
|
|
if [[ $replace_content != "off" ]]; then
|
|
replace_content="[http://$clone_from,http://$domain]" && wp_replace_content > /dev/null 2>&1
|
|
replace_content="[https://$clone_from,https://$domain]" && wp_replace_content > /dev/null 2>&1
|
|
# In case www is forced
|
|
replace_content="[http://www.$clone_from,http://$domain]" && wp_replace_content > /dev/null 2>&1
|
|
replace_content="[https://www.$clone_from,https://$domain]" && wp_replace_content > /dev/null 2>&1
|
|
fi
|
|
|
|
# Set WP Environment variable
|
|
[[ -n $env && -n $subfolder ]] && local envpar="-subfolder=$subfolder "
|
|
[[ -n $env && -n $cache ]] && local envpar="$envpar -cache=$cache -wp-cache-plugins=on"
|
|
[[ -n $env ]] && sudo site $domain -env=$env $envpar
|
|
fi
|
|
|
|
# Remove custom settings from cloned site
|
|
sudo site $domain -subdomain=false -force-redirect=off > /dev/null 2>&1
|
|
[[ $(is_ssl $clone_from) == "true" ]] && sudo site $domain -ssl=off -revoke=off -no-db-update > /dev/null 2>&1
|
|
[[ $(conf_read default-site) == $clone_from ]] && remove_nginx_default_server $domain
|
|
|
|
echo "${gre}Site${blu} $domain$subfolder ${gre}is now a successfull clone of${blu} $clone_from$subfolder ${end}"
|
|
}
|
|
|
|
|
|
wp_replace_content() {
|
|
if [[ $replace_content == true ]]; then
|
|
echo ""
|
|
read -p "${blu}Search: ${end}" search
|
|
read -p "${blu}Replace with: ${end}" replace
|
|
echo ""
|
|
elif [[ $(echo "${replace_content}" | cut -c-1) == "[" && $(echo "${replace_content}" | rev | cut -c-1) == "]" ]]; then
|
|
# Prevent errors
|
|
if [[ ${#replace_content} -lt 2 ]]; then
|
|
echo "${red}[ERROR] Invalid data for Replace-Content!${end}"
|
|
exit 1
|
|
fi
|
|
|
|
userdata=${replace_content:1:-1}
|
|
search=$(echo "${userdata}" | cut -d',' -f 1 -s)
|
|
replace=$(echo "${userdata}" | cut -d',' -f 2 -s)
|
|
fi
|
|
|
|
if [[ -z $search || -z $replace ]]; then
|
|
echo "${red}[ERROR] Please, enter a valid value for search and replace!${end}"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -n $wp_dbhost && -n $wp_dbname && -n $wp_dbpref ]]; then
|
|
if [[ ( $wp_dbhost == "localhost" && $(check_mysql_connection localhost) != "true" ) || ( $wp_dbhost != "localhost" && $(check_mysql_connection $extdb_url $extdb_port $extdb_user $extdb_pass) != "true" ) ]]; then
|
|
exit 1
|
|
fi
|
|
|
|
query="USE $wp_dbname; UPDATE ${wp_dbpref}posts SET post_content = REPLACE (post_content,'$search','$replace'); FLUSH PRIVILEGES;"
|
|
|
|
if [[ $wp_dbhost == "localhost" ]]; then
|
|
sudo mysql --connect-timeout=10 --user=admin -p$ADMIN_PASS -e "$query"
|
|
else
|
|
sudo mysql --connect-timeout=10 -h "$extdb_url" -P "$extdb_port" -u"$extdb_user" -p"$extdb_pass" -e "$query"
|
|
fi
|
|
echo "${gre}Content successfully replaced in your WP site!${end}"
|
|
else
|
|
echo "${red}[ERROR] Can not retrieve WP data! ${dim}(WP Configuration corrupted)${end}"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
|
|
list_sites() {
|
|
echo ""
|
|
|
|
if ! [[ ${list,,} =~ ^(true|disabled|main|parked|wordpress|php|html|proxy|forward|tools|default|ssl|nossl|sslstaging|accesslog|noaccesslog|cache|nocache|adminauth|noadminauth|debug|nodebug|wpenv)$ ]]; then
|
|
echo "${red}[ERROR] Invalid value for list filter! ${end}"
|
|
exit 1
|
|
fi
|
|
|
|
for site in "/etc/nginx/sites-available"/*
|
|
do
|
|
local domi=$(echo $site | cut -f 5 -d "/")
|
|
[[ $domi == "default" || $domi == $(conf_read tools-port) || $domi == *".dpkg-"* ]] && continue
|
|
|
|
if [[ $list != "true" ]]; then
|
|
[[ ${list,,} == "disabled" && -L /etc/nginx/sites-enabled/$domi ]] && continue
|
|
[[ ${list,,} == "main" && ( ! -L /etc/nginx/sites-enabled/$domi || ! -d /var/www/$domi ) ]] && continue
|
|
|
|
[[ ${list,,} == "parked" && $(is_parked $domi) != "true" ]] && continue
|
|
[[ ${list,,} == "wordpress" && $(is_wp $domi) != "true" ]] && continue
|
|
[[ ${list,,} == "php" && $(is_php $domi) != "true" ]] && continue
|
|
[[ ${list,,} == "html" && $(is_html $domi) != "true" ]] && continue
|
|
[[ ${list,,} == "proxy" && $(is_proxy $domi) != "true" ]] && continue
|
|
[[ ${list,,} == "forward" && $(is_forward $domi) != "true" ]] && continue
|
|
|
|
[[ ${list,,} == "tools" && $(conf_read tools-site) != $domi ]] && continue
|
|
[[ ${list,,} == "default" && $(conf_read default-site) != $domi ]] && continue
|
|
|
|
[[ ${list,,} == "ssl" && $(is_ssl $domi) != "true" ]] && continue
|
|
[[ ${list,,} == "nossl" && $(is_ssl $domi) == "true" ]] && continue
|
|
[[ ${list,,} == "sslstaging" && ( $(is_ssl $domi) != "true" || $(is_ssl_staging $domi) != "true") ]] && continue
|
|
|
|
[[ ${list,,} == "accesslog" && $(is_log $domi) != "true" ]] && continue
|
|
[[ ${list,,} == "noaccesslog" && $(is_log $domi) == "true" ]] && continue
|
|
|
|
[[ ${list,,} == "cache" && $(is_cache $domi) == "false" ]] && continue
|
|
[[ ${list,,} == "nocache" && -n $(is_cache $domi) && $(is_cache $domi) != "false" ]] && continue
|
|
|
|
# Only WordPress options
|
|
[[ ${list,,} =~ ^(adminauth|noadminauth|debug|nodebug|wpenv)$ && $(is_wp $domi) != "true" ]] && continue
|
|
|
|
[[ ${list,,} == "adminauth" && $(is_wp_auth $domi) != "true" ]] && continue
|
|
[[ ${list,,} == "noadminauth" && $(is_wp_auth $domi) == "true" ]] && continue
|
|
|
|
[[ ${list,,} == "debug" && $(is_wp_debug $domi) != "true" ]] && continue
|
|
[[ ${list,,} == "nodebug" && $(is_wp_debug $domi) == "true" ]] && continue
|
|
|
|
[[ ${list,,} == "wpenv" && -z $(wp_config_read $domi WP_ENVIRONMENT_TYPE) ]] && continue
|
|
fi
|
|
|
|
if [[ -z $raw && $list != "raw" ]]; then
|
|
[[ -d /var/www/$domi ]] && local sign="${gre} +" || local sign="${blu} *${gre}"
|
|
[[ ! -L /etc/nginx/sites-enabled/$domi ]] && local sign="${red} -"
|
|
|
|
[[ $(is_wp $domi) == "true" && -n $(wp_config_read $domi WP_ENVIRONMENT_TYPE) ]] && local sype="$(site_type $domi):$(wp_config_read $domi WP_ENVIRONMENT_TYPE)" || local sype=$(site_type $domi)
|
|
|
|
[[ $(conf_read default-site) == $domi ]] && local check="${blu}${dim}($sype)(Default)" || local check="${blu}${dim}($sype)"
|
|
[[ $(conf_read tools-site) == $domi ]] && local check="${check}(Tools)"
|
|
[[ $(is_ssl $domi) != "true" ]] && local check="${check}${red}(NoSSL)" || local check="${check}${red}"
|
|
[[ $(is_ssl $domi) == "true" && $(is_ssl_staging $domi) == "true" ]] && local check="${check}(SSL-Staging)"
|
|
[[ $(is_log $domi) == "true" ]] && local check="${check}(AccessLog)"
|
|
|
|
if [[ $(is_wp $domi) == "true" ]]; then
|
|
[[ $(is_cache $domi) =~ ^(wp|custom)$ ]] || local check="${check}(NoCache)"
|
|
[[ $(is_wp_auth $domi) != "true" ]] && local check="${check}(NoAdminAuth)"
|
|
[[ $(is_wp_debug $domi) == "true" ]] && local check="${check}(Debug)"
|
|
fi
|
|
|
|
local outlist="$sign $domi $check ${end}"
|
|
elif [[ $list == "raw" || $raw =~ ^(all|parked|disabled|main|true)$ ]]; then
|
|
local outlist="$domi"
|
|
elif [[ -n $raw ]]; then
|
|
echo "${red}[ERROR] Please, enter a valid value for RAW!${end}"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -n $outlist ]]; then
|
|
echo "$outlist"
|
|
local nonemptylist=true
|
|
local count=$(($count+1))
|
|
fi
|
|
done
|
|
[[ -z $nonemptylist && -z $raw && $list != "raw" ]] && echo "${blu}[Empty] No sites were found!${end}" || echo -e "\n${blu}Found:${end} $count sites"
|
|
echo ""
|
|
}
|
|
|
|
|
|
site_info_subfolder() {
|
|
local typesite=$(is_subfolder $domain $subfolder)
|
|
if [[ $typesite == "false" ]]; then
|
|
echo "${red}[ERROR] Subfolder not found! ${end}"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "${blu}Subfolder Type:${end} ${typesite^^}"
|
|
|
|
[[ $typesite == "proxy" ]] || echo "${blu}Size:${end} $(sudo du -sh /var/www/$domain/htdocs$subfolder | cut -d"/" -f 1 -s)"
|
|
|
|
if compgen -G "/var/www/${domain}/*-nginx.conf" > /dev/null; then
|
|
echo "${blu}Nginx Custom:${end} true${end}"
|
|
fi
|
|
|
|
if [[ $(is_cache $domain $subfolder) =~ ^(custom|proxy)$ ]]; then
|
|
local cache="Custom"
|
|
[[ $typesite =~ ^(php|proxy) ]] && echo "${blu}Cache:${end} $cache"
|
|
elif [[ $(is_cache $domain $subfolder) == "wp" ]]; then
|
|
local cache="true"
|
|
else
|
|
local cache="false"
|
|
fi
|
|
|
|
if [[ $typesite == "wp" ]]; then
|
|
local wph=$(wp_config_read $domain DB_HOST $subfolder)
|
|
if [[ ${wph,,} == "localhost" || -n $external_db || $wph == "$(conf_read external-dbh):$(conf_read external-dbx)" ]]; then
|
|
local wpmu=$(is_wp_multisite $domain $subfolder)
|
|
wp_conf_retrieve $domain true true $subfolder
|
|
else
|
|
local wpmu="${dim}Not Available${end}"
|
|
wp_conf_retrieve $domain false false $subfolder
|
|
fi
|
|
|
|
echo ""
|
|
echo "${blu}Cache:${end} $cache"
|
|
echo "${blu}Multisite:${end} $wpmu"
|
|
echo "${blu}WP Auth:${end} $(is_wp_auth $domain $subfolder)"
|
|
echo "${blu}Debug:${end} $(is_wp_debug $domain $subfolder)"
|
|
|
|
[[ -n $(wp_config_read $domain WP_ENVIRONMENT_TYPE $subfolder) ]] && echo "${blu}Environment:${end} $(wp_config_read $domain WP_ENVIRONMENT_TYPE $subfolder)"
|
|
echo ""
|
|
|
|
echo "${blu}Database:${end} $wph"
|
|
echo "${blu}DB Name:${end} $wp_dbname"
|
|
echo "${blu}DB User:${end} $wp_dbuser"
|
|
echo "${blu}DB Prefix:${end} $wp_dbpref"
|
|
[[ -n $wpmu && $wpmu =~ ^(subdomain|subdirectory)$ && -n $wp_blogid ]] && echo "${blu}Blog ID:${end} $wp_blogid"
|
|
fi
|
|
|
|
[[ $typesite == "proxy" ]] && echo "${blu}Source Server:${end} $(grep 'proxy_pass ' /etc/nginx/apps.d/$domain$subname-proxy.conf | head -1 | cut -d ' ' -f 2 -s | rev | cut -c 2- | rev)"
|
|
echo ""
|
|
}
|
|
|
|
|
|
site_info() {
|
|
local typesite=$(site_type $domain)
|
|
if [[ $typesite == "false" ]]; then
|
|
echo "${red}[ERROR] Unrecognized site! ${end}"
|
|
exit 1
|
|
fi
|
|
|
|
[[ -L /etc/nginx/sites-enabled/$domain ]] && local status="Enabled" || local status="Disabled"
|
|
|
|
echo ""
|
|
echo "${blu}Type:${end} $typesite"
|
|
echo "${blu}Status:${end} $status"
|
|
|
|
if [[ $typesite != "Forward" ]]; then
|
|
if [[ $(is_ssl $domain) == "true" && $(is_ssl_le $domain) == "true" && $(is_ssl_staging $domain) != "true" ]]; then
|
|
local ssl="Let's Encrypt"
|
|
elif [[ $(is_ssl $domain) == "true" && $(is_ssl_le $domain) == "true" && $(is_ssl_staging $domain) == "true" ]]; then
|
|
local ssl="Let's Encrypt ${dim}(Staging)"
|
|
elif [[ $(is_ssl $domain) == "true" && $(is_ssl_le $domain) != "true" ]]; then
|
|
local ssl="Custom"
|
|
else
|
|
local ssl="false"
|
|
fi
|
|
|
|
[[ -f /etc/letsencrypt/renewal/${domain}.conf && $(grep -E "^must_staple.?=.?*+" /etc/letsencrypt/renewal/${domain}.conf | cut -f 2 -d '=' -s | sed 's/ //') =~ ^(True|true)$ ]] && ssl="${ssl}(Must-Staple)"
|
|
|
|
echo "${blu}SSL:${end} ${ssl}${end}"
|
|
echo "${blu}Access Logs:${end} $(is_log $domain)"
|
|
echo "${blu}Force Redirect:${end} $(is_force_redirect $domain)"
|
|
fi
|
|
|
|
[[ $typesite =~ ^(Forward|Parked|Reverse Proxy|Dedicated Reverse Proxy) ]] || echo "${blu}Size:${end} $(sudo du -sh /var/www/$domain | cut -d"/" -f 1 -s)"
|
|
|
|
if compgen -G "/var/www/${domain}/*-nginx.conf" > /dev/null; then
|
|
echo "${blu}Nginx Custom:${end} true${end}"
|
|
fi
|
|
|
|
if [[ $(is_cache $domain) =~ ^(custom|proxy)$ ]]; then
|
|
local cache="Custom"
|
|
[[ $typesite =~ ^(PHP|Reverse Proxy|Dedicated Reverse Proxy) ]] && echo "${blu}Cache:${end} $cache"
|
|
elif [[ $(is_cache $domain) == "wp" ]]; then
|
|
local cache="true"
|
|
else
|
|
local cache="false"
|
|
fi
|
|
|
|
if [[ $typesite == "WordPress" || ( $typesite == "Parked" && $(is_wp $domain) == "true" ) ]]; then
|
|
local wph=$(wp_config_read $domain DB_HOST)
|
|
if [[ ${wph,,} == "localhost" || -n $external_db || $wph == "$(conf_read external-dbh):$(conf_read external-dbx)" ]]; then
|
|
local wpmu=$(is_wp_multisite $domain)
|
|
wp_conf_retrieve $domain true true
|
|
else
|
|
local wpmu="${dim}Not Available${end}"
|
|
wp_conf_retrieve $domain false false
|
|
fi
|
|
|
|
echo ""
|
|
echo "${blu}Cache:${end} $cache"
|
|
echo "${blu}Multisite:${end} $wpmu"
|
|
echo "${blu}WP Auth:${end} $(is_wp_auth $domain)"
|
|
echo "${blu}Debug:${end} $(is_wp_debug $domain)"
|
|
|
|
[[ -n $(wp_config_read $domain WP_ENVIRONMENT_TYPE $subfolder) ]] && echo "${blu}Environment:${end} $(wp_config_read $domain WP_ENVIRONMENT_TYPE $subfolder)"
|
|
echo ""
|
|
|
|
echo "${blu}Database:${end} $wph"
|
|
echo "${blu}DB Name:${end} $wp_dbname"
|
|
echo "${blu}DB User:${end} $wp_dbuser"
|
|
echo "${blu}DB Prefix:${end} $wp_dbpref"
|
|
[[ -n $wpmu && $wpmu =~ ^(subdomain|subdirectory)$ && -n $wp_blogid ]] && echo "${blu}Blog ID:${end} $wp_blogid"
|
|
fi
|
|
|
|
if [[ $typesite == "Reverse Proxy" ]]; then
|
|
echo "${blu}Source Server:${end} $(grep 'proxy_pass ' /etc/nginx/apps.d/$domain-proxy.conf | head -1 | cut -d ' ' -f 2 -s | rev | cut -c 2- | rev)"
|
|
elif [[ $typesite == "Parked" ]]; then
|
|
echo "${blu}Main Site:${end} $(grep 'root ' /etc/nginx/sites-available/$domain | cut -d '/' -f 4 -s)"
|
|
elif [[ $typesite == "Forward" ]]; then
|
|
echo "${blu}Forwarded to:${end} $(grep 'return 301 ' /etc/nginx/sites-available/$domain | cut -d ' ' -f 3 -s | cut -d '$' -f 1 -s)"
|
|
fi
|
|
echo ""
|
|
}
|
|
|
|
|
|
wp_env_type() {
|
|
if [[ $(is_wp $domain $subfolder) != "true" ]]; then
|
|
echo "${red}[ERROR] Site${blu} $domain ${red}is not a WordPress site!${end}"
|
|
exit 1
|
|
elif ! [[ $env =~ ^(production|staging|development|local)$ ]]; then
|
|
echo "${red}[ERROR] Invalid value for WP environment type!${end}"
|
|
exit 1
|
|
elif [[ $(is_parked $domain) == "true" ]]; then
|
|
echo "${dim}[WARNING] WP Environment type in a parked site will have effect over all your multisite network!"
|
|
echo "[WARNING] Cache and Discourage Search Engine settings will have effect over this especific site only.${end}"
|
|
fi
|
|
|
|
if [[ $env == "production" ]]; then
|
|
local index="1"
|
|
wp_config_delete $domain WP_ENVIRONMENT_TYPE $subfolder
|
|
[[ -n $cache ]] && wp_cache
|
|
else
|
|
local index="0"
|
|
wp_config_write $domain WP_ENVIRONMENT_TYPE \'$env\' $subfolder
|
|
[[ -z $cache ]] && cache="off"
|
|
wp_cache
|
|
fi
|
|
|
|
# Not change WP debug when invoked from LOG command
|
|
if [[ -z $skip_debug ]]; then
|
|
if [[ $env =~ ^(production|staging)$ ]]; then
|
|
[[ -z $subfolder ]] && log $domain -wp=off || log $domain -wp=off -subfolder=$subfolder
|
|
else
|
|
[[ -z $subfolder ]] && log $domain -wp=on || log $domain -wp=on -subfolder=$subfolder
|
|
fi
|
|
fi
|
|
|
|
# WordPress Reading Settings: Discourage Search Engines
|
|
wp_conf_retrieve $domain true true $subfolder
|
|
|
|
if [[ -n $wp_dbhost && $wp_dbhost != "localhost" && ( -z $extdb_url || -z $extdb_port || -z $extdb_user || -z $extdb_pass ) ]]; then
|
|
echo "${red}${dim}[ERROR] Discourage Search Engines WP option not updated! (External DB data not available)${end}"
|
|
elif [[ -n $wp_dbhost && -n $wp_dbname && -n $wp_dbpref ]]; then
|
|
if [[ $(is_wp_installed $domain $subfolder) == "true" ]]; then
|
|
if [[ $wp_dbhost == "localhost" && $(check_mysql_connection localhost) == "true" ]]; then
|
|
sudo mysql --connect-timeout=10 --user=admin -p$ADMIN_PASS <<_EOF_
|
|
USE $wp_dbname;
|
|
UPDATE ${wp_dbpref}options SET option_value='$index' WHERE option_name='blog_public';
|
|
FLUSH PRIVILEGES;
|
|
_EOF_
|
|
|
|
elif [[ $(check_mysql_connection $extdb_url $extdb_port $extdb_user $extdb_pass) == "true" ]]; then
|
|
sudo mysql --connect-timeout=10 -h "$extdb_url" -P "$extdb_port" -u"$extdb_user" -p"$extdb_pass" <<_EOF_
|
|
USE $wp_dbname;
|
|
UPDATE ${wp_dbpref}options SET option_value='$index' WHERE option_name='blog_public';
|
|
FLUSH PRIVILEGES;
|
|
_EOF_
|
|
|
|
else
|
|
local index=""
|
|
fi
|
|
|
|
[[ $index == "0" ]] && echo "${gre}Discourage Search Engines WP option has been enabled for${blu} $domain$subfolder ${gre}site!${end}"
|
|
[[ $index == "1" ]] && echo "${gre}Discourage Search Engines WP option has been disabled for${blu} $domain$subfolder ${gre}site!${end}"
|
|
else
|
|
echo "${blu}${dim}Discourage Search Engines cannot be updated because WP is still empty! ${end}"
|
|
fi
|
|
else
|
|
echo "${red}${dim}[ERROR] Discourage Search Engines WP option not updated! (WP Configuration corrupted)${end}"
|
|
fi
|
|
|
|
echo "${gre}WordPress Environment Type has been set successfully!${end}"
|
|
}
|
|
|