我正在用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地将该目录chown到www-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