Перенос большого кол-ва сайтов на новый сервер занимает много времени? Ничего подобного. Скрипт представленный ниже сделает все за вас!
Возможности:
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; } }
Подтверждаю: данные шаблоны не идеальны и они даны лишь для примера, советую настроить их под себя!
Автор статьи lumian