vhost-manager/bin/vhost-add

178 lines
4.6 KiB
Bash
Executable File

#!/bin/sh
SCRIPT_NAME="$(realpath "$0")"
SCRIPT_PATH="$(dirname "$SCRIPT_NAME")"
PATH="$SCRIPT_PATH/../share/bin/:$PATH"
export SCRIPT_NAME
export SCRIPT_PATH
export PATH
cd "$SCRIPT_PATH/../"
. ./etc/config
exit_if_empty() {
if [ -z "$1" ]; then
if [ -n "$2" ]; then
printf "%s\\n" "$2"
fi
exit 1
fi
}
##########################
# Collect of information #
##########################
TITLE="VHOST-MANAGER - NEW WEBSITE"
DOMAIN="$(form_input -t "$TITLE" -l "Domain" -r)"
exit_if_empty "$DOMAIN" "Aborded! (DOMAIN_EMPTY)"
DOMAIN_ALIASES="$(form_input -t "$TITLE" -l "Aliase(s)")"
WEB_HTTP="$(form_yes_no -t "$TITLE" -l "Support of HTTP (recommended)")"
WEB_HTTPS="$(form_yes_no -t "$TITLE" -l "Support of HTTPS (recommended)")"
if [ "$WEB_HTTP" = "yes" ] && [ "$WEB_HTTPS" = "yes" ]; then
WEB_HTTPS_FORCE="$(form_yes_no -t "$TITLE" -l "Redirect HTTP to HTTPS (recommended)")"
else
WEB_HTTPS_FORCE="no"
fi
DOCUMENT_ROOT="$(form_input -t "$TITLE" -l "Document root\n$WEB_ROOT_PATH/$DOMAIN/" -d "web/")"
DOCUMENT_ROOT="$WEB_ROOT_PATH/$DOMAIN/$DOCUMENT_ROOT"
PHP_ENABLED="$(form_yes_no -t "$TITLE" -l "Support of PHP")"
if [ "$PHP_ENABLED" = "yes" ]; then
COMMAND="form_choices -t \"$TITLE\" -l \"Version of PHP\""
for PHP_VERSION in $PHP_VERSIONS; do
PHP_VERSION_NORMALISED="$(echo "$PHP_VERSION" | tr -dc 1234567890)"
eval "PHP_LABEL=\$PHP_${PHP_VERSION_NORMALISED}_LABEL"
COMMAND="$COMMAND \"$PHP_VERSION\" \"$PHP_LABEL\""
done
PHP_VERSION="$(eval "$COMMAND")"
exit_if_empty "$PHP_VERSION" "Aborded! (PHP_VERSION_EMPTY)"
fi
USER_PASSWORD="$(tr -dc "0123456789!@#$%()[]*@<>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" < /dev/urandom | head -c 20)"
SYSTEM_USER_USERNAME="$(form_input -t "$TITLE" -l "System username" -d "web" -r)"
SYSTEM_USER_PASSWORD=$(
PASSWORD="$USER_PASSWORD"
SALT=$(date +'%S')
export PASSWORD
export SALT
crypt
)
exit_if_empty "$SYSTEM_USER_USERNAME" "Aborded! (SYSTEM_USERNAME_EMPTY)"
################
# Confirmation #
################
export DOMAIN
export DOMAIN_ALIASES
export DOCUMENT_ROOT
export SYSTEM_USER_USERNAME
export SYSTEM_USER_GROUP
export PHP_ENABLED
export PHP_VERSION
export WEB_HTTP
export WEB_HTTPS
export WEB_HTTPS_FORCE
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
export WEB_BIND_ADDRESS
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)"
if [ "$CONTINUE" = "no" ]; then
printf "Aborded!\\n"
exit 0
fi
###############################
# User and directory creation #
###############################
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"
chmod 750 "$WEB_ROOT_PATH/$DOMAIN"
#######################
# Make configurations #
#######################
SERVICES_TO_RELOAD="apache2"
SYSTEM_USER_ID="$(id -u "$SYSTEM_USER_USERNAME")"
PHP_FPM_PORT=$((SYSTEM_USER_ID + 12000))
export PHP_FPM_PORT
if [ "$WEB_HTTP" = "yes" ]; then
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"
PORT=$WEB_HTTP_PORT template vhost-http > "$VHOST_FILE_SA"
ln -rs "$VHOST_FILE_SA" "$VHOST_FILE_SE"
fi
if [ "$WEB_HTTPS" = "yes" ]; then
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"
PORT=$WEB_HTTPS_PORT template vhost-https > "$VHOST_FILE_SA"
ln -rs "$VHOST_FILE_SA" "$VHOST_FILE_SE"
fi
if [ "$PHP_ENABLED" = "yes" ]; then
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"
SERVICES_TO_RELOAD="$SERVICES_TO_RELOAD $FPM_SERVICE"
PHP_FPM_FILE="$FPM_POOL_PATH/${SYSTEM_USER_USERNAME}.conf"
template php-fpm > "$PHP_FPM_FILE"
fi
for SERVICE in $SERVICES_TO_RELOAD; do
service $SERVICE reload
done
export USER_PASSWORD
TMP_FILE="/tmp/vhost-add-$(tr -dc "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" < /dev/urandom | head -c 16)"
touch "$TMP_FILE"
chmod 600 "$TMP_FILE"
template result > "$TMP_FILE"
whiptail --textbox "$TMP_FILE" --title "$TITLE - FINISH" 25 80
rm "$TMP_FILE"