Скрипт автоматического создания виртуальных хостов 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. Запуска apache в окружении chroot
  2. apache2 настройка virtualhost
  3. apache2 установка ssi(shtml) ubuntu 7.10, 8.04
  4. Пример использование apache2 mod_rewrite в Ubuntu
  5. python ProxyError

#1:

У меня нечто подобное, на perl реализовано, только там более умная система + интеграция с моими пакетами для debian, добавление в nginx конфига, поддержка lighttpd, перенос сайтов между серверами.

ответить  2009-08-12 11:56:05 

#2:  Басманов:

re: У меня нечто подобное, на perl реализовано, только там более умная система + интеграция с моими пакетами для debian, добавление в nginx конфига, поддержка lighttpd, перенос сайтов между серверами.

ну так на локалхосте в этом нет нужда, к тому же на хостингах это уже автоматизированно и пришито к контрольной панели

ответить  2009-08-12 12:17:06 

#3:

предлагаю положить его в гугл-код)

ответить  2009-08-12 20:47:11 

#4:  nord:

предлагаю канонизировать )

ответить  2009-08-13 18:51:47 

#5:  Басманов:

За что, меня канонизировать?
я сам пользуюсь этим скриптом дома и на работу
Я вижу что треть рефералов в блок это посетители с поисковиков, которые ищут информацию по настройке виртуальных хостов, возможно скрипт им поможет
Или знакомым вебмастерам придётся меньше возиться

ответить  2009-08-13 18:55:39 

#6:  Басманов:

За что, меня канонизировать?
http://breys.ru/blog/stat/keywords

ответить  2009-08-13 18:58:02 

#7:  nord:

сюда http://breys.ru/blog/389.html ))

ответить  2009-08-13 19:05:55 

#8:

да ты мегакодерррр

ответить  2009-08-13 23:05:19 

#9:  Басманов:

спасибо

ответить  2009-08-13 23:07:02 

#10:

мне помогло, спасибо, долго искала, а сама написать не смогла

ответить  2009-11-24 04:33:25