Работа вебмастера вынуждает довольно часто создавать новые сайты, а значит выполнять кучу рутинных операций по управленияю локальной 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 переменных
- t - имя эталонного виртуального хоста на основе которого будет создан новый (без зоны), должно совпадать с DNS записью и именем конфига
- z - имя DNS зоны
- ip - IP адрес сервара к которому будет привязываться новый виртуальный хост
Скрипт не особо умный, он лишь проверяет зону на повторное создание виртуального домена и недопускает этого, а в случае неправильного формирования виртуального домена удаляет созданный конфиг apache и пустые директории сайта
Скрипт будет работать на Debian подобных дистрибутивах так как привязан к конфигам в его файловой системе
Комментариев 1
Николай Сухих
2016-10-12
«Wellcom» — торговый знак компании «Tele2 Россия» (после рестуктуризации «Ростелекома»; до этого - бренд «Сибирьтелекома») (С) Wiki
Спасибо за пост.