Права доступа к файлу Symfony 4 в директории var меняются каждый раз - PullRequest
0 голосов
/ 27 января 2019

Я настраиваю новый сервер и установил Ubuntu 18.04 в сочетании с Apache2 .Мой проект хранится в /var/www/projectapache2.conf я добавил

<Directory /var/www/project/>
    AllowOverride All
    Order Allow,Deny
    Allow from All
</Directory>

В моем файле virtualhosts я указываю на /var/www/project/public Когда я иду на IP-адрес моего сервера, я вижу свой проект, и все работает, кромеодна вещь:

всякий раз, когда я очищаю кэш с php bin/console cache:clear, разрешения моего каталога var портятся, что приводит к ошибкам в производственной среде.

Я могу исправить это с помощью:

chmod -R 777 var/

Но проблема возвращается, когда я снова очищаю кеш.Я пробовал с разными пользователями, включая root, но всегда одна и та же проблема.Я не понимаю, что является причиной этого.В документации о правах доступа к файлам сказано:

В Symfony 3.x вам нужно было проделать дополнительную работу, чтобы убедиться, что каталог вашего кэша доступен для записи.Но это больше не правда!В Symfony 4 все работает автоматически

Ну не для меня, но что может вызвать проблему?

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Решение, которое работало для меня (с использованием Symfony 3.x и Ubuntu 18.04), объяснено на официальном сайте, здесь: https://symfony.com/doc/3.4/setup/file_permissions.html#using-acl-on-a-system-that-supports-setfacl-linux-bsd

Может быть, это решение работает также с Symfony 4?

Выписка:

3.Использование ACL в системе, которая поддерживает setfacl (Linux / BSD)

Большинство дистрибутивов Linux и BSD не поддерживают chmod +a, но поддерживают другую утилиту под названием setfacl.Возможно, вам придется установить setfacl и включить поддержку ACL на своем разделе диска перед его использованием.Затем используйте следующий скрипт для определения пользователя вашего веб-сервера и предоставления необходимых разрешений:

HTTPDUSER=$(ps axo user,comm | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\ -f1)

sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var

sudo setfacl -R -m u:"$HTTPDUSER":rwX -m u:$(whoami):rwX var

Примечание. Первая команда setfacl устанавливает разрешения для будущих файлов и папок, а вторая - для существующих файлов и папок.Обе эти команды назначают разрешения для пользователя системы и пользователя Apache.setfacl недоступен в точках монтирования NFS.Однако хранение кеша и журналов по NFS настоятельно не рекомендуется из соображений производительности.

Персональный совет:

sudo apt-get install setfacl может сказать «невозможно найти setfacl».

Если так:

  • проверьте, присутствует ли setfacl: setfacl -h
  • setfacl является частью пакета acl, поэтому установите acl, если пропущено
0 голосов
/ 28 января 2019

Проблема

Каталог кэша принадлежит пользователю, выполняющему команду cache:clear.

  • Допустим, файлы вашего проекта принадлежат www-data.
  • Очистка кэша с пользователем root
  • Кэш принадлежит пользователю root
  • www-data невозможно записать в каталог кэша

Решение

выполнить кеш: очистить, используя пользователя, владеющего файлами.

  • Войти как www-данные: su www-data -s /bin/bash
  • очистить кеш ./bin/console cache:clear

В зависимости от ваших настроек ваш www-data пользователь может быть другим

...