我正在使用 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+s
g+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