Как-то поднадоело мне постоянно редактировать вручную httpd.conf и /etc/hosts и я решил написать скрипт, который бы позволил автоматизировать этот процесс
Вот такой скрипт:
#!/bin/sh # Константы: HOSTS='/tc/hosts'; # Путь к файлу hosts HTTPD_CONF='/etc/httpd/conf/extra/httpd-vhosts.conf'; # Путь к файлу с настройками виртуальных хостов DIR_HTTP='/srv/http/'; # Путь к директориям с хостами IP_MASK='127.0.0.'; # Маска по которой будет формироваться новый IP INDEX_FILE='index.php'; # Index файл в корневой папке нового виртуального хоста DIR_LOG='/var/log/httpd/'; # Путь к папке с логами EMAIL_ADMIN='wikide@gmail.com'; # Email админестратора # Функция вывода ошибок get_error() { echo $1; exit 0; } # Функция проверки ip check_ip() { if [ "`cat $HOSTS | grep \"$ip\"`" ]; then echo 1; fi } # Проверяем наличея параметра с именем хоста if [ "$1" ]; then if [ "$2" ]; then # Если задан свой IP new_ip=$2; if [ "`check_ip $new_ip`" ]; then # Проверка на наличее в файле get_error 'Такой ip адрес - '$new_ip' уже занят. Введите другой или пусть скрипт '$0' сам сгенерирует ip адресс для нового хоста.'; fi; else # Получаем IP автоматически new_ip=$IP_MASK$((`tail -1 $HOSTS | awk '{ split($1, ip, "."); print ip[4]}'`+1)); fi # Если корневая папка нового хоста уже существует if [ -d $DIR_HTTP$1/ ]; then get_error 'Директория '$1' уже есть в '$DIR_HTTP'. Подберите другое имя.'; else # Создаем корневую директорию виртуального хоста mkdir $DIR_HTTP$1; echo -e " <html> <head> <title>New host</title> </head> <body> <h1>Created host '$1'!</h1> </body> </html>" > $DIR_HTTP$1'/index.php'; # Запись в hosts sudo echo $new_ip $1 | sudo tee -a $HOSTS 1>/dev/null; # Запись в конфиг Apache sudo echo -e "#Create date: `date '+%F %T'` DirectoryIndex $INDEX_FILE ServerAdmin $EMAIL_ADMIN DocumentRoot \"$DIR_HTTP$1/\" ServerName $1 ServerAlias $1 ErrorLog \"$DIR_LOG$1.log\" CustomLog \"$DIR_LOG$1\" common" | sudo tee -a $HTTPD_CONF 1>/dev/null; # Перезапускаем сервер sudo apachectl restart; # Выводими сообщение echo 'Виртуальный хост "'$1'" успешно создан' fi else get_error 'Нужно обязательно указать название нового хоста $0 NAME_HOST [IP_HOST]'; fi exit 0;