Я управляю установкой WordPress с помощью Capistrano и Composer. Все настроено и работает хорошо, это довольно быстро на моей настройке ngix / php-fpm.
Однако я столкнулся с проблемой при попытке обновить плагины из области администратора, WordPress запрашивает учетные данные FTP. Быстрый гугл, и ясно, что это потому, что WordPress имеет доступ к веб-службам на моем сервере.
Я подключил SSD к своему серверу и сделал следующее:
ps aux | grep 'nginx'
nginx работает под пользователем www-data. Это нормально.
Вот моя проблема: чтобы использовать Capistrano, вы создаете deploy
user и предоставьте им привилегии sudo без пароля. Хорошо. Я это сделал. Капистрано работает хорошо.
Проблема в том, что файлы должны принадлежать этому deploy
пользователь. Для этого я просто попробовал вот так:
sudo chown -R deploy:www-data /srv/www/mysite.com
После этого я хотел убедиться, что все новые файлы и каталоги наследуют группу:
sudo chmod g+s /srv/www/mysite.com
Таким образом, когда capistrano добавляет новые файлы, все они наследуют правильные разрешения.
Я также добавил deploy
пользователь к www-data
group, чтобы избежать проблемы с WordPress.
Я подтвердил это, запустив groups deploy
Когда я рекурсивно chown
каталог для www-data:www-data
все работает нормально. Я могу обновлять и загружать плагины с бэкэнда, НО я не могу развернуть с Capistrano.
Что мне нужно сделать, чтобы nginx получил доступ к моей установке Wordpress и решил эту проблему?
Спасибо.
Если вы используете chmod g+s
вместо g + w, тогда все будущие создания файлов будут использовать указанную группу по умолчанию. Но это ручное исправление, в котором нет смысла использовать Capistrano.
У меня была такая же проблема, и с небольшой помощью переполнение стека Мне удалось подключить задачу после завершения развертывания, чтобы изменить разрешения только для текущего каталога / www (оставив остальную часть структуры развертывания нетронутой.
Это должно быть в пространстве имен развертывания:
task :mod_group do
on roles(:all) do
execute "chown -R :#{fetch(:group)} #{fetch(:deploy_to)}/current/www && chmod -R g+s #{fetch(:deploy_to)}/current/www"
info "Group permission of #{fetch(:deploy_to)}/current/www modified to #{fetch(:group)}"
end
end
after :finished, 'deploy:mod_group'
Вам также необходимо set :group, 'www-data'
или любое другое имя группы, которое вы хотите в конфигурациях перед запуском задачи. Как предлагали другие, я бы также рекомендовал использовать пользователя deploy вместо root.
В случае Wordpress это может быть путь к приложению, а не www, который вы хотите изменить, что, вероятно, означает, что вы можете просто установить roles(:app)
слишком.
Изменить: как я прокомментировал, альтернативой является использование within release_path do
чтобы перейти на конкретный путь для запуска команд. Однако я обнаружил, что этот метод плохо работает с командой, отформатированной как одна строка, поэтому у вас есть запятые, разделяющие аргументы для выполнения. Следующим образом:
task :mod_group do
on roles(:all) do
within release_path do
execute 'chown', '-R', ':www-data', 'www'
execute 'chmod', '-R', 'g+s', 'www'
info "Group permission of www modified to www-data"
end
end
end
В этом примере я также установил имя группы встроенным, потому что это немного избыточно с использованием такой общей конфигурации, которую вы вызываете только один раз.
сменить владельца на www-data: www-data
sudo chown www-data:www-data /path/to/wp -R
добавьте пользователя развертывания в группу www-data
sudo usermod -a -G www-data deploy
Похоже, вы забыли предоставить группе права на запись:
$ sudo chmod g+w /srv/www/mysite.com