v-add-web-domain 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. #!/bin/bash
  2. # info: add web domain
  3. # options: USER DOMAIN IP [RESTART] [ALIASES] [PROXY_EXTENTIONS]
  4. #
  5. # The function adds virtual host to a server. In cases when a template is
  6. # undefined in the script, the template "default" will be used. The alias of
  7. # www.domain.tld type will be automatically assigned to the domain. If ip have
  8. # associated dns name, this domain will also get the alias domain-tpl.$ipname.
  9. # An alias with the ip name is useful during the site testing while dns isn't
  10. # moved to a server yet.
  11. #----------------------------------------------------------#
  12. # Variable&Function #
  13. #----------------------------------------------------------#
  14. # Argument definition
  15. user=$1
  16. domain=$(idn -t --quiet -u "$2" )
  17. domain=$(echo $domain | sed -e 's/\.*$//g' -e 's/^\.*//g')
  18. domain=$(echo $domain | tr '[:upper:]' '[:lower:]')
  19. domain_idn=$(idn -t --quiet -a "$domain")
  20. ip=$3; IP=$3
  21. restart=$4
  22. aliases=$5
  23. default_extentions="jpg,jpeg,gif,png,ico,svg,css,zip,tgz,gz,rar,bz2,doc,xls,\
  24. exe,pdf,ppt,txt,odt,ods,odp,odf,tar,wav,bmp,rtf,js,mp3,avi,mpeg,flv,html,htm"
  25. extentions=${6-$default_extentions}
  26. # Includes
  27. source $VESTA/func/main.sh
  28. source $VESTA/func/domain.sh
  29. source $VESTA/func/ip.sh
  30. source $VESTA/conf/vesta.conf
  31. #----------------------------------------------------------#
  32. # Verifications #
  33. #----------------------------------------------------------#
  34. check_args '3' "$#" 'USER DOMAIN IP [RESTART] [ALIASES] [PROXY_EXTENTIONS]'
  35. validate_format 'user' 'domain' 'ip'
  36. is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
  37. is_object_valid 'user' 'USER' "$user"
  38. is_object_unsuspended 'user' 'USER' "$user"
  39. is_domain_new 'web'
  40. is_ip_valid
  41. is_ip_avalable
  42. is_package_full 'WEB_DOMAINS'
  43. template=$(get_user_value '$WEB_TEMPLATE')
  44. is_web_template_valid
  45. if [ ! -z "$aliases" ]; then
  46. for domain_alias in $(echo "${aliases//,/ }"); do
  47. is_domain_new 'web' "$domain_alias" 'alias'
  48. done
  49. fi
  50. if [ ! -z "$PROXY_SYSTEM" ]; then
  51. validate_format 'extentions'
  52. proxy=$(get_user_value '$PROXY_TEMPLATE')
  53. is_proxy_template_valid $proxy
  54. fi
  55. #----------------------------------------------------------#
  56. # Action #
  57. #----------------------------------------------------------#
  58. # Checking domain backend in case PHP-FPM is configured
  59. if [ ! -z "$WEB_BACKEND" ]; then
  60. is_web_backend_pool_valid
  61. $BIN/v-add-web-domain-backend $user $domain
  62. rc=$?
  63. if [ $rc -ne 0 ]; then
  64. exit $rc
  65. fi
  66. get_domain_backend_values
  67. backend=$(get_user_value '$BACKEND_TEMPLATE')
  68. if [ -z "$backend" ]; then
  69. backend='default'
  70. fi
  71. fi
  72. # Defining variables for add_config function
  73. ip=$(get_real_ip $ip)
  74. group="$user"
  75. email="info@$domain"
  76. docroot="$HOMEDIR/$user/web/$domain/public_html"
  77. tpl_file="$WEBTPL/$WEB_SYSTEM/$WEB_BACKEND/$template.tpl"
  78. conf="$HOMEDIR/$user/conf/web/$WEB_SYSTEM.conf"
  79. # Defining domain aliases
  80. ip_name=$(get_ip_name)
  81. if [ -z "$aliases" ]; then
  82. if [ -z "$ip_name" ]; then
  83. aliases="www.$domain"
  84. else
  85. aliases="www.$domain,${domain//./-}.$ip_name"
  86. fi
  87. else
  88. if [ ! -z "$ip_name" ]; then
  89. aliases="$aliases,${domain//./-}.$ip_name"
  90. fi
  91. fi
  92. aliases_idn=$(idn -t --quiet -a $aliases)
  93. alias_string="ServerAlias ${aliases_idn//,/ }"
  94. # Adding web config
  95. add_web_config
  96. # Building directory tree
  97. mkdir -p $HOMEDIR/$user/web/$domain \
  98. $HOMEDIR/$user/web/$domain/public_html \
  99. $HOMEDIR/$user/web/$domain/public_shtml \
  100. $HOMEDIR/$user/web/$domain/document_errors \
  101. $HOMEDIR/$user/web/$domain/cgi-bin \
  102. $HOMEDIR/$user/web/$domain/private \
  103. $HOMEDIR/$user/web/$domain/stats \
  104. $HOMEDIR/$user/web/$domain/logs
  105. # Adding domain logs
  106. touch /var/log/$WEB_SYSTEM/domains/$domain.bytes \
  107. /var/log/$WEB_SYSTEM/domains/$domain.log \
  108. /var/log/$WEB_SYSTEM/domains/$domain.error.log
  109. # Adding symlink for logs
  110. ln -f -s /var/log/$WEB_SYSTEM/domains/$domain.*log \
  111. $HOMEDIR/$user/web/$domain/logs/
  112. # Adding domain skeleton
  113. if [ -e "$WEBTPL/skel/public_html/" ]; then
  114. cp -r $WEBTPL/skel/public_html/ $HOMEDIR/$user/web/$domain/
  115. fi
  116. if [ -e "$WEBTPL/skel/public_shtml/" ]; then
  117. cp -r $WEBTPL/skel/public_shtml/ $HOMEDIR/$user/web/$domain/
  118. fi
  119. if [ -e "$WEBTPL/skel/document_errors/" ]; then
  120. cp -r $WEBTPL/skel/document_errors/ $HOMEDIR/$user/web/$domain/
  121. fi
  122. if [ -e "$WEBTPL/skel/cgi-bin/" ]; then
  123. cp -r $WEBTPL/skel/cgi-bin/ $HOMEDIR/$user/web/$domain/
  124. fi
  125. # Changing tpl values
  126. for file in $(find "$HOMEDIR/$user/web/$domain/" -type f); do
  127. sed -i "s/%domain%/$domain/g" $file
  128. done
  129. # Changing file owner
  130. chown -R $user:$user $HOMEDIR/$user/web/$domain
  131. chown root:$user /var/log/$WEB_SYSTEM/domains/$domain.* $conf
  132. # Changing file permissions
  133. chmod 640 $conf /var/log/$WEB_SYSTEM/domains/$domain.*
  134. chmod 551 $HOMEDIR/$user/web/$domain
  135. chmod 751 $HOMEDIR/$user/web/$domain/private \
  136. $HOMEDIR/$user/web/$domain/cgi-bin \
  137. $HOMEDIR/$user/web/$domain/public_html \
  138. $HOMEDIR/$user/web/$domain/public_shtml \
  139. $HOMEDIR/$user/web/$domain/document_errors
  140. chmod -f -R 665 $HOMEDIR/$user/web/$domain/cgi-bin/* \
  141. $HOMEDIR/$user/web/$domain/public_html/* \
  142. $HOMEDIR/$user/web/$domain/document_errors/* \
  143. chmod 551 $HOMEDIR/$user/web/$domain/stats \
  144. $HOMEDIR/$user/web/$domain/logs
  145. # Running template trigger
  146. if [ -x $WEBTPL/$WEB_SYSTEM/$WEB_BACKEND/$template.sh ]; then
  147. $WEBTPL/$WEB_SYSTEM/$WEB_BACKEND/$template.sh \
  148. $user $domain $ip $HOMEDIR $docroot
  149. fi
  150. # Checking web config include
  151. web_conf="/etc/$WEB_SYSTEM/conf.d/vesta.conf"
  152. web_include=$(grep "$conf" $web_conf )
  153. if [ -z "$web_include" ] && [ "$WEB_SYSTEM" != 'nginx' ]; then
  154. echo "Include $conf" >> $web_conf
  155. fi
  156. if [ -z "$web_include" ] && [ "$WEB_SYSTEM" = 'nginx' ]; then
  157. echo "include $conf;" >> $web_conf
  158. fi
  159. # Checking proxy system
  160. if [ ! -z "$PROXY_SYSTEM" ]; then
  161. PROXY_EXT="$extentions"
  162. tpl_file="$WEBTPL/$PROXY_SYSTEM/$proxy.tpl"
  163. conf="$HOMEDIR/$user/conf/web/$PROXY_SYSTEM.conf"
  164. add_web_config
  165. chown root:$user $conf
  166. chmod 640 $conf
  167. proxy_conf="/etc/$PROXY_SYSTEM/conf.d/vesta.conf"
  168. if [ -z "$(grep "$conf" $proxy_conf)" ]; then
  169. echo "include $conf;" >> $proxy_conf
  170. fi
  171. if [ -x $WEBTPL/$PROXY_SYSTEM/$proxy.sh ]; then
  172. $WEBTPL/$PROXY_SYSTEM/$proxy.sh $user $domain $ip $HOMEDIR $docroot
  173. fi
  174. fi
  175. #----------------------------------------------------------#
  176. # Vesta #
  177. #----------------------------------------------------------#
  178. # Increasing counters
  179. increase_ip_value "$ip"
  180. increase_user_value "$user" '$U_WEB_DOMAINS'
  181. increase_user_value "$user" '$U_WEB_ALIASES'
  182. # Defining domain variables
  183. str="DOMAIN='$domain' IP='$IP' IP6='' ALIAS='$aliases' TPL='$template'"
  184. str="$str SSL='no' SSL_HOME='same' FTP_USER='' FTP_MD5='' BACKEND='$backend'"
  185. str="$str PROXY='$proxy' PROXY_EXT='$extentions' STATS='' STATS_USER=''"
  186. str="$str STATS_CRYPT='' U_DISK='0' U_BANDWIDTH='0' SUSPENDED='no'"
  187. str="$str TIME='$TIME' DATE='$DATE'"
  188. # Registering domain
  189. echo "$str" >> $USER_DATA/web.conf
  190. # Restarting web server
  191. if [ "$restart" != 'no' ]; then
  192. $BIN/v-restart-web
  193. check_result $? "Web restart failed" >/dev/null
  194. if [ ! -z "$PROXY_SYSTEM" ]; then
  195. $BIN/v-restart-proxy
  196. check_result $? "Proxy restart failed" >/dev/null
  197. fi
  198. fi
  199. # Logging
  200. log_history "added web domain $domain"
  201. log_event "$OK" "$EVENT"
  202. exit