v_add_web_domain 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. #!/bin/bash
  2. # info: add web domain
  3. # options: user domain ip [template] [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 | tr '[:upper:]' '[:lower:]')
  18. domain_idn=$(idn -t --quiet -a "$domain")
  19. ip=$3
  20. template=${4-default}
  21. restart=$5
  22. # Includes
  23. source $VESTA/conf/vesta.conf
  24. source $VESTA/func/main.sh
  25. source $VESTA/func/domain.sh
  26. source $VESTA/func/ip.sh
  27. #----------------------------------------------------------#
  28. # Verifications #
  29. #----------------------------------------------------------#
  30. check_args '3' "$#" 'user domain ip [template] [restart]'
  31. validate_format 'user' 'domain' 'ip' 'template'
  32. is_system_enabled "$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. is_apache_template_valid
  40. #----------------------------------------------------------#
  41. # Action #
  42. #----------------------------------------------------------#
  43. # Defining domain aliases
  44. IP=$ip
  45. ip_name=$(get_ip_name)
  46. ip_name_idn=$(idn -t --quiet -a "$ip_name")
  47. domain_alias="www.$domain"
  48. domain_alias_idn="www.$domain_idn"
  49. if [ ! -z "$ip_name" ]; then
  50. domain_alias_dash="${domain//./-}.$ip_name"
  51. domain_alias_dash_idn="${domain_idn//./-}.$ip_name_idn"
  52. aliases="$domain_alias,$domain_alias_dash"
  53. aliases_idn="$domain_alias_idn,$domain_alias_dash_idn"
  54. alias_string="ServerAlias $domain_alias_idn $domain_alias_dash_idn"
  55. else
  56. aliases="$domain_alias"
  57. aliases_idn="$domain_alias_idn"
  58. alias_string="ServerAlias $domain_alias_idn"
  59. fi
  60. # Defining vars for add_config function
  61. group="$user"
  62. email="$user@$domain"
  63. docroot="$HOMEDIR/$user/web/$domain/public_html"
  64. docroot_string="DocumentRoot $docroot"
  65. conf="$HOMEDIR/$user/conf/web/httpd.conf"
  66. tpl_file="$WEBTPL/apache_$template.tpl"
  67. # Parsing template keys
  68. template_data=$(cat $WEBTPL/apache_$template.descr|grep -v '#')
  69. for keys in $template_data; do
  70. eval ${keys%%=*}=${keys#*=}
  71. done
  72. # Checking error log status
  73. if [ "$ELOG" = 'no' ]; then
  74. elog='#'
  75. else
  76. elog=''
  77. fi
  78. # Checking cgi
  79. if [ "$CGI" != 'yes' ]; then
  80. cgi='#'
  81. cgi_option='-ExecCGI'
  82. else
  83. cgi=''
  84. cgi_option='+ExecCGI'
  85. fi
  86. # Adding domain to the httpd.conf
  87. add_web_config
  88. # Building directory tree
  89. mkdir $HOMEDIR/$user/web/$domain \
  90. $HOMEDIR/$user/web/$domain/public_html \
  91. $HOMEDIR/$user/web/$domain/public_shtml \
  92. $HOMEDIR/$user/web/$domain/document_errors \
  93. $HOMEDIR/$user/web/$domain/cgi-bin \
  94. $HOMEDIR/$user/web/$domain/private \
  95. $HOMEDIR/$user/web/$domain/stats \
  96. $HOMEDIR/$user/web/$domain/logs
  97. # Adding domain logs
  98. touch /var/log/httpd/domains/$domain.bytes \
  99. /var/log/httpd/domains/$domain.log \
  100. /var/log/httpd/domains/$domain.error.log
  101. # Adding symlink for logs
  102. ln -s /var/log/httpd/domains/$domain.*log $HOMEDIR/$user/web/$domain/logs/
  103. # Adding domain skeleton
  104. if [ -e "$WEBTPL/skel/public_html/" ]; then
  105. cp -r $WEBTPL/skel/public_html/ $HOMEDIR/$user/web/$domain/
  106. fi
  107. if [ -e "$WEBTPL/skel/public_shtml/" ]; then
  108. cp -r $WEBTPL/skel/public_shtml/ $HOMEDIR/$user/web/$domain/
  109. fi
  110. if [ -e "$WEBTPL/skel/document_errors/" ]; then
  111. cp -r $WEBTPL/skel/document_errors/ $HOMEDIR/$user/web/$domain/
  112. fi
  113. if [ -e "$WEBTPL/skel/cgi-bin/" ]; then
  114. cp -r $WEBTPL/skel/cgi-bin/ $HOMEDIR/$user/web/$domain/
  115. fi
  116. # Changing tpl values
  117. for file in $(find "$HOMEDIR/$user/web/$domain/" -type f); do
  118. sed -i "s/%domain%/$domain/g" $file
  119. done
  120. # Changing file owner
  121. chown -R $user:$user $HOMEDIR/$user/web/$domain
  122. chown root:$user /var/log/httpd/domains/$domain.*
  123. chown root:apache $conf
  124. # Changing file permissions
  125. chmod 660 $conf
  126. chmod 551 $HOMEDIR/$user/web/$domain
  127. chmod 751 $HOMEDIR/$user/web/$domain/private
  128. chmod 751 $HOMEDIR/$user/web/$domain/cgi-bin
  129. chmod 751 $HOMEDIR/$user/web/$domain/public_html
  130. chmod 751 $HOMEDIR/$user/web/$domain/public_shtml
  131. chmod 751 $HOMEDIR/$user/web/$domain/document_errors
  132. chmod -f -R 775 $HOMEDIR/$user/web/$domain/cgi-bin/*
  133. chmod -f -R 775 $HOMEDIR/$user/web/$domain/public_html/*
  134. chmod -f -R 775 $HOMEDIR/$user/web/$domain/document_errors/*
  135. chmod 551 $HOMEDIR/$user/web/$domain/stats
  136. chmod 551 $HOMEDIR/$user/web/$domain/logs
  137. chmod 640 /var/log/httpd/domains/$domain.*
  138. # Running template trigger
  139. if [ -x $WEBTPL/apache_$template.sh ]; then
  140. $WEBTPL/apache_$template.sh $user $domain $ip $HOMEDIR $docroot
  141. fi
  142. # Checking main vesta httpd config
  143. main_conf='/etc/httpd/conf.d/vesta.conf'
  144. main_conf_check=$(grep "$conf" $main_conf )
  145. if [ -z "$main_conf_check" ]; then
  146. echo "Include $conf" >>$main_conf
  147. fi
  148. #----------------------------------------------------------#
  149. # Vesta #
  150. #----------------------------------------------------------#
  151. # Increasing counters
  152. increase_ip_value "$ip"
  153. increase_user_value "$user" '$U_WEB_DOMAINS'
  154. increase_user_value "$user" '$U_WEB_ALIASES'
  155. # Defining domain variables
  156. str="DOMAIN='$domain' IP='$ip' IP6='' ALIAS='$aliases' TPL='$template'"
  157. str="$str $template_data SSL='no' SSL_HOME='single' NGINX='' NGINX_EXT=''"
  158. str="$str STATS='' STATS_USER='' STATS_CRYPT='' U_DISK='0' U_BANDWIDTH='0'"
  159. str="$str SUSPENDED='no' TIME='$TIME' DATE='$DATE'"
  160. # Registering domain
  161. echo "$str" >> $USER_DATA/web.conf
  162. chmod 660 $USER_DATA/web.conf
  163. # Restart web server
  164. if [ "$restart" != 'no' ]; then
  165. $BIN/v_restart_web "$EVENT"
  166. fi
  167. # Logging
  168. log_history "$EVENT"
  169. log_event "$OK" "$EVENT"
  170. exit