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
Last revision Both sides next revision
create_site [2009/12/04 15:19]
kyxap
create_site [2015/02/26 10:30]
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"​ ]]; then 
 +        echo "​Domain $domain already exists in /​etc/​apache2/​sites-available/​$domain"​ 
 +        exit 1 
 +    else 
 +        cp $TMPCONFDIR/​apache.$domain /​etc/​apache2/​sites-available/​$domain 
 +        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.txt · Last modified: 2015/09/24 18:46 by kyxap