Я пытался найти этот вопрос раньше, но, похоже, нигде не было подробного объяснения, в основном только такие проблемы, как app/storage
разрешение не было установлено, поэтому веб-сервер может записывать файл, но моя проблема кажется более масштабной и фундаментальной, я надеюсь, что кто-то сможет подробно объяснить, как это следует настроить, желательно без необходимости устанавливать разрешение 777
,
Так что мой стек Убунту 14.04, PHP 5.6 с PHP-FPM потому что я использую nginx 1.4.6 и я использую Ларавел 4.2 в качестве рамки, ау и еще один использую Гит как мой инструмент управления версиями. Итак, что необходимо сделать шаг за шагом, чтобы сделать следующее:
Установка начального проекта, Git и Nginx:
Насколько я знаю, Nginx настроен на использование имени пользователя www-data
по умолчанию верно? Означает ли это, что я должен назначить своего пользователя, например, kevin
в группу www-data
? Когда я инициализирую git, создаю проект с помощью composer, настраиваю открытый / закрытый ключ SSH, нужно ли мне принадлежать к группе www-data
или я должен быть sudo
или что? На моем рабочем сервере я попытался использовать sudo
для того, чтобы все как-то настроить, было бы проще сделать все вышеперечисленное, но лучше ли это?
Изготовление app/storage
Доступно для записи для веб-сервера:
Я думаю, что это второй и самый важный для Laravel, потому что, если это не сработает, Laravel не будет работать, я знаю, что эта папка должна быть доступна для записи веб-сервером (nginx), поэтому мне нужно установить это sudo chown -R www-data:www-data app/storage
а также sudo chmod -R 664 app/storage
право? Но почему-то это, кажется, не работает постоянно, потому что во время моей разработки иногда это говорит о том, что кэш представления не может быть записан в app/storage
папка, поэтому в конце я должен установить его 777
или же 775
если мне повезет
Общая папка или место моих активов
Здесь у меня тоже есть некоторое несоответствие, я настроил его в конце 777
чтобы обеспечить доступ ко всем моим файлам Nginx. Иногда Nginx скажет мне, что какое-то изображение в моей папке активов, кажется, запрещено, и он вернет HTTP 200, только если я либо установил в 777
или измените группу на www-data:www-data
Нужно ли менять разрешение или группу для каждого изображения, которое я создал из Gimp, Photoshop, или когда я загружал из Dropbox или из своего электронного письма, когда мой графический дизайнер разрабатывает новые иконки?
Файл загружен
Таким образом, где-то в какое-то время люди смогут загружать, например, свое изображение профиля, или когда я публикую блог, я могу загрузить изображение, это означает, что в какой-то момент скрипт загрузки файла переместит файл из /tmp
папка в мой public
может потребоваться только запись в подкаталог public
или, может быть, иногда нужно создать папку на основе определенного id
и переместить файл в каталог, в большинстве случаев я получаю сообщение об ошибке, что каталог кажется недоступным для записи, или некоторая ошибка разрешения как таковая во время выполнения сценария. Значит ли это, что Процесс PHP должен быть запущен с определенным разрешением тоже? Или это означает, что каталог должен иметь определенное разрешение? Связана ли эта проблема с Сервис Nginx или это относится к Процесс PHP?
У меня есть опыт использования таких пакетов, как roumen/sitemap
или же jlapp/swaggervel
кажется, они используют один и тот же фасад File
, но почему-то у них нет проблем с разрешением, я пытаюсь повторить поведение их кода, но столкнулся с проблемой, описанной выше.
Очередь, Artisan, другой исполняемый скрипт на основе командной строки
Наконец, выполняется ли сценарий на основе командной строки, он ведет себя так же, как сценарий, выполняемый при взаимодействии с веб-сервером, например при загрузке файла выше, или мне нужно подготовиться к другим несоответствиям?
Спасибо, если кто-то может мне это объяснить. Я думаю, что если я это выясню, я создам запись в блоге или что-то в этом роде, оцените это, ребята! : D
Обычно я меняю все файлы и папки на www-data с помощью sudo chgrp -R www-data laravel-folder
, Таким образом, я все еще владелец, и у веб-сервера есть групповые разрешения.
Когда www-данные имеют групповое владение, sudo chmod -R g+w app/storage
позволяет веб-серверу записывать в подпапку хранилища. Или в качестве альтернативы вы можете сделать sudo chmod -R 775 app/storage
, Не используйте 777, нет необходимости разрешать всем писать в ваши папки.
Для всех новых активов я всегда коллективно меняю групповую собственность. Или, если есть новые файлы во многих местах, просто снова сделайте sudo chgrp -R www-data laravel-folder
, Одна команда и все имеет правильную групповую собственность.
Нет необходимости изменять разрешения по умолчанию для public
папка (755). Nginx не будет сохранять файлы там.
Все файлы, отправленные пользователями, должны находиться в storage
, Вы можете создать подпапку для аватаров, другую для других пользовательских файлов. Вот почему эта папка называется storage
(Само за себя). Он может быть записан веб-сервером, поэтому nginx может создавать там файлы / папки.
Когда вы настраиваете права доступа / владение группой, как я описал выше, не должно быть проблем с командами ремесленника или CLI.
Я предлагаю вам прочитать это Как установить Laravel с веб-сервером Nginx в Ubuntu 14.04 статья.
Других решений пока нет …