Capistrano развертывает веб-приложение через SSH, используя deploy
пользователь. Apache / PHP работает под типичными www-data
пользователь.
Веб-сервер создает файлы и папки кеша во время выполнения внутри пути приложения. Пример:
-rw-r--r-- 1 www-data www-data 71758 Apr 29 14:33 /var/www/site.com/releases/20140429183204/cache/twig/9e/dd/fd353a4ff2520b59144be49f4a6e.php
Capistrano deploy:cleanup
пытается удалить старые выпуски, которые содержат эти файлы кеша, но терпит неудачу, поскольку пользователь deploy
не имеет разрешения на запись в файлы кеша.
Сообщается об ошибке:
cannot remove `/var/www/site.com/releases/20140429183204/cache/twig/9e/dd/fd353a4ff2520b59144be49f4a6e.php' : Permission denied
Моим обычным решением было установить deploy
в www-data
группа и www-data
в deploy
group и установите ACL, чтобы новые файлы / папки всегда получали права групповой записи.
Моя текущая файловая система сервера не поддерживает acl ...
Моя попытка заключалась в том, чтобы установить липкий бит для всей папки приложения. Это было сделано, когда оба пользователя находятся в группе другого пользователя.
chmod -R g+rwsx /var/www/site.com
Это хорошо работает для новых файлов, но липкий бит не распространяется в новую папку (что является моей проблемой)
Как настроить разрешения для Capistrano (через SSH с пользователем deploy
) удалить файлы и папки, созданные Apache с пользователем www-data
.
Лучшее решение на данный момент - использовать PHP маска функция в начале каждого скрипта.
# Make sure all files written are writable by group.
# Also execute bit so directory's content is listable
umask(0002);
Это гарантирует, что все файлы и папки созданы в нормальных условиях иметь разрешение на групповую запись и бит выполнения, поэтому содержимое может отображаться в списке.
Однако это может вызвать проблемы с библиотеками, игнорирующими маска и применение разрешений вручную.