Wordpress - Capistrano 权限问题

Wordpress - Capistrano 权限问题

我正在使用 Capistrano 和 Composer 管理 WordPress 安装。一切都已设置好并运行良好,在我的 ngix / php-fpm 设置上速度相当快。

然而,当我尝试从管理区域更新插件时,我遇到了一个问题,WordPress 要求提供 FTP 凭据。快速谷歌搜索后,很明显这是因为 WordPress 可以访问我服务器上的 Web 服务。

我将其放入 SSD 中并执行以下操作:

ps aux | grep 'nginx'

nginx 在 www-data 用户下运行。这很正常。

这是我的问题:要使用 Capistrano,您需要创建一个deploy用户并授予他们无密码 sudo 权限。好的。我做到了。Capistrano 运行良好。

问题是这些文件必须归该deploy用户所有。为此,我只需像这样 chown 即可: sudo chown -R deploy:www-data /srv/www/mysite.com

之后我想确保所有新文件和目录都继承组所有权: sudo chmod g+s /srv/www/mysite.com

这样,当 capistrano 添加新文件时,它们都会继承正确的权限。

我还将deploy用户添加到组中www-data,以避免出现使用 WordPress 时遇到的问题。

我通过运行确认了这一点groups deploy

当我递归chown目录时www-data:www-data,一切都正常。我可以从后端更新和下载插件,但无法使用 Capistrano 进行部署。

我必须做什么才能让 nginx 访问我的 wordpress 安装并解决这个问题?

谢谢。

答案1

听起来你可能忘记授予组写权限:

$ sudo chmod g+w /srv/www/mysite.com

答案2

如果您使用chmod g+sg+w 而不是 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'在配置中输入您想要的任何组名。正如其他人所建议的,我还建议使用部署用户而不是 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

在该示例中,我还内联设置了组名,因为使用只调用一次的通用配置有点多余。

答案3

  • 将所有权更改为 www-data:www-data

    sudo chown www-data:www-data /path/to/wp -R
    
  • 将您的部署用户添加到 www-data 组

    sudo usermod -a -G www-data deploy
    

相关内容