You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
307 lines
7.6 KiB
307 lines
7.6 KiB
#!/bin/bash
|
|
DEFAULT_VH_ROOT='/var/www/vhosts'
|
|
VH_DOC_ROOT=''
|
|
VHNAME=''
|
|
APP_NAME=''
|
|
DOMAIN=''
|
|
WWW_UID=''
|
|
WWW_GID=''
|
|
WP_CONST_CONF=''
|
|
PUB_IP=$(curl -s http://checkip.amazonaws.com)
|
|
DB_HOST='mysql'
|
|
PLUGINLIST="litespeed-cache.zip"
|
|
THEME='twentytwenty'
|
|
EPACE=' '
|
|
|
|
echow(){
|
|
FLAG=${1}
|
|
shift
|
|
echo -e "\033[1m${EPACE}${FLAG}\033[0m${@}"
|
|
}
|
|
|
|
help_message(){
|
|
echo -e "\033[1mOPTIONS\033[0m"
|
|
echow '-A, -app [wordpress] -D, --domain [DOMAIN_NAME]'
|
|
echo "${EPACE}${EPACE}Example: appinstallctl.sh --app wordpress --domain example.com"
|
|
echow '-H, --help'
|
|
echo "${EPACE}${EPACE}Display help and exit."
|
|
exit 0
|
|
}
|
|
|
|
check_input(){
|
|
if [ -z "${1}" ]; then
|
|
help_message
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
linechange(){
|
|
LINENUM=$(grep -n "${1}" ${2} | cut -d: -f 1)
|
|
if [ -n "${LINENUM}" ] && [ "${LINENUM}" -eq "${LINENUM}" ] 2>/dev/null; then
|
|
sed -i "${LINENUM}d" ${2}
|
|
sed -i "${LINENUM}i${3}" ${2}
|
|
fi
|
|
}
|
|
|
|
ck_ed(){
|
|
if [ ! -f /bin/ed ]; then
|
|
echo "Install ed package.."
|
|
apt-get install ed -y > /dev/null 2>&1
|
|
fi
|
|
}
|
|
|
|
ck_unzip(){
|
|
if [ ! -f /usr/bin/unzip ]; then
|
|
echo "Install unzip package.."
|
|
apt-get install unzip -y > /dev/null 2>&1
|
|
fi
|
|
}
|
|
|
|
get_owner(){
|
|
WWW_UID=$(stat -c "%u" ${DEFAULT_VH_ROOT})
|
|
WWW_GID=$(stat -c "%g" ${DEFAULT_VH_ROOT})
|
|
if [ ${WWW_UID} -eq 0 ] || [ ${WWW_GID} -eq 0 ]; then
|
|
WWW_UID=1000
|
|
WWW_GID=1000
|
|
echo "Set owner to ${WWW_UID}"
|
|
fi
|
|
}
|
|
|
|
get_db_pass(){
|
|
if [ -f ${DEFAULT_VH_ROOT}/${1}/.db_pass ]; then
|
|
SQL_DB=$(grep -i Database ${VH_ROOT}/.db_pass | awk -F ':' '{print $2}' | tr -d '"')
|
|
SQL_USER=$(grep -i Username ${VH_ROOT}/.db_pass | awk -F ':' '{print $2}' | tr -d '"')
|
|
SQL_PASS=$(grep -i Password ${VH_ROOT}/.db_pass | awk -F ':' '{print $2}' | tr -d '"')
|
|
else
|
|
echo 'db pass file can not locate, skip wp-config pre-config.'
|
|
fi
|
|
}
|
|
|
|
set_vh_docroot(){
|
|
if [ "${VHNAME}" != '' ]; then
|
|
VH_ROOT="${DEFAULT_VH_ROOT}/${VHNAME}"
|
|
VH_DOC_ROOT="${DEFAULT_VH_ROOT}/${VHNAME}/html"
|
|
WP_CONST_CONF="${VH_DOC_ROOT}/wp-content/plugins/litespeed-cache/data/const.default.ini"
|
|
elif [ -d ${DEFAULT_VH_ROOT}/${1}/html ]; then
|
|
VH_ROOT="${DEFAULT_VH_ROOT}/${1}"
|
|
VH_DOC_ROOT="${DEFAULT_VH_ROOT}/${1}/html"
|
|
WP_CONST_CONF="${VH_DOC_ROOT}/wp-content/plugins/litespeed-cache/data/const.default.ini"
|
|
else
|
|
echo "${DEFAULT_VH_ROOT}/${1}/html does not exist, please add domain first! Abort!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
check_sql_native(){
|
|
local COUNTER=0
|
|
local LIMIT_NUM=100
|
|
until [ "$(curl -v mysql:3306 2>&1 | grep native)" ]; do
|
|
echo "Counter: ${COUNTER}/${LIMIT_NUM}"
|
|
COUNTER=$((COUNTER+1))
|
|
if [ ${COUNTER} = 10 ]; then
|
|
echo '--- MySQL is starting, please wait... ---'
|
|
elif [ ${COUNTER} = ${LIMIT_NUM} ]; then
|
|
echo '--- MySQL is timeout, exit! ---'
|
|
exit 1
|
|
fi
|
|
sleep 1
|
|
done
|
|
}
|
|
|
|
install_wp_plugin(){
|
|
for PLUGIN in ${PLUGINLIST}; do
|
|
wget -q -P ${VH_DOC_ROOT}/wp-content/plugins/ https://downloads.wordpress.org/plugin/${PLUGIN}
|
|
if [ ${?} = 0 ]; then
|
|
ck_unzip
|
|
unzip -qq -o ${VH_DOC_ROOT}/wp-content/plugins/${PLUGIN} -d ${VH_DOC_ROOT}/wp-content/plugins/
|
|
else
|
|
echo "${PLUGINLIST} FAILED to download"
|
|
fi
|
|
done
|
|
rm -f ${VH_DOC_ROOT}/wp-content/plugins/*.zip
|
|
}
|
|
|
|
set_htaccess(){
|
|
if [ ! -f ${VH_DOC_ROOT}/.htaccess ]; then
|
|
touch ${VH_DOC_ROOT}/.htaccess
|
|
fi
|
|
cat << EOM > ${VH_DOC_ROOT}/.htaccess
|
|
# BEGIN WordPress
|
|
<IfModule mod_rewrite.c>
|
|
RewriteEngine On
|
|
RewriteBase /
|
|
RewriteRule ^index\.php$ - [L]
|
|
RewriteCond %{REQUEST_FILENAME} !-f
|
|
RewriteCond %{REQUEST_FILENAME} !-d
|
|
RewriteRule . /index.php [L]
|
|
</IfModule>
|
|
# END WordPress
|
|
EOM
|
|
}
|
|
|
|
set_lscache(){
|
|
cat << EOM > "${WP_CONST_CONF}"
|
|
; This is the default LSCWP configuration file
|
|
; All keys and values please refer const.cls.php
|
|
; Here just list some examples
|
|
; Comments start with \`;\`
|
|
; OPID_PURGE_ON_UPGRADE
|
|
purge_upgrade = true
|
|
; OPID_CACHE_PRIV
|
|
cache_priv = true
|
|
; OPID_CACHE_COMMENTER
|
|
cache_commenter = true
|
|
;Object_Cache_Enable
|
|
cache_object = true
|
|
; OPID_CACHE_OBJECT_HOST
|
|
;cache_object_host = 'localhost'
|
|
cache_object_host = '/var/www/memcached.sock'
|
|
; OPID_CACHE_OBJECT_PORT
|
|
;cache_object_port = '11211'
|
|
cache_object_port = ''
|
|
auto_upgrade = true
|
|
; OPID_CACHE_BROWSER_TTL
|
|
cache_browser_ttl = 2592000
|
|
; OPID_PUBLIC_TTL
|
|
public_ttl = 604800
|
|
; ------------------------------CDN Mapping Example BEGIN-------------------------------
|
|
; Need to add the section mark \`[litespeed-cache-cdn_mapping]\` before list
|
|
;
|
|
; NOTE 1) Need to set all child options to make all resources to be replaced without missing
|
|
; NOTE 2) \`url[n]\` option must have to enable the row setting of \`n\`
|
|
;
|
|
; To enable the 2nd mapping record by default, please remove the \`;;\` in the related lines
|
|
[litespeed-cache-cdn_mapping]
|
|
url[0] = ''
|
|
inc_js[0] = true
|
|
inc_css[0] = true
|
|
inc_img[0] = true
|
|
filetype[0] = '.aac
|
|
.css
|
|
.eot
|
|
.gif
|
|
.jpeg
|
|
.js
|
|
.jpg
|
|
.less
|
|
.mp3
|
|
.mp4
|
|
.ogg
|
|
.otf
|
|
.pdf
|
|
.png
|
|
.svg
|
|
.ttf
|
|
.woff'
|
|
;;url[1] = 'https://2nd_CDN_url.com/'
|
|
;;filetype[1] = '.webm'
|
|
; ------------------------------CDN Mapping Example END-------------------------------
|
|
EOM
|
|
|
|
if [ ! -f ${VH_DOC_ROOT}/wp-content/themes/${THEME}/functions.php.bk ]; then
|
|
cp ${VH_DOC_ROOT}/wp-content/themes/${THEME}/functions.php ${VH_DOC_ROOT}/wp-content/themes/${THEME}/functions.php.bk
|
|
ck_ed
|
|
ed ${VH_DOC_ROOT}/wp-content/themes/${THEME}/functions.php << END >>/dev/null 2>&1
|
|
2i
|
|
require_once( WP_CONTENT_DIR.'/../wp-admin/includes/plugin.php' );
|
|
\$path = 'litespeed-cache/litespeed-cache.php' ;
|
|
if (!is_plugin_active( \$path )) {
|
|
activate_plugin( \$path ) ;
|
|
rename( __FILE__ . '.bk', __FILE__ );
|
|
}
|
|
.
|
|
w
|
|
q
|
|
END
|
|
fi
|
|
}
|
|
|
|
preinstall_wordpress(){
|
|
if [ "${VHNAME}" != '' ]; then
|
|
get_db_pass ${VHNAME}
|
|
else
|
|
get_db_pass ${DOMAIN}
|
|
fi
|
|
if [ ! -f ${VH_DOC_ROOT}/wp-config.php ] && [ -f ${VH_DOC_ROOT}/wp-config-sample.php ]; then
|
|
cp ${VH_DOC_ROOT}/wp-config-sample.php ${VH_DOC_ROOT}/wp-config.php
|
|
NEWDBPWD="define('DB_PASSWORD', '${SQL_PASS}');"
|
|
linechange 'DB_PASSWORD' ${VH_DOC_ROOT}/wp-config.php "${NEWDBPWD}"
|
|
NEWDBPWD="define('DB_USER', '${SQL_USER}');"
|
|
linechange 'DB_USER' ${VH_DOC_ROOT}/wp-config.php "${NEWDBPWD}"
|
|
NEWDBPWD="define('DB_NAME', '${SQL_DB}');"
|
|
linechange 'DB_NAME' ${VH_DOC_ROOT}/wp-config.php "${NEWDBPWD}"
|
|
#NEWDBPWD="define('DB_HOST', '${PUB_IP}');"
|
|
NEWDBPWD="define('DB_HOST', '${DB_HOST}');"
|
|
linechange 'DB_HOST' ${VH_DOC_ROOT}/wp-config.php "${NEWDBPWD}"
|
|
elif [ -f ${VH_DOC_ROOT}/wp-config.php ]; then
|
|
echo "${VH_DOC_ROOT}/wp-config.php already exist, exit !"
|
|
exit 1
|
|
else
|
|
echo 'Skip!'
|
|
exit 2
|
|
fi
|
|
}
|
|
|
|
app_wordpress_dl(){
|
|
if [ ! -f "${VH_DOC_ROOT}/wp-config.php" ] && [ ! -f "${VH_DOC_ROOT}/wp-config-sample.php" ]; then
|
|
wp core download \
|
|
--allow-root \
|
|
--quiet
|
|
else
|
|
echo 'wordpress already exist, abort!'
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
change_owner(){
|
|
if [ "${VHNAME}" != '' ]; then
|
|
chown -R ${WWW_UID}:${WWW_GID} ${DEFAULT_VH_ROOT}/${VHNAME}
|
|
else
|
|
chown -R ${WWW_UID}:${WWW_GID} ${DEFAULT_VH_ROOT}/${DOMAIN}
|
|
fi
|
|
}
|
|
|
|
main(){
|
|
set_vh_docroot ${DOMAIN}
|
|
get_owner
|
|
cd ${VH_DOC_ROOT}
|
|
if [ "${APP_NAME}" = 'wordpress' ] || [ "${APP_NAME}" = 'wp' ]; then
|
|
check_sql_native
|
|
app_wordpress_dl
|
|
preinstall_wordpress
|
|
install_wp_plugin
|
|
set_htaccess
|
|
set_lscache
|
|
change_owner
|
|
exit 0
|
|
else
|
|
echo "APP: ${APP_NAME} not support, exit!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
check_input ${1}
|
|
while [ ! -z "${1}" ]; do
|
|
case ${1} in
|
|
-[hH] | -help | --help)
|
|
help_message
|
|
;;
|
|
-[aA] | -app | --app) shift
|
|
check_input "${1}"
|
|
APP_NAME="${1}"
|
|
;;
|
|
-[dD] | -domain | --domain) shift
|
|
check_input "${1}"
|
|
DOMAIN="${1}"
|
|
;;
|
|
-vhname | --vhname) shift
|
|
VHNAME="${1}"
|
|
;;
|
|
*)
|
|
help_message
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
main
|