Скрипт автоматического создания виртуальных хостов apache2

Работа вебмастера вынуждает довольно часто создавать новые сайты, а значит выполнять кучу рутинных операций по управленияю локальной DNS зоной и созданию виртуального хоста. Чтобы избавится от подобной рутины и потенциальных ошибок я использую вот такой простой скрипт

Предполагается, что уже имеются настроенные вебсервер apache2 и локальная зона управляемая сервером bind9

#!/bin/bash
# скрипт создаёт инфраструктуру сайта, требуется доменное имя c указанием зоны, зона будет заменена на локальную
# Втр Июл 28 00:41:18 MSD 2009

nd=$@
if [ $nd ]
then echo make new virtual domain $nd
else echo use: $0 new-domain.ru; exit
fi
d=`echo $nd| sed -r 's/\.[a-z]+$//g'`
z="a" # название зоны
ip="192.168.0.78" # IP адрес сервера
t="breys" # название эталонного виртуального хоста

# если DNS имя не существует то создаём его либо пропускаем этот шаг
if host $d > /dev/null ;
then  
    echo skip make dns name
else
    echo "echo \"\n;`date`\" >> /etc/bind/$z.host" | sudo sh
    echo "echo $d        IN  A $ip >> /etc/bind/$z.host" | sudo sh
    echo "echo www.$d        IN  CNAME $d >>  /etc/bind/$z.host" | sudo sh
    sudo /etc/init.d/bind9 restart
fi

# создаём директорию для нового сайт, -p без проверок и вопросов
mkdir -p /home/httpd/$nd/www /home/httpd/$nd/cgi-bin

# создаём виртуальный хост apache на основе конфига рабочего сайта
sudo cp /etc/apache2/sites-available/$t.ru.conf /etc/apache2/sites-available/$nd.conf
sudo sed -i s/$t/$d/g /etc/apache2/sites-available/$nd.conf
sudo ln -s /etc/apache2/sites-available/$nd.conf /etc/apache2/sites-enabled/

sudo apache2ctl restart
if wget -q  --spider $d.$z;
then
    echo Wellcom http://$d.$z
else
    # если новый виртуальный хост по какой либо причине не доступен, удалём его и перезапускаем индейца
    sudo rm /etc/apache2/sites-available/$nd.conf /etc/apache2/sites-enabled/$nd.conf
    rmdir  /home/httpd/$nd/www /home/httpd/$nd/cgi-bin  /home/httpd/$nd
    sudo apache2ctl restart
fi

Я сохранил его в $HOME/bin и для создания нового сайта использую так

make_domen.sh my-django.ru
make new virtual domain my-django.ru
Password:
 * Stopping domain name service... bind [ OK ]
 * Starting domain name service... bind [ OK ]
Wellcom http://my-django.a

Вуаля,  я получаю новую DNS запись, созданную иерархию нового сайта, новый домен в apache и рабочую ссылку на новый сайт

Для адаптации скрипта для другого сервера нужно изменить 3 переменных

  1. t - имя эталонного виртуального хоста на основе которого будет создан новый (без зоны), должно совпадать с DNS записью и именем конфига
  2. z - имя DNS зоны
  3. ip - IP адрес сервара к которому будет привязываться новый виртуальный хост

Скрипт не особо умный, он лишь проверяет зону на повторное создание виртуального домена и недопускает этого, а в случае неправильного формирования виртуального домена удаляет созданный конфиг apache и пустые директории сайта

Скрипт будет работать на Debian подобных дистрибутивах так как привязан к конфигам в его файловой системе

Если ещё не настроен ни один сайт то нужно начать с этого

Комментариев 1
Николай Сухих
Николай Сухих

2016-10-12

«Wellcom» — торговый знак компании «Tele2 Россия» (после рестуктуризации «Ростелекома»; до этого - бренд «Сибирьтелекома») (С) Wiki

Спасибо за пост.

Нужна авторизация с помощью
Об авторе
Илья Илья

меня можно найти тут