Перенос большого кол-ва сайтов на новый сервер занимает много времени? Ничего подобного. Скрипт представленный ниже сделает все за вас!
Возможности:
1. Создание 2-х конфигурационных файлов для apache2 и nginx;
2. Создание необходимых каталогов для сайта;
3. Выставление необходимых прав доступа к папкам домена;
4. Создание символических ссылок для включения домена на обоих серверах;
5. Reload обоих серверов.
Синтаксис:
a2addhv [domain] [domain-ip] [user]
Установка:
1. Создайте необходимые пути:
root@srv:~# mkdir /usr/share/apache2/templates root@srv:~# mkdir -p /usr/share/nginx/templates
2. Скопируйте шаблоны:
root@srv:~# cp apache2-template.conf /usr/share/apache2/templates root@srv:~# cp nginx-template.conf /usr/share/nginx/templates
3. Скопируйте исполняемый файл в /usr/local/bin:
root@srv:~# cp a2addvh /usr/local/bin
4. Теперь выполните настройку внутри скрипта:
# E-mail администратора: admin_email="webmaster@domain.ru" # Кодировка: codepage="windows-1251" # Путь до шаблонов apache apache2_templ_path="/usr/share/apache2/templates" # Путь до шаблонов nginx nginx_templ_path="/usr/share/nginx/templates" # Путь до конфигов apache apache2_conf_path="/etc/apache2" # Путь до конфигов nginx nginx_conf_path="/etc/nginx"
Скрипт:
#!/bin/bash
# Settings:
admin_email="webmaster@domain.ru"
codepage="windows-1251"
apache2_templ_path="/usr/share/apache2/templates"
nginx_templ_path="/usr/share/nginx/templates"
apache2_conf_path="/etc/apache2"
nginx_conf_path="/etc/nginx"
domain=$1
domain_ip=$2
user=$3
case "$@" in
"")
echo "Syntax: a2addvh [domain] [domain ip] [user]"
echo ""
;;
*)
clear
echo "Adding new VHost: $domain"
echo
echo "Creating a directory tree:"
mkdir -p /home/$user/www/$domain
echo "/home/$user/www/$domain"
echo
echo "Creating index.php file (for testing)."
echo "< ?php phpinfo(); ?>" > /home/$user/www/$domain/index.php
echo
echo "Changing the owner for /home/$user/www/"
chown -R $user:$group /home/$user/www/
echo
echo "Creating vhost file on apache2 ($apache2_conf_path/sites-available/$domain)"
sed -e "s|@@DOMAIN@@|${domain}|g;s|@@USER@@|${user}|g;s|@@ADMIN_EMAIL@@|${admin_email}|g;s|@@CODEPAGE@@|${codepage}|g" $apache2_templ_path/apache2-template.conf > $apache2_conf_path/sites-available/$domain
echo "Creating vhost file on nginx ($nginx_conf_path/sites-available/$domain)"
sed -e "s|@@DOMAIN@@|${domain}|g;s|@@DOMAIN_IP@@|${domain_ip}|g;s|@@USER@@|${user}|g;" $nginx_templ_path/nginx-template.conf > $nginx_conf_path/sites-available/$domain
echo
echo "Enable vhost:"
echo "Enable on Apache2..."
ln -s $apache2_conf_path/sites-available/$domain $apache2_conf_path/sites-enabled/$domain
echo "Enable on nginx..."
ln -s $nginx_conf_path/sites-available/$domain $nginx_conf_path/sites-enabled/$domain
echo
echo "Reloading servers:"
/etc/init.d/apache2 reload
/etc/init.d/nginx reload
echo
echo "All done!"
;;
esac
Шаблоны:
Для apache2:
<VirtualHost *:8080> ServerName @@DOMAIN@@ ServerAdmin @@ADMIN_EMAIL@@ ServerAlias www.@@DOMAIN@@ DocumentRoot /home/@@USER@@/www/@@DOMAIN@@ SuexecUserGroup @@USER@@ @@USER@@ <Directory /home/@@USER@@/www/@@DOMAIN@@> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> CustomLog /var/log/apache2/@@DOMAIN@@.access.log combined ErrorLog /var/log/apache2/@@DOMAIN@@.error.log AddDefaultCharset @@CODEPAGE@@ </VirtualHost>
Для nginx:
server { listen @@DOMAIN_IP@@:80; server_name @@DOMAIN@@ www.@@DOMAIN@@; location / { proxy_pass http://127.0.0.1:8080; 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; } location ~* ^.+\.(jpg|jpeg|gif|png|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|tgz|gz|rar|doc|xls|txt|bmp|tcl)$ { root /home/@@USER@@/www/@@DOMAIN@@; access_log /var/log/nginx/@@DOMAIN@@.access; } }
Данные шаблоны не идеальны и они даны лишь для примера, советую настроить их под себя!