Скрипт управления виртуальными хостами на CentOS
Всем привет сегодня расскажу про скрипт управления виртуальными хостами на CentOS. В очередной раз создавая виртуальный хост на выделенном сервере – задумался об упрощении задачи, т.к. в 90% случаев использую схожую структуру хранения сайтов. Взял за основу сторонний скрипт, доработал под свои задачи и решил поделиться им с вами.
Скрипт умеет добавлять, удалять, включать, выключать виртуальные хосты на CentOS и подобных ОС. Ubuntu, Debian имеют несколько иную структуру, поэтому скрипт на них работать не будет.
Скрипт делает проверки на существование хостов при добавлении, интерактивно предлагает заменить файл конфигурации, не удаляет файлы в директории, если они уже присутствовали. На каждое спорное действие (удаление файлов, директорий) – задает вопрос на дальнейшее действие.
Настройка скрипта
Скрипт имеет ряд настроек, часть из которых берется из командной строки для удобства:
action=$1domain=$2documentrootdir=$3owner='apache'email='email@mail.ru'confDir='/etc/httpd/conf.d/'userDir='/var/www/'#rootdir=${domain//./}rootdir=$domaindirPerm=775confDomain=$confDir$domain.conf
Действие, имя домена, домашняя директория задаются через параметры.
Параметр | Описание |
---|---|
owner | После создания директорий сайта – им задается владелец и группа. описанный в данном параметре |
Прописывается в настройки хоста в параметр ServerAdmin | |
confDir | Директория, куда будут записаны конфигурационные файлы виртуальных хостов веб сервера |
userDir | Директория, где будут храниться все виртуальные хосты |
rootdir | Директория, в которой будут храниться виртуальных хостов |
dirPerm | Права вновь созданные директории виртуальных хостов |
confDomain | Имя конфигурационного файла |
Использование
Добавление хоста
Самое простое использование:
Вывод:
[root@admin tmp]# ./vhostsAdmin.sh add test.comNew Virtual Host CreatedHost added to /etc/hosts fileReloading httpd:Complete!You now have a new Virtual HostYour new host is: http://test.comAnd its located at /var/www/test.com
Скрипт создает файл конфигурации виртуального хоста $confDomain (/etc/httpd/conf.d/test.com.conf) следующего содержания:
<VirtualHost *:80>ServerAdmin test@mail.ruDocumentRoot /var/www/test.com/public_htmlServerName test.comServerAlias www.test.comErrorLog /var/www/test.com/logs/error_logCustomLog /var/www/test.com/logs/access_log commonphp_admin_value upload_tmp_dir /var/www/test.com/tmpphp_admin_value session.save_path /var/www/test.com/tmpphp_admin_value open_basedir /var/www/test.com:/usr/share/pear<Directory />Options FollowSymLinksAllowOverride None</Directory><Directory /var/www/test.com>Options Indexes FollowSymLinks MultiViewsAllowOverride AllOrder allow,denyallow from all</Directory></VirtualHost>
Вывод конфигурационного файла можно поменять в исходниках.
Скрипт создает директории, если это необходимо: $userDir/$rootDir/{tmp,public_html,logs} (/var/www/test.com/{tmp,public_html,logs}), выдает им права $dirPerm (chmod 775) и делает проверку на возможность записи в директорию $userDir/$rootDir.
В случае, если DocumentRoot отличается от $userDir/$rootDir/public_html, путь к нему можно передать вторым параметром относительно $rootDir:
Это полезно, когда у нас используются фреймворки (Yii2, Lavarel), в которых DocumentRoot находится в поддиректориях web, public и других.
Удаление
Удаление производится командой. Удаляется файл конфигурации, производится перезапуск веб сервера, делается запрос на удаление файлов виртуального хоста и в случае положительного ответа – удаляет всю директорию.
Вывод:
[root@ittricks tmp]# ./vhost_admin.sh remove test.comReloading httpd:Delete host root directory /var/www/test.com? (y/n) yDirectory deletedComplete!You just removed Virtual Host test.com
Включение / выключение
Данная процедура предусматривает переименовывание конфигурационного файла виртуального хоста, при выключении добавляется префикс .off, при включении – префикс удаляется:
[root@admin tmp]# ./vhost_admin.sh off test.comReloading httpd:Complete!You just deactivate test.com
[root@admin tmp]# ./vhost_admin.sh on test.comReloading httpd:Complete!You just activate test.com