v_add_web_domain 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. #!/bin/bash
  2. # info: adding web domain
  3. #----------------------------------------------------------#
  4. # Variable&Function #
  5. #----------------------------------------------------------#
  6. # Argument defenition
  7. user=$1
  8. domain=$(idn -t --quiet -u "$2" )
  9. domain_idn=$(idn -t --quiet -a "$domain")
  10. ip=$3
  11. template=${4-default}
  12. # Importing variables
  13. source $VESTA/conf/vars.conf
  14. source $V_CONF/vesta.conf
  15. source $V_FUNC/shared.func
  16. source $V_FUNC/domain.func
  17. source $V_FUNC/ip.func
  18. #----------------------------------------------------------#
  19. # Verifications #
  20. #----------------------------------------------------------#
  21. # Checking arg number
  22. check_args '3' "$#" 'user domain ip [template]'
  23. # Checking argument format
  24. format_validation 'user' 'domain' 'ip' 'template'
  25. # Checking web system is enabled
  26. is_system_enabled 'web'
  27. # Checking user
  28. is_user_valid
  29. # Checking user is active
  30. is_user_suspended
  31. # Checking domain
  32. is_domain_new 'quiet'
  33. if [ $? -ne $OK ]; then
  34. # Checking domain owner
  35. is_domain_owner
  36. # Checking domain service
  37. is_web_domain_free
  38. fi
  39. # Checking ip
  40. is_ip_avalable
  41. # Checking package
  42. is_package_full 'web_domain'
  43. # Checking template
  44. templates=$(get_user_value '$WEB_TPL')
  45. is_template_valid "web"
  46. #----------------------------------------------------------#
  47. # Action #
  48. #----------------------------------------------------------#
  49. # Defining domain aliases
  50. IP=$ip
  51. ip_name=$(get_ip_name)
  52. ip_name_idn=$(idn -t --quiet -a "$ip_name")
  53. domain_alias="www.$domain"
  54. domain_alias_idn="www.$domain_idn"
  55. if [ ! -z "$ip_name" ]; then
  56. domain_alias_dash="${domain//./-}.$ip_name"
  57. domain_alias_dash_idn="${domain_idn//./-}.$ip_name_idn"
  58. aliases="$domain_alias,$domain_alias_dash"
  59. aliases_idn="$domain_alias_idn,$domain_alias_dash_idn"
  60. alias_string="ServerAlias $domain_alias_idn $domain_alias_dash_idn"
  61. else
  62. aliases="$domain_alias"
  63. aliases_idn="$domain_alias_idn"
  64. alias_string="ServerAlias $domain_alias_idn"
  65. fi
  66. # Defining vars for add_config function
  67. group="$user"
  68. email="$user@$domain"
  69. docroot="$V_HOME/$user/web/$domain/public_html"
  70. docroot_string="DocumentRoot $docroot"
  71. conf="$V_HOME/$user/conf/httpd.conf"
  72. tpl_file="$V_WEBTPL/apache_$template.tpl"
  73. # Parsing template keys
  74. template_data=$(cat $V_WEBTPL/apache_$template.descr|grep -v '#')
  75. for keys in $template_data; do
  76. eval ${keys%%=*}=${keys#*=}
  77. done
  78. # Checking error log status
  79. if [ "$ELOG" = 'no' ]; then
  80. elog='#'
  81. else
  82. elog=''
  83. fi
  84. # Checking cgi
  85. if [ "$CGI" != 'yes' ]; then
  86. cgi='#'
  87. cgi_option='-ExecCGI'
  88. else
  89. cgi=''
  90. cgi_option='+ExecCGI'
  91. fi
  92. # Adding domain to the httpd.conf
  93. add_web_config
  94. # Building directory tree
  95. mkdir $V_HOME/$user/web/$domain \
  96. $V_HOME/$user/web/$domain/public_html \
  97. $V_HOME/$user/web/$domain/public_shtml \
  98. $V_HOME/$user/web/$domain/document_errors \
  99. $V_HOME/$user/web/$domain/cgi-bin \
  100. $V_HOME/$user/web/$domain/private \
  101. $V_HOME/$user/web/$domain/stats \
  102. $V_HOME/$user/web/$domain/logs
  103. # Adding domain logs
  104. touch /var/log/httpd/domains/$domain.bytes \
  105. /var/log/httpd/domains/$domain.log \
  106. /var/log/httpd/domains/$domain.error.log
  107. # Adding symlink for logs
  108. ln -s /var/log/httpd/domains/$domain.*log $V_HOME/$user/web/$domain/logs/
  109. # Adding domain skeleton
  110. if [ -e "$V_WEBTPL/skel/public_html/" ]; then
  111. cp -r $V_WEBTPL/skel/public_html/ $V_HOME/$user/web/$domain/
  112. fi
  113. if [ -e "$V_WEBTPL/skel/public_shtml/" ]; then
  114. cp -r $V_WEBTPL/skel/public_shtml/ $V_HOME/$user/web/$domain/
  115. fi
  116. if [ -e "$V_WEBTPL/skel/document_errors/" ]; then
  117. cp -r $V_WEBTPL/skel/document_errors/ $V_HOME/$user/web/$domain/
  118. fi
  119. if [ -e "$V_WEBTPL/skel/cgi-bin/" ]; then
  120. cp -r $V_WEBTPL/skel/cgi-bin/ $V_HOME/$user/web/$domain/
  121. fi
  122. # Changing tpl values
  123. for file in $(find "$V_HOME/$user/web/$domain/" -type f); do
  124. sed -i "s/%domain%/$domain/g" $file
  125. done
  126. # Changing file owner
  127. chown -R $user:$user $V_HOME/$user/web/$domain
  128. chown root:$user /var/log/httpd/domains/$domain.*
  129. # Changing file permissions
  130. chmod 551 $V_HOME/$user/web/$domain
  131. chmod 751 $V_HOME/$user/web/$domain/private
  132. chmod 751 $V_HOME/$user/web/$domain/cgi-bin
  133. chmod 751 $V_HOME/$user/web/$domain/public_html
  134. chmod 751 $V_HOME/$user/web/$domain/public_shtml
  135. chmod 751 $V_HOME/$user/web/$domain/document_errors
  136. chmod -f -R 775 $V_HOME/$user/web/$domain/cgi-bin/*
  137. chmod -f -R 775 $V_HOME/$user/web/$domain/public_html/*
  138. chmod -f -R 775 $V_HOME/$user/web/$domain/document_errors/*
  139. chmod 551 $V_HOME/$user/web/$domain/stats
  140. chmod 551 $V_HOME/$user/web/$domain/logs
  141. chmod 640 /var/log/httpd/domains/$domain.*
  142. # Running template trigger
  143. if [ -x $V_WEBTPL/apache_$template.sh ]; then
  144. $V_WEBTPL/apache_$template.sh $user $domain $ip $V_HOME $docroot
  145. fi
  146. # Checking main vesta httpd config
  147. main_conf='/etc/httpd/conf.d/vesta.conf'
  148. main_conf_check=$(grep "$conf" $main_conf )
  149. if [ -z "$main_conf_check" ]; then
  150. echo "Include $conf" >>$main_conf
  151. fi
  152. #----------------------------------------------------------#
  153. # Vesta #
  154. #----------------------------------------------------------#
  155. # Increasing ip value
  156. increase_ip_value "$ip"
  157. # Increasing domain value
  158. increase_user_value "$user" '$U_WEB_DOMAINS'
  159. # Defining domain variables
  160. v_str="DOMAIN='$domain'"
  161. v_str="$v_str IP='$ip' IP6=''"
  162. v_str="$v_str U_DISK='0'"
  163. v_str="$v_str U_BANDWIDTH='0'"
  164. v_str="$v_str TPL='$template'"
  165. v_str="$v_str ALIAS='$aliases'"
  166. v_str="$v_str $template_data" # Inserting PHP, CGI and ELOG keys
  167. v_str="$v_str STATS='' STATS_AUTH=''"
  168. v_str="$v_str SSL='no' SSL_HOME='single'"
  169. v_str="$v_str NGINX='' NGINX_EXT='' SUSPEND='no' DATE='$V_DATE'"
  170. # Registering domain
  171. echo "$v_str" >>$V_USERS/$user/web.conf
  172. # Adding task to the vesta pipe
  173. restart_schedule 'web'
  174. # Logging
  175. log_history "$V_EVENT" "v_del_web_domain $user $domain"
  176. log_event 'system' "$V_EVENT"
  177. exit