User Tools

Site Tools


create_site

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
create_site [2013/04/22 16:20]
kyxap
create_site [2015/09/24 18:46] (current)
kyxap
Line 1: Line 1:
-=== Добавление вхоста в apache+nginx === +{{tag>​debian squeeze ubuntu bash vhost user logrotate apache nginx}}====== Добавление вхоста в apache+nginx ​====== 
-Овнер должен быть предварительно создан.+ 
 +FIXME 
 +Переписать этот ужас. 
 + 
 +Только Debian. 
 +Пользователь, которому принадлежат сайты, ​должен быть предварительно создан.
  
 <​code=bash>​ <​code=bash>​
Line 46: Line 51:
     LOGSDIR="​$DOMAIN_DIR/​logs"​     LOGSDIR="​$DOMAIN_DIR/​logs"​
     TMPCONFDIR="/​opt/​scripts/​www_configs"​     TMPCONFDIR="/​opt/​scripts/​www_configs"​
 +
 +    # can be set as IP='​111.111.111.111'​
 +    IP=`ip route get 8.8.8.8 | head -1 | awk '​{print $NF}'`
  
     if [[ ! -d $TMPCONFDIR ]]; then     if [[ ! -d $TMPCONFDIR ]]; then
Line 58: Line 66:
     if [[ ! -d $DOCROOT ]]; then     if [[ ! -d $DOCROOT ]]; then
         mkdir -p $DOCROOT         mkdir -p $DOCROOT
 +        chown -R $user:$user $DOCROOT
     fi     fi
  
-    chown $user:$user $DOCROOT + if [[ ! -d $LOGSDIR ]]; then 
- + mkdir -p $LOGSDIR 
-    ​if [[ ! -d $LOGSDIR ]]; then + fi
-        mkdir -p $LOGSDIR +
-    fi+
 } }
  
Line 71: Line 78:
     if [[ $logs ]]; then     if [[ $logs ]]; then
         local log_block="​LogLevel warn         local log_block="​LogLevel warn
-    ErrorLog $LOGSDIR/error_log +    ErrorLog $LOGSDIR/apache_error_log 
-    CustomLog $LOGSDIR/access_log ​combined"​+    CustomLog $LOGSDIR/apache_access_log ​combined"​
     fi     fi
  
Line 78: Line 85:
  
         cat > $TMPCONFDIR/​apache.$domain << EOF         cat > $TMPCONFDIR/​apache.$domain << EOF
-<​VirtualHost ​*:82>+<​VirtualHost ​127.0.0.1:82>
     <​IfModule mpm_itk_module>​     <​IfModule mpm_itk_module>​
         AssignUserId $user $user         AssignUserId $user $user
Line 110: Line 117:
     $log_block     $log_block
 </​VirtualHost>​ </​VirtualHost>​
-        ​+
 EOF EOF
     fi     fi
