|
|
@@ -1,27 +1,28 @@
|
|
|
#!/bin/bash
|
|
|
# info: add web domain
|
|
|
-# options: USER DOMAIN IP [RESTART]
|
|
|
+# options: USER DOMAIN [IP] [ALIASES] [PROXY_EXTENSIONS] [RESTART]
|
|
|
#
|
|
|
-# The function adds virtual host to a server. In cases when a template is
|
|
|
-# undefined in the script, the template "default" will be used. The alias of
|
|
|
-# www.domain.tld type will be automatically assigned to the domain. If ip have
|
|
|
-# assocated dns name, this domain will also get the alias domain-tpl.$ipname.
|
|
|
-# An alias with the ip name is useful during the site testing while dns isn't
|
|
|
-# moved to a server yet.
|
|
|
+# The function adds virtual host to a server. In cases when ip is
|
|
|
+# undefined in the script, "default" template will be used. The alias of
|
|
|
+# www.domain.tld type will be automatically assigned to the domain unless
|
|
|
+# "none" is transmited as argument. If ip have associated dns name, this
|
|
|
+# domain will also get the alias domain-tpl.$ipname. An alias with the ip
|
|
|
+# name is useful during the site testing while dns isn't moved to server yet.
|
|
|
|
|
|
|
|
|
#----------------------------------------------------------#
|
|
|
# Variable&Function #
|
|
|
#----------------------------------------------------------#
|
|
|
|
|
|
-# Argument defenition
|
|
|
+
|
|
|
+# Argument definition
|
|
|
user=$1
|
|
|
-domain=$(idn -t --quiet -u "$2" )
|
|
|
-domain=$(echo $domain | sed -e 's/\.*$//g' -e 's/^\.*//g')
|
|
|
-domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
|
|
|
-domain_idn=$(idn -t --quiet -a "$domain")
|
|
|
+domain=$2
|
|
|
+domain_idn=$2
|
|
|
ip=$3
|
|
|
-restart=$4
|
|
|
+restart=$4 # will be moved to the end soon
|
|
|
+aliases=$5
|
|
|
+proxy_ext=$6
|
|
|
|
|
|
# Includes
|
|
|
source $VESTA/func/main.sh
|
|
|
@@ -29,61 +30,39 @@ source $VESTA/func/domain.sh
|
|
|
source $VESTA/func/ip.sh
|
|
|
source $VESTA/conf/vesta.conf
|
|
|
|
|
|
+# Additional argument formatting
|
|
|
+format_domain
|
|
|
+format_domain_idn
|
|
|
+format_aliases
|
|
|
+
|
|
|
|
|
|
#----------------------------------------------------------#
|
|
|
# Verifications #
|
|
|
#----------------------------------------------------------#
|
|
|
|
|
|
-check_args '3' "$#" 'USER DOMAIN IP [RESTART]'
|
|
|
-validate_format 'user' 'domain' 'ip'
|
|
|
is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
|
|
|
+check_args '2' "$#" 'USER DOMAIN [IP] [RESTART] [ALIASES] [PROXY_EXTENSIONS]'
|
|
|
+is_format_valid 'user' 'domain' 'aliases' 'ip' 'proxy_ext'
|
|
|
is_object_valid 'user' 'USER' "$user"
|
|
|
is_object_unsuspended 'user' 'USER' "$user"
|
|
|
-is_domain_new 'web'
|
|
|
-is_ip_valid
|
|
|
-is_ip_avalable
|
|
|
-is_package_full 'WEB_DOMAINS'
|
|
|
-
|
|
|
-template=$(get_user_value '$WEB_TEMPLATE')
|
|
|
-is_web_template_valid
|
|
|
+is_package_full 'WEB_DOMAINS' 'WEB_ALIASES'
|
|
|
+is_domain_new 'web' "$domain,$aliases"
|
|
|
+is_dir_symlink $HOMEDIR/$user/web
|
|
|
+if [ ! -z "$ip" ]; then
|
|
|
+ is_ip_valid "$ip" "$user"
|
|
|
+else
|
|
|
+ get_user_ip
|
|
|
+fi
|
|
|
|
|
|
|
|
|
#----------------------------------------------------------#
|
|
|
# Action #
|
|
|
#----------------------------------------------------------#
|
|
|
|
|
|
-# Define real ip in case of NAT
|
|
|
-IP=$ip
|
|
|
-ip=$(get_real_ip $ip)
|
|
|
-
|
|
|
-# Defining domain aliases
|
|
|
-ip_name=$(get_ip_name)
|
|
|
-ip_name_idn=$(idn -t --quiet -a "$ip_name")
|
|
|
-domain_alias="www.$domain"
|
|
|
-domain_alias_idn="www.$domain_idn"
|
|
|
-if [ ! -z "$ip_name" ]; then
|
|
|
- domain_alias_dash="${domain//./-}.$ip_name"
|
|
|
- domain_alias_dash_idn="${domain_idn//./-}.$ip_name_idn"
|
|
|
- aliases="$domain_alias,$domain_alias_dash"
|
|
|
- aliases_idn="$domain_alias_idn,$domain_alias_dash_idn"
|
|
|
- alias_string="ServerAlias $domain_alias_idn $domain_alias_dash_idn"
|
|
|
-else
|
|
|
- aliases="$domain_alias"
|
|
|
- aliases_idn="$domain_alias_idn"
|
|
|
- alias_string="ServerAlias $domain_alias_idn"
|
|
|
-fi
|
|
|
-
|
|
|
-# Defining vars for add_config function
|
|
|
-group="$user"
|
|
|
-email="info@$domain"
|
|
|
-docroot="$HOMEDIR/$user/web/$domain/public_html"
|
|
|
-tpl_file="$WEBTPL/$WEB_SYSTEM/$template.tpl"
|
|
|
-conf="$HOMEDIR/$user/conf/web/$WEB_SYSTEM.conf"
|
|
|
+# Reading user values
|
|
|
+source $USER_DATA/user.conf
|
|
|
|
|
|
-# Adding web config
|
|
|
-add_web_config
|
|
|
-
|
|
|
-# Building directory tree
|
|
|
+# Creating domain directories
|
|
|
mkdir -p $HOMEDIR/$user/web/$domain \
|
|
|
$HOMEDIR/$user/web/$domain/public_html \
|
|
|
$HOMEDIR/$user/web/$domain/public_shtml \
|
|
|
@@ -93,63 +72,74 @@ mkdir -p $HOMEDIR/$user/web/$domain \
|
|
|
$HOMEDIR/$user/web/$domain/stats \
|
|
|
$HOMEDIR/$user/web/$domain/logs
|
|
|
|
|
|
-# Adding domain logs
|
|
|
+# Creating domain logs
|
|
|
touch /var/log/$WEB_SYSTEM/domains/$domain.bytes \
|
|
|
/var/log/$WEB_SYSTEM/domains/$domain.log \
|
|
|
/var/log/$WEB_SYSTEM/domains/$domain.error.log
|
|
|
-
|
|
|
-# Adding symlink for logs
|
|
|
ln -f -s /var/log/$WEB_SYSTEM/domains/$domain.*log \
|
|
|
$HOMEDIR/$user/web/$domain/logs/
|
|
|
|
|
|
# Adding domain skeleton
|
|
|
-if [ -e "$WEBTPL/skel/public_html/" ]; then
|
|
|
- cp -r $WEBTPL/skel/public_html/ $HOMEDIR/$user/web/$domain/
|
|
|
-fi
|
|
|
-if [ -e "$WEBTPL/skel/public_shtml/" ]; then
|
|
|
- cp -r $WEBTPL/skel/public_shtml/ $HOMEDIR/$user/web/$domain/
|
|
|
-fi
|
|
|
-if [ -e "$WEBTPL/skel/document_errors/" ]; then
|
|
|
- cp -r $WEBTPL/skel/document_errors/ $HOMEDIR/$user/web/$domain/
|
|
|
-fi
|
|
|
-if [ -e "$WEBTPL/skel/cgi-bin/" ]; then
|
|
|
- cp -r $WEBTPL/skel/cgi-bin/ $HOMEDIR/$user/web/$domain/
|
|
|
-fi
|
|
|
-
|
|
|
-# Changing tpl values
|
|
|
+cp -r $WEBTPL/skel/* $HOMEDIR/$user/web/$domain/ >/dev/null 2>&1
|
|
|
for file in $(find "$HOMEDIR/$user/web/$domain/" -type f); do
|
|
|
sed -i "s/%domain%/$domain/g" $file
|
|
|
done
|
|
|
|
|
|
-# Changing file owner
|
|
|
+# Changing file owner & permission
|
|
|
chown -R $user:$user $HOMEDIR/$user/web/$domain
|
|
|
-chown root:$user /var/log/$WEB_SYSTEM/domains/$domain.*
|
|
|
-chown root:$user $conf
|
|
|
-
|
|
|
-# Changing file permissions
|
|
|
-chmod 640 $conf
|
|
|
-chmod 551 $HOMEDIR/$user/web/$domain
|
|
|
-chmod 751 $HOMEDIR/$user/web/$domain/private
|
|
|
-chmod 751 $HOMEDIR/$user/web/$domain/cgi-bin
|
|
|
-chmod 751 $HOMEDIR/$user/web/$domain/public_html
|
|
|
-chmod 751 $HOMEDIR/$user/web/$domain/public_shtml
|
|
|
-chmod 751 $HOMEDIR/$user/web/$domain/document_errors
|
|
|
-chmod -f -R 665 $HOMEDIR/$user/web/$domain/cgi-bin/*
|
|
|
-chmod -f -R 665 $HOMEDIR/$user/web/$domain/public_html/*
|
|
|
-chmod -f -R 665 $HOMEDIR/$user/web/$domain/document_errors/*
|
|
|
-chmod 551 $HOMEDIR/$user/web/$domain/stats
|
|
|
-chmod 551 $HOMEDIR/$user/web/$domain/logs
|
|
|
+chown root:$user /var/log/$WEB_SYSTEM/domains/$domain.* $conf
|
|
|
chmod 640 /var/log/$WEB_SYSTEM/domains/$domain.*
|
|
|
+chmod 751 $HOMEDIR/$user/web/$domain $HOMEDIR/$user/web/$domain/*
|
|
|
+chmod 551 $HOMEDIR/$user/web/$domain/stats $HOMEDIR/$user/web/$domain/logs
|
|
|
+chmod 644 $HOMEDIR/$user/web/$domain/public_*html/*
|
|
|
+
|
|
|
+# Addding PHP-FPM backend
|
|
|
+if [ ! -z "$WEB_BACKEND" ]; then
|
|
|
+ if [ -z "$BACKEND_TEMPLATE" ]; then
|
|
|
+ BACKEND_TEMPLATE='default'
|
|
|
+ if [ -z "$(grep BACKEND_TEMPLATE $USER_DATA/user.conf)" ]; then
|
|
|
+ sed -i "s/^DNS_TEMPL/BACKEND_TEMPLATE='default'\nDNS_TEMPL/g" \
|
|
|
+ $USER_DATA/user.conf
|
|
|
+ else
|
|
|
+ update_user_value "$user" '$BACKEND_TEMPLATE' "default"
|
|
|
+ fi
|
|
|
+ fi
|
|
|
+ $BIN/v-add-web-domain-backend "$user" "$domain" $BACKEND_TEMPLATE
|
|
|
+ check_result $? "Backend error" >/dev/null
|
|
|
+fi
|
|
|
|
|
|
-# Running template trigger
|
|
|
-if [ -x $WEBTPL/$WEB_SYSTEM/$template.sh ]; then
|
|
|
- $WEBTPL/$WEB_SYSTEM/$template.sh $user $domain $ip $HOMEDIR $docroot
|
|
|
+# Preparing domain aliases
|
|
|
+if [ "$aliases" = 'none' ]; then
|
|
|
+ ALIAS=''
|
|
|
+else
|
|
|
+ ALIAS="www.$domain"
|
|
|
+ if [ -z "$aliases" ]; then
|
|
|
+ ALIAS="www.$domain"
|
|
|
+ else
|
|
|
+ ALIAS="$aliases"
|
|
|
+ fi
|
|
|
+
|
|
|
+ ip_alias=$(get_ip_alias $domain)
|
|
|
+ if [ ! -z "$ip_alias" ]; then
|
|
|
+ ALIAS="$ALIAS,$ip_alias"
|
|
|
+ fi
|
|
|
fi
|
|
|
|
|
|
-# Checking web config
|
|
|
-web_conf="/etc/$WEB_SYSTEM/conf.d/vesta.conf"
|
|
|
-if [ -z "$(grep $conf $web_conf)" ]; then
|
|
|
- echo "Include $conf" >> $web_conf
|
|
|
+# Preparing domain variables
|
|
|
+prepare_web_domain_values
|
|
|
+
|
|
|
+# Adding web server config
|
|
|
+add_web_config "$WEB_SYSTEM" "$WEB_TEMPLATE.tpl"
|
|
|
+
|
|
|
+# Adding proxy config
|
|
|
+if [ ! -z "$PROXY_SYSTEM" ]; then
|
|
|
+ PROXY_EXT="$proxy_ext"
|
|
|
+ if [ -z "$proxy_ext" ]; then
|
|
|
+ PROXY_EXT="jpg,jpeg,gif,png,ico,svg,css,zip,tgz,gz,rar,bz2,doc,xls"
|
|
|
+ PROXY_EXT="$PROXY_EXT,exe,pdf,ppt,txt,odt,ods,odp,odf,tar,wav,bmp"
|
|
|
+ PROXY_EXT="$PROXY_EXT,rtf,js,mp3,avi,mpeg,flv,html,htm"
|
|
|
+ fi
|
|
|
+ add_web_config "$PROXY_SYSTEM" "$PROXY_TEMPLATE.tpl"
|
|
|
fi
|
|
|
|
|
|
|
|
|
@@ -158,31 +148,32 @@ fi
|
|
|
#----------------------------------------------------------#
|
|
|
|
|
|
# Increasing counters
|
|
|
-increase_ip_value "$ip"
|
|
|
+increase_ip_value "$local_ip"
|
|
|
increase_user_value "$user" '$U_WEB_DOMAINS'
|
|
|
-increase_user_value "$user" '$U_WEB_ALIASES'
|
|
|
-
|
|
|
-# Defining domain variables
|
|
|
-str="DOMAIN='$domain' IP='$IP' IP6='' ALIAS='$aliases' TPL='$template'"
|
|
|
-str="$str SSL='no' SSL_HOME='same' FTP_USER='' FTP_MD5=''"
|
|
|
-str="$str PROXY='' PROXY_EXT='' STATS='' STATS_USER=''"
|
|
|
-str="$str STATS_CRYPT='' U_DISK='0' U_BANDWIDTH='0' SUSPENDED='no'"
|
|
|
-str="$str TIME='$TIME' DATE='$DATE'"
|
|
|
-
|
|
|
-# Registering domain
|
|
|
-echo "$str" >> $USER_DATA/web.conf
|
|
|
-chmod 660 $USER_DATA/web.conf
|
|
|
-
|
|
|
-# Restart web server
|
|
|
-if [ "$restart" != 'no' ]; then
|
|
|
- $BIN/v-restart-web
|
|
|
- if [ $? -ne 0 ]; then
|
|
|
- exit $E_RESTART
|
|
|
- fi
|
|
|
-fi
|
|
|
+increase_user_value "$user" '$U_WEB_ALIASES' "$alias_number"
|
|
|
+
|
|
|
+# Generating timestamp
|
|
|
+time_n_date=$(date +'%T %F')
|
|
|
+time=$(echo "$time_n_date" |cut -f 1 -d \ )
|
|
|
+date=$(echo "$time_n_date" |cut -f 2 -d \ )
|
|
|
+
|
|
|
+# Adding domain in web.conf
|
|
|
+echo "DOMAIN='$domain' IP='$ip' IP6='' ALIAS='$ALIAS' TPL='$WEB_TEMPLATE'\
|
|
|
+ SSL='no' SSL_HOME='same' LETSENCRYPT='no' FTP_USER='' FTP_MD5=''\
|
|
|
+ BACKEND='$BACKEND_TEMPLATE' PROXY='$PROXY_TEMPLATE' PROXY_EXT='$PROXY_EXT'\
|
|
|
+ STATS='' STATS_USER='' STATS_CRYPT='' U_DISK='0' U_BANDWIDTH='0'\
|
|
|
+ SUSPENDED='no' TIME='$time' DATE='$date'" >> $USER_DATA/web.conf
|
|
|
+
|
|
|
+# Restarting web server
|
|
|
+$BIN/v-restart-web $restart
|
|
|
+check_result $? "Web restart failed" >/dev/null
|
|
|
+
|
|
|
+# Restarting proxy server
|
|
|
+$BIN/v-restart-proxy $restart
|
|
|
+check_result $? "Proxy restart failed" >/dev/null
|
|
|
|
|
|
# Logging
|
|
|
log_history "added web domain $domain"
|
|
|
-log_event "$OK" "$EVENT"
|
|
|
+log_event "$OK" "$ARGUMENTS"
|
|
|
|
|
|
exit
|