Задача
При создании домена (или поддомена) нужно автоматизировать процесс настройки виртуального хоста Apache. Сложность в том, что это можно сделать только через специальные файлы-хуки vhost.conf и vhost_ssl.conf (для SSL), которые нужно создать в папке /var/www/vhosts/*/conf (для поддомена /var/www/vhosts/*/subdomains/*/conf).
Кроме этого, после их создания нужно выполнить "/usr/local/psa/admin/sbin/websrvmng --reconfigure-all".
Решение
Оказывается в Plesk предусмотрены события. На каждое из них можно настроить обработчик (например самописный скрипт). Другие панели устроены аналогично. Но в Plesk некоторые вещи очень плохо описаны в документации. Поэтому опишу все подробно.
Для создания обработчика сущствует программа /usr/local/psa/bin/event_handler.
Приведу несколько основных команд:
Краткая справка:
./event_handler -h
Список всех обработчиков:
./event_handler -l
Список возможных событий:
./event_handler -le
Наиболее интересные события:
31 Домен создан
39 Субдомен создан
46 Физический хостинг создан
Как оказалось, событие "31 Домен(Сайт) создан" не очень полезно, так как обработчик не получает переменной с именем системного пользователя $NEW_SYSTEM_USER. А искать имя пользователя косвенными методами (stat --printf=%U /var/www/vhosts/$NEW_DOMAIN_NAME/httpdocs) не надежно. Посему нужно использовать "46 Физический хостинг создан" и "39 Субдомен создан".
Создаем для каждого из них по скрипту.
/opt/psa/handlers/domain-add.sh
#!/bin/bash
h=$NEW_DOMAIN_NAME
p="/var/www/vhosts/$h"
u=$NEW_SYSTEM_USER
if [ ! -d $p/conf ]; then
mkdir $p/conf
fi
cat << __EOT > $p/conf/vhost.conf
AssignUserId $u psacln
CustomLog $p/statistics/logs/access_vhost_log vhost_combined
php_admin_value open_basedir none
__EOT
cat << __EOT > $p/conf/vhost_ssl.conf
AssignUserId $u psacln
CustomLog $p/statistics/logs/access_vhost_log vhost_combined
php_admin_value open_basedir none
__EOT
/usr/local/psa/admin/sbin/websrvmng --reconfigure-vhost --vhost-name=$h
service apache2 reload
/opt/psa/handlers/subdomain-add.sh
#!/bin/bash
/usr/local/psa/handlers/dump-args.pl
h=$NEW_DOMAIN_NAME
s=$NEW_SUBDOMAIN_NAME
p="/var/www/vhosts/$h/subdomains/$s"
u=$NEW_SYSTEM_USER
if [ ! -d $p/conf ]; then
mkdir $p/conf
fi
cat << __EOT > $p/conf/vhost.conf
AssignUserId $u psacln
CustomLog $p/statistics/logs/access_vhost_log vhost_combined
php_admin_value open_basedir none
__EOT
/usr/local/psa/admin/sbin/websrvmng --reconfigure-vhost --vhost-name=$s.$h
service apache2 reloadВозможно в Вашем случае настройки vhost*.conf будут иными (у меня настроен apache-mpm-itk для быстрой и безопасной работы php). Так что уберите лишнее.
Теперь настроим срабатывание этих обработчиков.
При добавлении домена:
./event_handler -c -command /usr/local/psa/handlers/domain-add.sh -priority 50 -user root -event 46
При добавлении субдомена:
./event_handler -c -command /usr/local/psa/handlers/subdomain-add.sh -priority 50 -user root -event 39
В принципе это все. Я не знаю почему документация молчит о многих особенностях. Фактически все приходится делать почти вслепую. Оказывается, я не там смотрел. Есть
официальная документация по обработчикам событий. Правда там описан способ добавления обработчиков только через панель.