Apache: быстрое добавление сайтов

Набросал простой скрипт, для удобного создания VirtualHost в debian.

Наверное тоже надоело лесть, создавать vhost по существующему, править пути, перезапускать сервер и так много раз и по кругу? А ещё не хватало опечататься?

Предлагаю такое решение: скрипт, делающий всю эту рутинную работу. Принимает только 1 аргумент – имя сайта и сам создаёт скелет и VirtualHost по шаблону.

В каталоге с сайтами создаётся папка с указанным именем. В ней – ещё 2 папки – log и www – для логов и сайта соответственно. А так же vhost – файл с описанием виртуального хоста по шаблону, лежащему в папке с сайтами. На этот файл создаётся симлинк в стандартное для дебиановского апача место – /etc/apache2/sites-avalable. После установки прав на созданные папки происходит вызов a2ensite и перезапуск апача. На скриншоте выше – кусочек такого скелета который получился после работы скрипта – из наутилуса

Разумеется, можно после создания vhost файла можно менять его содержимое – причём не залезая в папку /etc/apache2/.. Для меня это самый удобный вариант – т.к. достаточное количество дебианов с апачами поднял – и каждый раз нарывался на эти грабли, замедляющие настройку сервера.

Скрипт

Да, скрипт на php. Не было времени писать на чём то более “утончённом”, да и не нужно это.
Всё, что потребуется – это исправить на нужный вам базовый каталог для сайтов

#!/usr/bin/php


Его нужно положить как /usr/sbin/a2addsite, ну и соответственно дать права на выполнение(кстати, по понятным причинам его может выполнять только root).
Проще всего это сделать так:

  1. Скопировать код выше
  2. Под рутом выполнить cat > /usr/sbin/a2addsite
  3. Вставить из буфера в консоль
  4. Нажать Ctrl-D
  5. И дать права на выполнение: chmod a+x /usr/sbin/a2addsite

Шаблон

Как не сложно догадаться из дефолтных настроек скрипта, корень для сайтов у меня в /sites, значит, шаблон нужно сохранить в /sites/template.conf


#
# This is automatically generated vhost from template
# site: %site%
# created %date%


ServerAdmin %site%@someserver
ServerName www.%site%
ServerAlias %site%
DocumentRoot %site_www%
ErrorLog %site_log%/error.log
CustomLog %site_log%/access.log combined




Можно менять на свой вкус что угодно :) Плейсхолдеры Placeholders по вкусу можно добавить в скрипт – по мне так этого достаточно.

Запуск

Как и писал, очень просто запуск, например так:
# a2addsite supersite.com
# a2addsite supersite.com
Enabling site supersite.com.
Run '/etc/init.d/apache2 reload' to activate new configuration!
Reloading web server config: apache2.
Completed!

Повторюсь, не надо перезапускать сервер – скрипт делает это сам.
Покажу, что получилось:

#
# This is automatically generated vhost from template
# site: supersite.com
# created Tue, 04 May 2010 02:12:39 +0000


ServerAdmin supersite.com@someserver
ServerName www.supersite.com
ServerAlias supersite.com
DocumentRoot /sites/supersite.com/www/
ErrorLog /sites/supersite.com/log//error.log
CustomLog /sites/supersite.com/log//access.log combined




Выглядит правдоподобно? Так ещё и работает =]
В добавок о скелете, что получилось:

boX:~# ls -Rl /sites/supersite.com/
/sites/supersite.com/:
total 12
drwxr-xr-x 2 www-data root 4096 May 4 02:12 log
-rw-r--r-- 1 www-data root 484 May 4 02:12 vhost
drwxr-xr-x 2 www-data root 4096 May 4 02:12 www

/sites/supersite.com/log:
total 0
-rw-r--r-- 1 root root 0 May 4 02:12 access.log
-rw-r--r-- 1 root root 0 May 4 02:12 error.log

/sites/supersite.com/www:
total 0

Как видно – всё верно. Структура соответствует задуманной и права выставлены соответственно.