Назад | Перейти на главную страницу

Capistrano не может удалить папки / файлы, созданные Apache

Проблема

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

Обычное решение, ACL

Моим обычным решением было установить deploy в www-data группа и www-data в deploy group и установите ACL, чтобы новые файлы / папки всегда получали права групповой записи.

Моя текущая файловая система сервера не поддерживает acl ...

Попытка решения, липкий бит

Моя попытка заключалась в том, чтобы установить липкий бит для всей папки приложения. Это было сделано, когда оба пользователя находятся в группе другого пользователя.

chmod -R g+rwsx /var/www/site.com

Это хорошо работает для новых файлов, но липкий бит не распространяется в новую папку (что является моей проблемой)

tl; dr

Как настроить разрешения для 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);

Это гарантирует, что все файлы и папки созданы в нормальных условиях иметь разрешение на групповую запись и бит выполнения, поэтому содержимое может отображаться в списке.

Однако это может вызвать проблемы с библиотеками, игнорирующими маска и применение разрешений вручную.