Права на storage в Laravel - mcodex

Права на storage в Laravel

Ситуация: проект на Laravel, пользователи: Nginx/PHP-FPM: ‘www-data’, разработчик: ‘mcodex’.

Если задать владельца всего проекта как www-data, то при выполнении консольной команды от имени пользователя, ( например, php artisan), может появится ошибка доступа к файлу лога “Failed to open stream: Permission denied”.

Необходимо задать права на логи так, что бы в них могли записывать и у пользователь разработчика и PHP-FPM. Вариант с назначением 777 не рассматриваем.

Шаги:

1. Добавляем mcodex в группу www-data

sudo usermod -aG www-data mcodex

2. Перелогиниваемся, проверяем

groups mcodex

В списке видим www-data

3. В корне проекта задаем владельца и группу

sudo chown -R mcodex:www-data storage bootstrap/cache

4. Даем группе права на запись

sudo chmod -R g+rwX storage bootstrap/cache

5. Задаем setgid, что бы новые файлы и папки автоматически получали группу www-data

sudo find storage bootstrap/cache -type d -exec chmod g+s {} \;

5. Проверяем права на логи

ls -la storage/logs

Получаем

drwxrwsr-x mcodex www-data logs
-rw-rw-r-- mcodex www-data laravel.log

Для удобства – права одной командой (в терминале вставляем Ctr+Shift+V)

sudo chown -R mcodex:www-data storage bootstrap/cache && \
sudo chmod -R g+rwX storage bootstrap/cache && \
sudo find storage bootstrap/cache -type d -exec chmod g+s {} \;