Сайты и каталоги: где и почему?
Исторически во многих дистрибутивах файлы веб-сайтов лежат в подкаталогах /var/www/
, что с одной стороны понятно и предсказуемо.
C другой стороны, когда каждый сайт на сервере работает под своим пользователем, если мы следуем правилу выше и помещаем файлы сайта example.com
в /var/www/example.com/
, возникает непонятная ситуация когда файлы, которые принадлежат пользователю example.com
, с которым и работает этот сайт, которые мы ожидаем найти в домашней директории пользователя, которая по стандарту должна быть в /home
, находятся совсем не там.
Такая непонятная ситуация приводит к необходимости каждый раз предпринимать дополнительные меры (и помнить о них!) к тому, чтобы файлы сайтов были именно в /var/www/
, а файлы с настройками пользователей были на своём обычном месте в домашений директории.
Что делать?
Избавиться от этой непонятной ситуации и связанных с ней неудобств можно если все файлы пользователя, будь это его .bashrc
или index.php
держать в домашнем каталоге. Соответственно, все файлы относящиеся к сайту будут лежать в подкаталоге www
, внутри которого будет каталог logs
для логов веб-сервера и приложений, и каталог htdocs
для публичных файлов доступных через веб-сервер.
/home/example.com/www
/home/example.com/www/logs/
/home/example.com/www/htdocs/
/home/example.com/www/htdocs/index.php
Такая структура каталогов уменьшает нагрузку на память как администратора сервера, так и разработчиков, освобождая её для более важных и интересных вещей.
Что меняется?
Кроме таких очевидных вещей таких как настройки Apache и nginx, появляется необходимость архивировать логи в нетипичном месте. Которая решается добавлением одного файла /etc/logrotate.d/apache2-user
:
/home/*/www/logs/*log {
nocreate
# дальше обычное из /etc/logrotate.d/apache2
# кроме строчки create ...
}
Опция nocreate
нужна здесь потому что веб-сервер, выполняющийся с правами пользователя (например, Apache c mpm-itk), будет создавать файлы логов с правами того же пользователя. Если же опцию create
оставить, то сам пользователь не сможет читать собственные логи.