Как-то поднадоело мне постоянно редактировать вручную 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;
