2019-07-30 23:34:41 +02:00
|
|
|
#!/bin/sh
|
|
|
|
|
2019-07-31 13:10:28 +02:00
|
|
|
SCRIPT_NAME="$(realpath "$0")"
|
|
|
|
SCRIPT_PATH="$(dirname "$SCRIPT_NAME")"
|
|
|
|
PATH="$SCRIPT_PATH/../share/bin/:$PATH"
|
|
|
|
|
|
|
|
export SCRIPT_NAME
|
|
|
|
export SCRIPT_PATH
|
|
|
|
export PATH
|
2019-07-30 23:34:41 +02:00
|
|
|
|
|
|
|
cd "$SCRIPT_PATH/../"
|
|
|
|
|
|
|
|
. ./etc/config
|
|
|
|
|
2021-02-21 16:17:45 +01:00
|
|
|
error() {
|
|
|
|
if [ -n "$1" ]; then
|
|
|
|
printf "%s\\n" "$1" >/dev/stderr
|
|
|
|
fi
|
|
|
|
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
2019-07-30 23:34:41 +02:00
|
|
|
exit_if_empty() {
|
|
|
|
if [ -z "$1" ]; then
|
2021-02-21 16:17:45 +01:00
|
|
|
error "$2"
|
2019-07-30 23:34:41 +02:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2021-02-21 16:17:45 +01:00
|
|
|
usage() {
|
|
|
|
cat << EOF
|
|
|
|
|
|
|
|
USAGE:
|
|
|
|
$0 [options]
|
|
|
|
|
|
|
|
OPTIONS:
|
|
|
|
-d The domain name
|
|
|
|
-a Aliase(s)
|
|
|
|
-m value Enable *http* or *https*
|
|
|
|
-r Force redirection of http to https
|
|
|
|
-p value Enable PHP with the given version (eg: 8.0)
|
|
|
|
-u value Username in the system
|
|
|
|
-i Enable script interactivity
|
|
|
|
-h Show this help
|
|
|
|
|
|
|
|
EOF
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#######################
|
|
|
|
# Injection of params #
|
|
|
|
#######################
|
|
|
|
|
|
|
|
ERROR=0
|
|
|
|
INTERACTIVE=1
|
|
|
|
SYSTEM_USER_USERNAME="web"
|
|
|
|
PHP_ENABLED="yes"
|
|
|
|
|
|
|
|
if [ -n "$1" ]; then
|
|
|
|
INTERACTIVE=0
|
|
|
|
|
|
|
|
WEB_HTTP="no"
|
|
|
|
WEB_HTTPS="no"
|
|
|
|
WEB_HTTPS_FORCE="no"
|
|
|
|
PHP_ENABLED="no"
|
|
|
|
fi
|
|
|
|
|
|
|
|
while getopts "hid:a:u:p:m:r" option; do
|
|
|
|
case "$option" in
|
|
|
|
d) DOMAIN="$OPTARG";;
|
|
|
|
a) DOMAIN_ALIASES="$OPTARG";;
|
|
|
|
u) SYSTEM_USER_USERNAME="web$(echo $OPTARG | sed 's/^web//')";;
|
|
|
|
p)
|
|
|
|
PHP_VERSION="$OPTARG"
|
|
|
|
PHP_ENABLED="yes"
|
|
|
|
;;
|
|
|
|
r) WEB_HTTPS_FORCE="yes";;
|
|
|
|
m)
|
|
|
|
if [ "$OPTARG" = "http" ]; then
|
|
|
|
WEB_HTTP="yes"
|
|
|
|
elif [ "$OPTARG" = "https" ]; then
|
|
|
|
WEB_HTTPS="yes"
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
i) INTERACTIVE=1;;
|
|
|
|
h) usage; exit 0;;
|
|
|
|
:) ERROR=1;;
|
|
|
|
?) ERROR=1;;
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ $ERROR -eq 1 ]; then
|
|
|
|
error "Invalid parameter\\n$(usage)"
|
|
|
|
fi
|
|
|
|
|
|
|
|
export INTERACTIVE
|
|
|
|
|
2019-07-30 23:34:41 +02:00
|
|
|
##########################
|
|
|
|
# Collect of information #
|
|
|
|
##########################
|
|
|
|
|
2019-08-01 10:24:50 +02:00
|
|
|
TITLE="VHOST-MANAGER - NEW WEBSITE"
|
2019-07-30 23:34:41 +02:00
|
|
|
|
2021-02-21 16:17:45 +01:00
|
|
|
DOMAIN="$(form_input -t "$TITLE" -l "Domain" -r -d "$DOMAIN")"
|
2019-07-30 23:34:41 +02:00
|
|
|
|
|
|
|
exit_if_empty "$DOMAIN" "Aborded! (DOMAIN_EMPTY)"
|
|
|
|
|
2021-02-21 16:17:45 +01:00
|
|
|
DOMAIN_ALIASES="$(form_input -t "$TITLE" -l "Aliase(s)" -d "$DOMAIN_ALIASES")"
|
2019-07-30 23:34:41 +02:00
|
|
|
|
2021-02-21 16:17:45 +01:00
|
|
|
WEB_HTTP="$(form_yes_no -t "$TITLE" -l "Support of HTTP (recommended)" -d "$WEB_HTTP")"
|
|
|
|
WEB_HTTPS="$(form_yes_no -t "$TITLE" -l "Support of HTTPS (recommended)" -d "$WEB_HTTPS")"
|
2019-07-30 23:34:41 +02:00
|
|
|
|
2019-07-31 13:10:28 +02:00
|
|
|
if [ "$WEB_HTTP" = "yes" ] && [ "$WEB_HTTPS" = "yes" ]; then
|
2021-02-21 16:17:45 +01:00
|
|
|
WEB_HTTPS_FORCE="$(form_yes_no -t "$TITLE" -l "Redirect HTTP to HTTPS (recommended)" -d "$WEB_HTTPS_FORCE")"
|
2019-07-31 13:34:06 +02:00
|
|
|
else
|
|
|
|
WEB_HTTPS_FORCE="no"
|
2019-07-30 23:34:41 +02:00
|
|
|
fi
|
|
|
|
|
2019-08-01 10:46:14 +02:00
|
|
|
DOCUMENT_ROOT="$(form_input -t "$TITLE" -l "Document root\n$WEB_ROOT_PATH/$DOMAIN/" -d "web/")"
|
|
|
|
DOCUMENT_ROOT="$WEB_ROOT_PATH/$DOMAIN/$DOCUMENT_ROOT"
|
2019-07-30 23:34:41 +02:00
|
|
|
|
2021-02-21 16:17:45 +01:00
|
|
|
PHP_ENABLED="$(form_yes_no -t "$TITLE" -l "Support of PHP" -d "$PHP_ENABLED")"
|
2019-07-30 23:34:41 +02:00
|
|
|
|
|
|
|
if [ "$PHP_ENABLED" = "yes" ]; then
|
2021-02-21 16:17:45 +01:00
|
|
|
COMMAND="form_choices -t \"$TITLE\""
|
|
|
|
|
|
|
|
if [ -n "$PHP_VERSION" ]; then
|
|
|
|
COMMAND="$COMMAND -d \"$PHP_VERSION\""
|
|
|
|
fi
|
|
|
|
|
|
|
|
COMMAND="$COMMAND -l \"Version of PHP\""
|
2019-08-05 10:15:40 +02:00
|
|
|
|
2021-02-21 16:17:45 +01:00
|
|
|
for VERSION in $PHP_VERSIONS; do
|
|
|
|
VERSION_NORMALISED="$(echo "$VERSION" | tr -dc 1234567890)"
|
2019-08-05 10:15:40 +02:00
|
|
|
|
2021-02-21 16:17:45 +01:00
|
|
|
eval "LABEL=\$PHP_${VERSION_NORMALISED}_LABEL"
|
2019-08-05 10:15:40 +02:00
|
|
|
|
2021-02-21 16:17:45 +01:00
|
|
|
COMMAND="$COMMAND \"$VERSION\" \"$LABEL\""
|
2019-08-05 10:15:40 +02:00
|
|
|
done
|
|
|
|
|
|
|
|
PHP_VERSION="$(eval "$COMMAND")"
|
2019-07-30 23:34:41 +02:00
|
|
|
|
|
|
|
exit_if_empty "$PHP_VERSION" "Aborded! (PHP_VERSION_EMPTY)"
|
|
|
|
fi
|
|
|
|
|
2019-07-31 14:14:55 +02:00
|
|
|
USER_PASSWORD="$(tr -dc "0123456789!@#$%()[]*@<>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" < /dev/urandom | head -c 20)"
|
2019-07-30 23:34:41 +02:00
|
|
|
|
2021-02-21 16:17:45 +01:00
|
|
|
SYSTEM_USER_USERNAME="$(form_input -t "$TITLE" -l "System username" -d "$SYSTEM_USER_USERNAME" -r)"
|
2019-07-31 13:10:28 +02:00
|
|
|
|
|
|
|
SYSTEM_USER_PASSWORD=$(
|
|
|
|
PASSWORD="$USER_PASSWORD"
|
|
|
|
SALT=$(date +'%S')
|
|
|
|
export PASSWORD
|
|
|
|
export SALT
|
|
|
|
crypt
|
|
|
|
)
|
2019-07-30 23:34:41 +02:00
|
|
|
|
|
|
|
exit_if_empty "$SYSTEM_USER_USERNAME" "Aborded! (SYSTEM_USERNAME_EMPTY)"
|
2020-12-05 13:16:44 +01:00
|
|
|
exit_if_empty "$MOD_FCGI" "Aborded! (MOD_FCGI_EMPTY)"
|
2019-07-30 23:34:41 +02:00
|
|
|
|
2019-07-31 09:57:44 +02:00
|
|
|
################
|
|
|
|
# Confirmation #
|
|
|
|
################
|
|
|
|
|
|
|
|
export DOMAIN
|
|
|
|
export DOMAIN_ALIASES
|
|
|
|
export DOCUMENT_ROOT
|
|
|
|
export SYSTEM_USER_USERNAME
|
|
|
|
export SYSTEM_USER_GROUP
|
|
|
|
export PHP_ENABLED
|
2020-12-05 13:13:33 +01:00
|
|
|
export MOD_FCGI
|
2019-07-31 09:57:44 +02:00
|
|
|
export PHP_VERSION
|
|
|
|
export WEB_HTTP
|
|
|
|
export WEB_HTTPS
|
|
|
|
export WEB_HTTPS_FORCE
|
2019-08-01 10:19:13 +02:00
|
|
|
export WEB_ROOT_PATH
|
|
|
|
export WEB_LOG_PATH
|
|
|
|
export WEB_HTTPS_DEFAULT_CERT_PEM
|
|
|
|
export WEB_HTTPS_DEFAULT_CERT_PRIVKEY
|
|
|
|
export WEB_HTTPS_DEFAULT_CERT_CHAIN
|
2019-09-12 12:56:40 +02:00
|
|
|
export WEB_BIND_ADDRESS
|
2019-07-31 09:57:44 +02:00
|
|
|
|
2021-02-21 16:17:45 +01:00
|
|
|
if [ $INTERACTIVE -eq 0 ]; then
|
|
|
|
CONTINUE="yes"
|
|
|
|
else
|
|
|
|
TMP_FILE="/tmp/vhost-add-$(tr -dc "qwertQWERTasdfgASDFGzxcvbZXCVB" < /dev/urandom | head -c 16)"
|
|
|
|
touch "$TMP_FILE"
|
|
|
|
chmod 600 "$TMP_FILE"
|
|
|
|
template summary > "$TMP_FILE"
|
|
|
|
whiptail --textbox "$TMP_FILE" --title "$TITLE - PREVIEW" 25 80
|
|
|
|
rm "$TMP_FILE"
|
|
|
|
|
|
|
|
CONTINUE="$(form_yes_no -t "$TITLE" -l "Do you confirm?" -n)"
|
|
|
|
fi
|
2019-07-31 09:57:44 +02:00
|
|
|
|
|
|
|
if [ "$CONTINUE" = "no" ]; then
|
2019-07-31 13:10:28 +02:00
|
|
|
printf "Aborded!\\n"
|
2019-07-31 09:57:44 +02:00
|
|
|
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
2019-07-30 23:34:41 +02:00
|
|
|
###############################
|
|
|
|
# User and directory creation #
|
|
|
|
###############################
|
|
|
|
|
2019-08-01 10:19:13 +02:00
|
|
|
useradd -G "$SYSTEM_USER_GROUP" -s "$DEFAULT_SHELL" -m -p "$SYSTEM_USER_PASSWORD" -d "$WEB_ROOT_PATH/$DOMAIN" "$SYSTEM_USER_USERNAME" -k "$SKEL_PATH"
|
|
|
|
chgrp www-data "$WEB_ROOT_PATH/$DOMAIN"
|
2019-09-09 16:04:03 +02:00
|
|
|
chmod 750 "$WEB_ROOT_PATH/$DOMAIN"
|
2019-07-30 23:34:41 +02:00
|
|
|
|
2019-11-08 13:41:51 +01:00
|
|
|
touch "$WEB_LOG_PATH/$DOMAIN.log"
|
|
|
|
chmod 640 "$WEB_LOG_PATH/$DOMAIN.log"
|
|
|
|
chgrp "$SYSTEM_USER_USERNAME" "$WEB_LOG_PATH/$DOMAIN.log"
|
|
|
|
|
2019-07-30 23:34:41 +02:00
|
|
|
#######################
|
|
|
|
# Make configurations #
|
|
|
|
#######################
|
|
|
|
|
|
|
|
SERVICES_TO_RELOAD="apache2"
|
|
|
|
|
|
|
|
SYSTEM_USER_ID="$(id -u "$SYSTEM_USER_USERNAME")"
|
2019-07-31 13:10:28 +02:00
|
|
|
PHP_FPM_PORT=$((SYSTEM_USER_ID + 12000))
|
2019-07-30 23:34:41 +02:00
|
|
|
|
2019-08-01 10:19:13 +02:00
|
|
|
export PHP_FPM_PORT
|
|
|
|
|
2019-07-30 23:34:41 +02:00
|
|
|
if [ "$WEB_HTTP" = "yes" ]; then
|
2019-08-01 10:19:13 +02:00
|
|
|
VHOST_FILE_SA="$APACHE_VHOST_SITES_AVAILABLE_PATH/${DOMAIN}.${WEB_HTTP_PORT}.conf"
|
|
|
|
VHOST_FILE_SE="$APACHE_VHOST_SITES_ENABLED_PATH/${DOMAIN}.${WEB_HTTP_PORT}.conf"
|
|
|
|
|
2019-09-12 12:57:49 +02:00
|
|
|
PORT=$WEB_HTTP_PORT template vhost-http > "$VHOST_FILE_SA"
|
2019-07-30 23:34:41 +02:00
|
|
|
|
|
|
|
ln -rs "$VHOST_FILE_SA" "$VHOST_FILE_SE"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ "$WEB_HTTPS" = "yes" ]; then
|
2019-08-01 10:19:13 +02:00
|
|
|
VHOST_FILE_SA="$APACHE_VHOST_SITES_AVAILABLE_PATH/${DOMAIN}.${WEB_HTTPS_PORT}.conf"
|
|
|
|
VHOST_FILE_SE="$APACHE_VHOST_SITES_ENABLED_PATH/${DOMAIN}.${WEB_HTTPS_PORT}.conf"
|
2019-07-30 23:34:41 +02:00
|
|
|
|
|
|
|
PORT=$WEB_HTTPS_PORT template vhost-https > "$VHOST_FILE_SA"
|
|
|
|
|
|
|
|
ln -rs "$VHOST_FILE_SA" "$VHOST_FILE_SE"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ "$PHP_ENABLED" = "yes" ]; then
|
2019-08-01 10:19:13 +02:00
|
|
|
PHP_VERSION_NORMALISED="$(echo "$PHP_VERSION" | tr -dc 1234567890)"
|
|
|
|
|
|
|
|
eval "FPM_POOL_PATH=\$PHP_FPM${PHP_VERSION_NORMALISED}_POOL_PATH"
|
|
|
|
eval "FPM_SERVICE=\$PHP_FPM${PHP_VERSION_NORMALISED}_SERVICE"
|
2019-07-30 23:34:41 +02:00
|
|
|
|
2019-08-01 10:19:13 +02:00
|
|
|
SERVICES_TO_RELOAD="$SERVICES_TO_RELOAD $FPM_SERVICE"
|
|
|
|
PHP_FPM_FILE="$FPM_POOL_PATH/${SYSTEM_USER_USERNAME}.conf"
|
2019-07-31 09:57:44 +02:00
|
|
|
|
2019-07-30 23:34:41 +02:00
|
|
|
template php-fpm > "$PHP_FPM_FILE"
|
|
|
|
fi
|
|
|
|
|
|
|
|
for SERVICE in $SERVICES_TO_RELOAD; do
|
|
|
|
service $SERVICE reload
|
|
|
|
done
|
|
|
|
|
2019-07-31 09:57:44 +02:00
|
|
|
export USER_PASSWORD
|
|
|
|
|
2019-07-31 13:34:06 +02:00
|
|
|
TMP_FILE="/tmp/vhost-add-$(tr -dc "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" < /dev/urandom | head -c 16)"
|
2019-08-01 11:03:12 +02:00
|
|
|
touch "$TMP_FILE"
|
2019-07-31 09:57:44 +02:00
|
|
|
chmod 600 "$TMP_FILE"
|
2019-08-01 11:03:12 +02:00
|
|
|
template result > "$TMP_FILE"
|
2021-02-21 16:17:45 +01:00
|
|
|
|
|
|
|
if [ $INTERACTIVE -eq 1 ]; then
|
|
|
|
whiptail --textbox "$TMP_FILE" --title "$TITLE - FINISH" 25 80
|
|
|
|
fi
|
|
|
|
|
2019-11-22 13:54:38 +01:00
|
|
|
cat "$TMP_FILE"
|
2019-07-31 09:57:44 +02:00
|
|
|
rm "$TMP_FILE"
|