User Tools

Site Tools


Sidebar


Tags Cloud
create_site

This is an old revision of the document!


Добавление вхоста в apache+nginx

Овнер должен быть предварительно создан.

#!/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"

    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
    fi

    chown $user:$user $DOCROOT

    if [[ ! -d $LOGSDIR ]]; then
        mkdir -p $LOGSDIR
    fi
}

function generate_apache_vhost
{
    if [[ $logs ]]; then
        local log_block="LogLevel warn
    ErrorLog $LOGSDIR/error_log
    CustomLog $LOGSDIR/access_log combined"
    fi

    if [[ $domain ]] && [[ $user ]]; then

        cat > $TMPCONFDIR/apache.$domain << EOF
<VirtualHost *: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/access_log;
      error_log $LOGSDIR/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 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
}

read_domain
read_user
read_logs

init_vars
generate_apache_vhost
generate_nginx_vhost

enable_apache_vhost
enable_nginx_vhost

=== Простейший скрипт для добавления виртхоста и днс-записи на сервер с Debian, если отсутствует панель управления. Необходимо предварительно создать пользователя http. ===

#!/bin/bash

echo -n "Введите имя сайта: "
read domain

# СОЗДАНИЕ ДИРЕКТОРИИ
mkdir -p /home/http/domains/$domain/html/cgi-bin
chown -R http:http /home/http/domains/$domain/html

# СОЗДАНИЕ КОНФИГА ВИРТХОСТА ДЛЯ АПАЧА
cat >/etc/apache2/sites-available/$domain << EOF
<VirtualHost *:80>
    ServerName $domain
    ServerAlias www.$domain
    DocumentRoot /home/http/domains/$domain/html
    ErrorLog /dev/null

    ScriptAlias /cgi-bin/ "/home/http/domains/$domain/html/cgi-bin/"

    <Directory "/cgi-bin/">
        AllowOverride None
        Options None +FollowSymLinks ExecCGI
        DirectoryIndex index.pl
    </Directory>

    <Directory />
        Options All -Indexes
        AllowOverride All
    </Directory>
</VirtualHost>
EOF

# ВКЛЮЧЕНИЕ ВИРТХОСТА
/usr/sbin/a2ensite $domain
/etc/init.d/apache2 reload

# СОЗДАНИЕ ФАЙЛА ДНС-ЗОНЫ
serial=`/bin/date +"%Y%m%d%k"`
cat >/etc/bind/zones/$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   95.169.190.217
ns2         IN  A   95.169.191.217
www         IN  A   95.169.191.217
$domain.    IN  A   95.169.191.217
EOF

# СОЗДАНИЕ ЗАПИСИ О ДНС-ЗОНЕ
cat >>/etc/bind/named.conf.local<< EOF
zone "$domain" {
    type master;
    file "/etc/bind/zones/$domain";
};
EOF

# ВКЛЮЧЕНИЕ ЗОНЫ
/usr/sbin/rndc reload
create_site.1366647658.txt.gz · Last modified: 2013/04/22 16:20 by kyxap