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

Wordpress - Проблемы с разрешениями Capistrano

Я управляю установкой 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