Автоматическая настройка сайтов в Apache
Простая жизнь простых сайтов на сервере с Apache.
Пришлось мне недлать клеинту сервер на котором размещается 1000+ маленькх сайтов. Сайт представляет собой маленькую html страницу с iframe, но нужно автоматизировать процесс настройки виртуальных хостов в Apache.
Клиенту было предложено заливать сайты на сервер по фтп называть папки полными именами сайтов. Со стороны сервера был настроен pure-ftpd с виртуальных пользователем. После логина клиент попадает в папку /var/www/html, где ему предстоит создать папку с именем сайта и залить в эту папку файлы.
После чего срабатывает серверная магия и сайт становится доступен по велению волшебного basha.
Для этого в папке /etc/httpd/conf.d/ был созад шаблон:
<VirtualHost *:80>
ServerName websiterepl
ServerAlias www.websiterepl
DocumentRoot /var/www/html/websiterepl
LogLevel warn
ErrorLog /var/log/httpd/websites/error.log
CustomLog /var/log/httpd/websites/access.log combined
<Directory /var/www/html/websiterepl>
Options +ExecCGI -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
</VirtualHost>
После чего следующий скрипт обрабатывает содержание /var/www/html/ и создает для всех папок виртуальные хосты в конфиге apache.
#!/bin/bash
do_websites () {
for f in $(ls /var/www/html/);
do
sed 's/websiterepl/'"$f"'/g' /etc/httpd/conf.d/template >> /etc/httpd/conf.d/websites.conf
echo "" >> /etc/httpd/conf.d/websites.conf
done
}
make_logs() {
for folder in $(grep ErrorLog /etc/httpd/conf.d/websites.conf |awk '{print $2}' |sed 's/error.log//g');
do
if [ ! -d $folder ];
then
mkdir -p $folder;
fi
done
}
if [ "$1" == "force" ]
then
rm -f /etc/httpd/conf.d/websites.conf
do_websites
make_logs
service httpd reload
else
servernames=$(grep ServerName /etc/httpd/conf.d/websites.conf |wc -l)
folders=$(ls /var/www/html |wc -l)
if [ "$folders" != "$servernames" ]
then
rm -f /etc/httpd/conf.d/websites.conf
do_websites
make_logs
service httpd reload
fi
fi
С помощью crontab заставляет скрипт выполняться каждые 15 минут.
*/15 * * * * /usr/local/bin/make_vhosts_nginx 2>&1 >> /dev/null
В принцыпе в сам скрипт зашита проверка количества виртуальных хостов и сравнение их с количеством папок в /var/www/html, поэтому можно выполнять его и каждые 5 минут.
Скрипт можно запустить принудительно используя ключь force.