v-add-web-domain 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. #!/bin/bash
  2. # info: add web domain
  3. # options: USER DOMAIN IP [RESTART]
  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. # assocated 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 defenition
  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
  21. restart=$4
  22. # Includes
  23. source $VESTA/func/main.sh
  24. source $VESTA/func/domain.sh
  25. source $VESTA/func/ip.sh
  26. source $VESTA/conf/vesta.conf
  27. #----------------------------------------------------------#
  28. # Verifications #
  29. #----------------------------------------------------------#
  30. check_args '3' "$#" 'USER DOMAIN IP [RESTART]'
  31. validate_format 'user' 'domain' 'ip'
  32. is_system_enabled "$WEB_SYSTEM" 'WEB_SYSTEM'
  33. is_object_valid 'user' 'USER' "$user"
  34. is_object_unsuspended 'user' 'USER' "$user"
  35. is_domain_new 'web'
  36. is_ip_valid
  37. is_ip_avalable
  38. is_package_full 'WEB_DOMAINS'
  39. template=$(get_user_value '$WEB_TEMPLATE')
  40. is_web_template_valid
  41. #----------------------------------------------------------#
  42. # Action #
  43. #----------------------------------------------------------#
  44. # Define real ip in case of NAT
  45. IP=$ip
  46. ip=$(get_real_ip $ip)
  47. # Defining domain aliases
  48. ip_name=$(get_ip_name)
  49. ip_name_idn=$(idn -t --quiet -a "$ip_name")
  50. domain_alias="www.$domain"
  51. domain_alias_idn="www.$domain_idn"
  52. if [ ! -z "$ip_name" ]; then
  53. domain_alias_dash="${domain//./-}.$ip_name"
  54. domain_alias_dash_idn="${domain_idn//./-}.$ip_name_idn"
  55. aliases="$domain_alias,$domain_alias_dash"
  56. aliases_idn="$domain_alias_idn,$domain_alias_dash_idn"
  57. alias_string="ServerAlias $domain_alias_idn $domain_alias_dash_idn"
  58. else
  59. aliases="$domain_alias"
  60. aliases_idn="$domain_alias_idn"
  61. alias_string="ServerAlias $domain_alias_idn"
  62. fi
  63. # Defining vars for add_config function
  64. group="$user"
  65. email="info@$domain"
  66. docroot="$HOMEDIR/$user/web/$domain/public_html"
  67. tpl_file="$WEBTPL/$WEB_SYSTEM/$WEB_BACKEND/$template.tpl"
  68. conf="$HOMEDIR/$user/conf/web/$WEB_SYSTEM.conf"
  69. # Checking backend
  70. if [ ! -z "$WEB_BACKEND" ]; then
  71. is_web_backend_pool_valid
  72. $BIN/v-add-web-domain-backend $user $domain
  73. rc=$?
  74. if [ $rc -ne 0 ]; then
  75. exit $rc
  76. fi
  77. get_domain_backend_values
  78. fi
  79. # Adding web config
  80. add_web_config
  81. # Building directory tree
  82. mkdir -p $HOMEDIR/$user/web/$domain \
  83. $HOMEDIR/$user/web/$domain/public_html \
  84. $HOMEDIR/$user/web/$domain/public_shtml \
  85. $HOMEDIR/$user/web/$domain/document_errors \
  86. $HOMEDIR/$user/web/$domain/cgi-bin \
  87. $HOMEDIR/$user/web/$domain/private \
  88. $HOMEDIR/$user/web/$domain/stats \
  89. $HOMEDIR/$user/web/$domain/logs
  90. # Adding domain logs
  91. touch /var/log/$WEB_SYSTEM/domains/$domain.bytes \
  92. /var/log/$WEB_SYSTEM/domains/$domain.log \
  93. /var/log/$WEB_SYSTEM/domains/$domain.error.log
  94. # Adding symlink for logs
  95. ln -f -s /var/log/$WEB_SYSTEM/domains/$domain.*log \
  96. $HOMEDIR/$user/web/$domain/logs/
  97. # Adding domain skeleton
  98. if [ -e "$WEBTPL/skel/public_html/" ]; then
  99. cp -r $WEBTPL/skel/public_html/ $HOMEDIR/$user/web/$domain/
  100. fi
  101. if [ -e "$WEBTPL/skel/public_shtml/" ]; then
  102. cp -r $WEBTPL/skel/public_shtml/ $HOMEDIR/$user/web/$domain/
  103. fi
  104. if [ -e "$WEBTPL/skel/document_errors/" ]; then
  105. cp -r $WEBTPL/skel/document_errors/ $HOMEDIR/$user/web/$domain/
  106. fi
  107. if [ -e "$WEBTPL/skel/cgi-bin/" ]; then
  108. cp -r $WEBTPL/skel/cgi-bin/ $HOMEDIR/$user/web/$domain/
  109. fi
  110. # Changing tpl values
  111. for file in $(find "$HOMEDIR/$user/web/$domain/" -type f); do
  112. sed -i "s/%domain%/$domain/g" $file
  113. done
  114. # Changing file owner
  115. chown -R $user:$user $HOMEDIR/$user/web/$domain
  116. chown root:$user /var/log/$WEB_SYSTEM/domains/$domain.*
  117. chown root:$user $conf
  118. # Changing file permissions
  119. chmod 640 $conf
  120. chmod 551 $HOMEDIR/$user/web/$domain
  121. chmod 751 $HOMEDIR/$user/web/$domain/private
  122. chmod 751 $HOMEDIR/$user/web/$domain/cgi-bin
  123. chmod 751 $HOMEDIR/$user/web/$domain/public_html
  124. chmod 751 $HOMEDIR/$user/web/$domain/public_shtml
  125. chmod 751 $HOMEDIR/$user/web/$domain/document_errors
  126. chmod -f -R 665 $HOMEDIR/$user/web/$domain/cgi-bin/*
  127. chmod -f -R 665 $HOMEDIR/$user/web/$domain/public_html/*
  128. chmod -f -R 665 $HOMEDIR/$user/web/$domain/document_errors/*
  129. chmod 551 $HOMEDIR/$user/web/$domain/stats
  130. chmod 551 $HOMEDIR/$user/web/$domain/logs
  131. chmod 640 /var/log/$WEB_SYSTEM/domains/$domain.*
  132. # Running template trigger
  133. if [ -x $WEBTPL/$WEB_SYSTEM/$WEB_BACKEND/$template.sh ]; then
  134. $WEBTPL/$WEB_SYSTEM/$WEB_BACKEND/$template.sh \
  135. $user $domain $ip $HOMEDIR $docroot
  136. fi
  137. # Checking web config include
  138. web_include="/etc/$WEB_SYSTEM/conf.d/vesta.conf"
  139. if [ -z "$web_include" ] && [ "$WEB_SYSTEM" != 'nginx' ]; then
  140. echo "Include $conf" >> $web_conf
  141. fi
  142. if [ -z "$web_include" ] && [ "$WEB_SYSTEM" = 'nginx' ]; then
  143. echo "include $conf;" >> $web_conf
  144. fi
  145. #----------------------------------------------------------#
  146. # Vesta #
  147. #----------------------------------------------------------#
  148. # Increasing counters
  149. increase_ip_value "$ip"
  150. increase_user_value "$user" '$U_WEB_DOMAINS'
  151. increase_user_value "$user" '$U_WEB_ALIASES'
  152. # Defining domain variables
  153. BACKEND_TPL=$(grep BACKEND_TEMPLATE $USER_DATA/user.conf |cut -f 2 -d \')
  154. str="DOMAIN='$domain' IP='$IP' IP6='' ALIAS='$aliases' TPL='$template'"
  155. str="$str SSL='no' SSL_HOME='same' FTP_USER='' FTP_MD5=''"
  156. str="$str BACKEND='$BACKEND_TPL' PROXY='' PROXY_EXT='' STATS='' STATS_USER=''"
  157. str="$str STATS_CRYPT='' U_DISK='0' U_BANDWIDTH='0' SUSPENDED='no'"
  158. str="$str TIME='$TIME' DATE='$DATE'"
  159. # Registering domain
  160. echo "$str" >> $USER_DATA/web.conf
  161. chmod 660 $USER_DATA/web.conf
  162. # Restart web server
  163. if [ "$restart" != 'no' ]; then
  164. $BIN/v-restart-web
  165. if [ $? -ne 0 ]; then
  166. exit $E_RESTART
  167. fi
  168. fi
  169. # Logging
  170. log_history "added web domain $domain"
  171. log_event "$OK" "$EVENT"
  172. exit