v-add-web-domain 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. #!/bin/bash
  2. # info: add web domain
  3. # options: USER DOMAIN [IP] [ALIASES] [PROXY_EXTENSIONS] [RESTART]
  4. #
  5. # The function adds virtual host to a server. In cases when ip is
  6. # undefined in the script, "default" template will be used. The alias of
  7. # www.domain.tld type will be automatically assigned to the domain unless
  8. # "none" is transmited as argument. If ip have associated dns name, this
  9. # domain will also get the alias domain-tpl.$ipname. An alias with the ip
  10. # name is useful during the site testing while dns isn't moved to server yet.
  11. #----------------------------------------------------------#
  12. # Variable&Function #
  13. #----------------------------------------------------------#
  14. # Argument definition
  15. user=$1
  16. domain=$2
  17. ip=$3
  18. restart=$4 # will be moved to the end soon
  19. aliases=$5
  20. proxy_ext=$6
  21. # Additional argument formatting
  22. if [[ "$domain" =~ [[:upper:]] ]]; then
  23. domain=$(echo "$domain" |tr '[:upper:]' '[:lower:]')
  24. fi
  25. if [[ "$domain" =~ ^www\..* ]]; then
  26. domain=$(echo "$domain" |sed -e "s/^www.//")
  27. fi
  28. if [[ "$domain" =~ .*\.$ ]]; then
  29. domain=$(echo "$domain" |sed -e "s/\.$//")
  30. fi
  31. domain_idn="$domain"
  32. if [[ "$domain" = *[![:ascii:]]* ]]; then
  33. domain_idn=$(idn -t --quiet -a $domain)
  34. fi
  35. if [ ! -z "$aliases" ] && [ "$aliases" != 'none' ]; then
  36. aliases=$(echo $aliases |tr '[:upper:]' '[:lower:]' |tr ',' '\n')
  37. aliases=$(echo "$aliases" |sed -e "s/\.$//" |sort -u |grep -v www.$domain)
  38. aliases=$(echo "$aliases" |sed -e "/^$/d" |tr '\n' ',' |sed -e "s/,$//")
  39. fi
  40. # Includes
  41. source $VESTA/func/main.sh
  42. source $VESTA/func/domain.sh
  43. source $VESTA/func/ip.sh
  44. source $VESTA/conf/vesta.conf
  45. #----------------------------------------------------------#
  46. # Verifications #
  47. #----------------------------------------------------------#
  48. is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
  49. check_args '2' "$#" 'USER DOMAIN [IP] [RESTART] [ALIASES] [PROXY_EXTENSIONS]'
  50. is_format_valid 'user' 'domain' 'aliases' 'ip' 'proxy_ext'
  51. is_object_valid 'user' 'USER' "$user"
  52. is_object_unsuspended 'user' 'USER' "$user"
  53. is_package_full 'WEB_DOMAINS' 'WEB_ALIASES'
  54. is_domain_new 'web' "$domain,$aliases"
  55. if [ ! -z "$ip" ]; then
  56. is_ip_valid "$ip" "$user"
  57. else
  58. get_user_ip
  59. fi
  60. #----------------------------------------------------------#
  61. # Action #
  62. #----------------------------------------------------------#
  63. # Reading user values
  64. source $USER_DATA/user.conf
  65. # Creating domain directories
  66. mkdir -p $HOMEDIR/$user/web/$domain \
  67. $HOMEDIR/$user/web/$domain/public_html \
  68. $HOMEDIR/$user/web/$domain/public_shtml \
  69. $HOMEDIR/$user/web/$domain/document_errors \
  70. $HOMEDIR/$user/web/$domain/cgi-bin \
  71. $HOMEDIR/$user/web/$domain/private \
  72. $HOMEDIR/$user/web/$domain/stats \
  73. $HOMEDIR/$user/web/$domain/logs
  74. # Creating domain logs
  75. touch /var/log/$WEB_SYSTEM/domains/$domain.bytes \
  76. /var/log/$WEB_SYSTEM/domains/$domain.log \
  77. /var/log/$WEB_SYSTEM/domains/$domain.error.log
  78. ln -f -s /var/log/$WEB_SYSTEM/domains/$domain.*log \
  79. $HOMEDIR/$user/web/$domain/logs/
  80. # Adding domain skeleton
  81. cp -r $WEBTPL/skel/* $HOMEDIR/$user/web/$domain/ >/dev/null 2>&1
  82. for file in $(find "$HOMEDIR/$user/web/$domain/" -type f); do
  83. sed -i "s/%domain%/$domain/g" $file
  84. done
  85. # Changing file owner & permission
  86. chown -R $user:$user $HOMEDIR/$user/web/$domain
  87. chown root:$user /var/log/$WEB_SYSTEM/domains/$domain.* $conf
  88. chmod 640 /var/log/$WEB_SYSTEM/domains/$domain.*
  89. chmod 751 $HOMEDIR/$user/web/$domain $HOMEDIR/$user/web/$domain/*
  90. chmod 551 $HOMEDIR/$user/web/$domain/stats $HOMEDIR/$user/web/$domain/logs
  91. # Addding PHP-FPM backend
  92. if [ ! -z "$WEB_BACKEND" ]; then
  93. if [ -z "$BACKEND_TEMPLATE" ]; then
  94. BACKEND_TEMPLATE='default'
  95. if [ -z "$(grep BACKEND_TEMPLATE $USER_DATA/user.conf)" ]; then
  96. sed -i "s/^DNS_TEMPL/BACKEND_TEMPLATE='default'\nDNS_TEMPL/g" \
  97. $USER_DATA/user.conf
  98. else
  99. update_user_value "$user" '$BACKEND_TEMPLATE' "default"
  100. fi
  101. fi
  102. $BIN/v-add-web-domain-backend "$user" "$domain" $BACKEND_TEMPLATE
  103. check_result $? "Backend error" >/dev/null
  104. fi
  105. # Preparing domain aliases
  106. if [ "$aliases" = 'none' ]; then
  107. ALIAS=''
  108. else
  109. ALIAS="www.$domain"
  110. if [ ! -z "$aliases" ]; then
  111. ALIAS="$ALIAS,$aliases"
  112. fi
  113. ip_alias=$(get_ip_alias $domain)
  114. if [ ! -z "$ip_alias" ]; then
  115. ALIAS="$ALIAS,$ip_alias"
  116. fi
  117. fi
  118. # Preparing domain variables
  119. prepare_web_domain_values
  120. # Adding web server config
  121. add_web_config "$WEB_SYSTEM" "$WEB_TEMPLATE.tpl"
  122. # Adding proxy config
  123. if [ ! -z "$PROXY_SYSTEM" ]; then
  124. PROXY_EXT="$proxy_ext"
  125. if [ -z "$proxy_ext" ]; then
  126. PROXY_EXT="jpg,jpeg,gif,png,ico,svg,css,zip,tgz,gz,rar,bz2,doc,xls"
  127. PROXY_EXT="$PROXY_EXT,exe,pdf,ppt,txt,odt,ods,odp,odf,tar,wav,bmp"
  128. PROXY_EXT="$PROXY_EXT,rtf,js,mp3,avi,mpeg,flv,html,htm"
  129. fi
  130. add_web_config "$PROXY_SYSTEM" "$PROXY_TEMPLATE.tpl"
  131. fi
  132. #----------------------------------------------------------#
  133. # Vesta #
  134. #----------------------------------------------------------#
  135. # Increasing counters
  136. increase_ip_value "$local_ip"
  137. increase_user_value "$user" '$U_WEB_DOMAINS'
  138. increase_user_value "$user" '$U_WEB_ALIASES' "$alias_number"
  139. # Generating timestamp
  140. time_n_date=$(date +'%T %F')
  141. time=$(echo "$time_n_date" |cut -f 1 -d \ )
  142. date=$(echo "$time_n_date" |cut -f 2 -d \ )
  143. # Adding domain in web.conf
  144. echo "DOMAIN='$domain' IP='$ip' IP6='' ALIAS='$ALIAS' TPL='$WEB_TEMPLATE' \
  145. SSL='no' SSL_HOME='same' FTP_USER='' FTP_MD5='' BACKEND='$BACKEND_TEMPLATE' \
  146. PROXY='$PROXY_TEMPLATE' PROXY_EXT='$PROXY_EXT' STATS='' STATS_USER='' \
  147. STATS_CRYPT='' U_DISK='0' U_BANDWIDTH='0' SUSPENDED='no' \
  148. TIME='$time' DATE='$date'" >> $USER_DATA/web.conf
  149. # Restarting web server
  150. if [ "$restart" != 'no' ]; then
  151. $BIN/v-restart-web
  152. check_result $? "Web restart failed" >/dev/null
  153. # Restarting proxy server
  154. if [ ! -z "$PROXY_SYSTEM" ]; then
  155. $BIN/v-restart-proxy
  156. check_result $? "Proxy restart failed" >/dev/null
  157. fi
  158. fi
  159. # Logging
  160. log_history "added web domain $domain"
  161. log_event "$OK" "$ARGUMENTS"
  162. exit