This shows you the differences between two versions of the page.
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> | ||
Line 7: | Line 323: | ||
echo -n "Введите имя сайта: " | echo -n "Введите имя сайта: " | ||
read domain | read domain | ||
- | |||
- | #domain=$1 | ||
# СОЗДАНИЕ ДИРЕКТОРИИ | # СОЗДАНИЕ ДИРЕКТОРИИ |