Line 118: Line 125:
 { {
     if [[ $logs ]]; then     if [[ $logs ]]; then
-        local log_block="​access_log $LOGSDIR/access_log+        local log_block="​access_log $LOGSDIR/nginx_access_log
-      error_log $LOGSDIR/error_log;"+      error_log $LOGSDIR/nginx_error_log;"
     fi     fi
  
Line 154: Line 161:
 EOF EOF
     fi     fi
 +}
 +
 +function generate_named_vhost
 +{
 + serial=`/​bin/​date +"​%Y%m%d%k"​`
 +
 + cat >​$TMPCONFDIR/​named.$domain<<​ EOF
 +\$TTL 10800
 +@ IN SOA ns1.$domain. root.$domain. (
 +    $serial ​    ; serial
 +    10800       ; refresh
 +    3600        ; retry
 +    604800 ​     ; expire
 +    3600 )      ; minimum
 +; NS
 +    IN  NS  ns1.$domain.
 +    IN  NS  ns2.$domain.
 +; MX
 +    IN  MX  10  mx1.$domain.
 +; records
 +ns1         ​IN ​ A   $IP
 +ns2         ​IN ​ A   $IP
 +mx1         ​IN ​ A   $IP
 +www         ​IN ​ A   $IP
 +$domain. ​   IN  A   $IP
 +
 +EOF
 } }
  
 function enable_apache_vhost function enable_apache_vhost
 { {
-    if [[ -f "/​etc/​apache2/​sites-available/​$domain"​ ]]; then +    if [[ -f "/​etc/​apache2/​sites-available/​${domain}.conf" ]]; then 
-        echo "​Domain $domain already exists in /​etc/​apache2/​sites-available/​$domain"​+        echo "​Domain $domain already exists in /​etc/​apache2/​sites-available/​${domain}.conf"
         exit 1         exit 1
     else     else
-        cp $TMPCONFDIR/​apache.$domain /​etc/​apache2/​sites-available/​$domain+        cp $TMPCONFDIR/​apache.$domain /​etc/​apache2/​sites-available/​${domain}.conf
         a2ensite $domain         a2ensite $domain
         if [[ -z `apache2ctl configtest` ]]; then         if [[ -z `apache2ctl configtest` ]]; then
Line 193: Line 227:
     fi     fi
 } }
 +
 +function enable_named_vhost
 +{
 + [[ -d "/​etc/​bind/​zones"​ ]] || mkdir -p "/​etc/​bind/​zones"​
 +
 + if [[ -f "/​etc/​bind/​zones/​$domain.conf"​ ]]; then
 + echo "Zone $domain already exists in /​etc/​bind/​zones/​$domain.conf"​
 + exit 1
 +  else
 + cp $TMPCONFDIR/​named.$domain /​etc/​bind/​zones/​$domain.conf
 +
 + cat >>/​etc/​bind/​named.conf.local<<​ EOF
 +zone "​$domain"​ {
 +    type master;
 +    file "/​etc/​bind/​zones/​$domain.conf";​
 +};
 +
 +EOF
 +
 + if [[ -z `/​usr/​sbin/​named-checkconf` && -z `/​usr/​sbin/​named-checkzone -q $domain /​etc/​bind/​zones/​$domain.conf` ]] ; then
 + /​usr/​sbin/​rndc reload
 + echo "​bind9:​ $domain enabled"​
 + else
 + echo "​Errors detected, please solve it manually!"​
 + exit 1
 + fi
 + fi
 +}
 +
 +function enable_logrotate
 +{
 +    if [[ ! -d "/​etc/​logrotate.d/​vhosts"​ ]]; then
 +        mkdir -p /​etc/​logrotate.d/​vhosts
 +    fi
 +
 +        cat > $TMPCONFDIR/​logrotate.$domain << EOF
 +$LOGSDIR/​*_log {
 +    daily
 +    missingok
 +    rotate 52
 +    compress
 +    delaycompress
 +    notifempty
 +    create 0644 root root
 +    sharedscripts
 +    prerotate
 +        if [ -d /​etc/​logrotate.d/​httpd-prerotate ]; then \\
 +            run-parts /​etc/​logrotate.d/​httpd-prerotate;​ \\
 +        fi; \\
 +    endscript
 +    postrotate
 +        /​etc/​init.d/​apache2 reload > /dev/null
 +        [ ! -f /​var/​run/​nginx.pid ] || kill -USR1 `cat /​var/​run/​nginx.pid`
 +    endscript
 +}
 +EOF
 +
 +    if [[ $logs ]]; then
 +        # install logrotate
 +        if [[ -f "/​etc/​logrotate.d/​vhosts/​$domain"​ ]]; then
 +            echo "​Domain $domain already exists in /​etc/​logrotate.d/​vhosts/​$domain"​
 +            exit 1
 +        else
 +            cp $TMPCONFDIR/​logrotate.$domain /​etc/​logrotate.d/​vhosts/​$domain
 +        fi
 +    fi
 +}
 +
  
 read_domain read_domain
Line 199: Line 301:
  
 init_vars init_vars
 +
 generate_apache_vhost generate_apache_vhost
 generate_nginx_vhost generate_nginx_vhost
 +generate_named_vhost
  
 enable_apache_vhost enable_apache_vhost
 enable_nginx_vhost enable_nginx_vhost
 +enable_named_vhost
 +
 +enable_logrotate
 +
 </​code>​ </​code>​
  
-=== Простейший скрипт для добавления виртхоста и днс-записи на сервер с Debian, если отсутствует панель управления. + 
-Необходимо предварительно создать пользователя //http//+=== Простейший скрипт для добавления виртхоста и днс-записи на сервер с Debian, если отсутствует панель управления. ​(2009 год, возможно устарело) === 
- ===+Необходимо предварительно создать пользователя //http//
  
 <​code=bash>​ <​code=bash>​
create_site.1366647658.txt.gz · Last modified: 2013/04/22 16:20 by kyxap