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 [2009/12/04 15:19]
kyxap
create_site [2015/09/24 18:46] (current)
kyxap
Line 1: Line 1:
-Простейший скрипт для добавления виртхоста и днс-записи на сервер с Debian, если отсутствует панель управления. +{{tag>​debian squeeze ubuntu bash vhost user logrotate apache nginx}}====== Добавление вхоста в apache+nginx ====== 
-Необходимо предварительно создать пользователя //http//.+ 
 +FIXME 
 +Переписать этот ужас. 
 + 
 +Только Debian. 
 +Пользователь,​ которому принадлежат сайты, должен быть предварительно создан. 
 + 
 +<​code=bash>​ 
 +#​!/​bin/​bash 
 + 
 +function read_domain 
 +
 +    if [[ -z $domain ]]; then 
 +        echo -n "​Provide domain to add: " 
 +        read domain 
 +    fi 
 +
 + 
 +function read_user 
 +
 +    if [[ -z $user ]]; then 
 +        echo -n "​Provide domain'​s owner login: " 
 +        read user 
 +    fi 
 +
 + 
 +function read_logs 
 +
 +    if [[ -z $logs ]]; then 
 +        echo -n "​Enable access/​error logs? [y/N]: " 
 +        read logs 
 +    fi 
 + 
 +    case $logs in 
 +        y*|Y*) 
 +            LOGS=1 
 +        ;; 
 +        *) 
 +            unset $logs 
 +        ;; 
 +    esac 
 +
 + 
 +function init_vars 
 +
 +    #### BASE SETTINGS #### 
 +    CLIENTS_HOME="/​home/​clients"​ 
 +    DOMAIN_DIR="/​home/​clients/​$user/​domains/​$domain"​ 
 +    DOCROOT="​$DOMAIN_DIR/​html"​ 
 +    LOGSDIR="​$DOMAIN_DIR/​logs"​ 
 +    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 
 +        mkdir -p $TMPCONFDIR 
 +    fi 
 + 
 +    if [[ -z `id $user` ]]; then 
 +        echo "You need to create user '​$user'​ first!"​ 
 +        exit 1 
 +    fi 
 + 
 +    if [[ ! -d $DOCROOT ]]; then 
 +        mkdir -p $DOCROOT 
 +        chown -R $user:$user $DOCROOT 
 +    fi 
 + 
 + if [[ ! -d $LOGSDIR ]]; then 
 + mkdir -p $LOGSDIR 
 + fi 
 +
 + 
 +function generate_apache_vhost 
 +
 +    if [[ $logs ]]; then 
 +        local log_block="​LogLevel warn 
 +    ErrorLog $LOGSDIR/​apache_error_log 
 +    CustomLog $LOGSDIR/​apache_access_log combined"​ 
 +    fi 
 + 
 +    if [[ $domain ]] && [[ $user ]]; then 
 + 
 +        cat > $TMPCONFDIR/​apache.$domain << EOF 
 +<​VirtualHost 127.0.0.1:​82>​ 
 +    <​IfModule mpm_itk_module>​ 
 +        AssignUserId $user $user 
 +    </​IfModule>​ 
 + 
 +    ServerName $domain 
 +    ServerAlias www.$domain 
 + 
 +    ServerAdmin $user@$domain 
 +    DocumentRoot $DOCROOT 
 +    <​Directory /> 
 +        Options FollowSymLinks 
 +        AllowOverride None 
 +    </​Directory>​ 
 + 
 +    <​Directory $DOCROOT>​ 
 +        Options -Indexes FollowSymLinks MultiViews 
 +        AllowOverride All 
 +        Order allow,​deny 
 +        allow from all 
 +    </​Directory>​ 
 + 
 +    ScriptAlias /cgi-bin/ $DOCROOT/​cgi-bin/​ 
 +    <​Directory "​$DOCROOT/​cgi-bin/">​ 
 +        AllowOverride None 
 +        Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch 
 +        Order allow,​deny 
 +        Allow from all 
 +    </​Directory>​ 
 + 
 +    $log_block 
 +</​VirtualHost>​ 
 + 
 +EOF 
 +    fi 
 +
 + 
 +function generate_nginx_vhost 
 +
 +    if [[ $logs ]]; then 
 +        local log_block="​access_log $LOGSDIR/​nginx_access_log;​ 
 +      error_log $LOGSDIR/​nginx_error_log;"​ 
 +    fi 
 + 
 +    if [[ $domain ]] && [[ $user ]]; then 
 +        cat > $TMPCONFDIR/​nginx.$domain << EOF 
 +  server { 
 +      listen ​     80; 
 +      server_name $domain www.$domain;​ 
 +      root $DOCROOT; 
 +      location / { 
 +          proxy_pass ​        ​http://​127.0.0.1:​82/;​ 
 +          proxy_redirect ​    ​off;​ 
 +          proxy_set_header ​  ​Host ​            ​\$host;​ 
 +          proxy_set_header ​  ​X-Real-IP ​       \$remote_addr;​ 
 +          proxy_set_header ​  ​X-Forwarded-For ​ \$proxy_add_x_forwarded_for;​ 
 +          proxy_max_temp_file_size ​ 0; 
 +          client_max_body_size ​      ​10m;​ 
 +          client_body_buffer_size ​   128k; 
 +          proxy_connect_timeout ​     90; 
 +          proxy_send_timeout ​        90; 
 +          proxy_read_timeout ​        90; 
 +          proxy_buffer_size ​         4k; 
 +          proxy_buffers ​             4 32k; 
 +          proxy_busy_buffers_size ​   64k; 
 +          proxy_temp_file_write_size 64k; 
 +      } 
 + 
 +      location ~* ^.+.(jpg|gif|png|avi|mpg|zip|exe)$ { 
 +        root $DOCROOT; 
 +      } 
 + 
 +      $log_block 
 +   } 
 +EOF 
 +    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 
 +
 +    if [[ -f "/​etc/​apache2/​sites-available/​${domain}.conf"​ ]]; then 
 +        echo "​Domain $domain already exists in /​etc/​apache2/​sites-available/​${domain}.conf"​ 
 +        exit 1 
 +    else 
 +        cp $TMPCONFDIR/​apache.$domain /​etc/​apache2/​sites-available/​${domain}.conf 
 +        a2ensite $domain 
 +        if [[ -z `apache2ctl configtest` ]]; then 
 +            /​etc/​init.d/​apache2 reload 
 +            echo "​$domain enabled!"​ 
 +        else 
 +            echo "​Errors detected, please solve it manually!"​ 
 +            exit 1 
 +        fi 
 + 
 +    fi 
 +
 + 
 +function enable_nginx_vhost 
 +
 +    if [[ -f "/​etc/​nginx/​sites-available/​$domain"​ ]]; then 
 +        echo "​Domain $domain already exists in /​etc/​nginx/​sites-available/​$domain"​ 
 +        exit 1 
 +    else 
 +        cp $TMPCONFDIR/​nginx.$domain /​etc/​nginx/​sites-available/​$domain 
 +        ln -s /​etc/​nginx/​sites-available/​$domain /​etc/​nginx/​sites-enabled/​$domain 
 +        if [[ -z `nginx -t` ]]; then 
 +            /​etc/​init.d/​nginx reload 
 +            echo "​$domain enabled!"​ 
 +        else 
 +            echo "​Errors detected, please solve it manually!"​ 
 +            exit 1 
 +        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_user 
 +read_logs 
 + 
 +init_vars 
 + 
 +generate_apache_vhost 
 +generate_nginx_vhost 
 +generate_named_vhost 
 + 
 +enable_apache_vhost 
 +enable_nginx_vhost 
 +enable_named_vhost 
 + 
 +enable_logrotate 
 + 
 +</​code>​ 
 + 
 + 
 +=== Простейший скрипт для добавления виртхоста и днс-записи на сервер с Debian, если отсутствует панель управления. ​(2009 год, возможно устарело) === 
 +Необходимо предварительно создать пользователя //http//
  
 <​code=bash>​ <​code=bash>​
create_site.1259939990.txt.gz · Last modified: 2009/12/04 15:19 by kyxap