Автоматическая настройка сайтов в Apache


Простая жизнь простых сайтов на сервере с Apache.

Пришлось мне недлать клеинту сервер на котором размещается 1000+ маленькх сайтов. Сайт представляет собой маленькую html страницу с iframe, но нужно автоматизировать процесс настройки виртуальных хостов в Apache.

Клиенту было предложено заливать сайты на сервер по фтп называть папки полными именами сайтов. Со стороны сервера был настроен pure-ftpd с виртуальных пользователем. После логина клиент попадает в папку /var/www/html, где ему предстоит создать папку с именем сайта и залить в эту папку файлы.

После чего срабатывает серверная магия и сайт становится доступен по велению волшебного basha.

Для этого в папке /etc/httpd/conf.d/ был созад шаблон:

/etc/httpd/conf.d/template

<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.

/usr/local/bin/make_vhosts

#!/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.

Share Button
(Visited 138 times, 1 visits today)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *