WordPress – Capistrano权限问题

我正在用Capistrano和Composerpipe理WordPress安装。 一切都安装好,运行良好,在我的ngix / php-fpm设置上相当快。

不过,当我试图从pipe理区域更新插件时,我遇到了一个问题,WordPress要求inputFTP凭据。 一个快速谷歌,它清楚这是因为WordPress可以访问我的服务器上的Web服务。

我SSD到我的服务器,并做了以下几点:

ps aux | grep 'nginx'

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

这是我的问题:使用Capistrano你创build一个deploy用户,并给他们无密码的sudo特权。 好的。 我做到了。 Capistrano运作良好。

问题是文件必须由这个deploy用户拥有。 为了做到这一点,我只是像这样: sudo chown -R deploy:www-data /srv/www/mysite.com

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

这样,当capistrano添加新的文件,他们都inheritance了正确的权限。

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

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

当我recursion地将该目录chownwww-data:www-data一切工作正常。 我可以更新和从后端下载插件,但我不能部署与Capistrano。

我需要做什么nginx访问我的WordPress的安装和解决这个问题?

谢谢。

听起来像你可能忘记给组写权限:

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

如果使用chmod g+s而不是g + w,那么所有将来的文件创build都将使用指定的组作为默认值。 但这是一个手动修复,这不是使用Capistrano的要点。

我有同样的问题,并从一个从stackoverflow的一点帮助,我设法挂钩一个任务,部署完成后,修改只是当前的/ 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' 

您还需要在任务运行之前在configuration中set :group, 'www-data'或任何您想要的组名称。 正如其他人所build议的,我也build议使用部署用户,而不是根。

在WordPress的情况下,它可能是应用程序,而不是www,你想要mod的path – 这可能意味着你可以只设置roles(:app)

编辑:正如我所说的,另一种方法是within release_path do使用within release_path do来改变到运行命令的特定path。 但是,我发现这个方法不能很好地处理格式化为一个string的命令,所以你用逗号分隔了执行的参数。 如下:

  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 

在这个例子中,我还设置了组名内联,因为它有点冗余使用这样一个通用的configuration,你只能调用一次。

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

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

     sudo usermod -a -G www-data deploy