【问题标题】:Deploying with capistrano does ignore group setting使用 capistrano 部署会忽略组设置
【发布时间】:2012-06-24 11:28:02
【问题描述】:

在我的部署文件中,我将组设置为 www-data:

set :user,            "root"
set :group,           "www-data"

所以在使用 cap:setup 时,我希望 capistrano 使用 root:www-data 来调整文件夹

但是所有文件夹和文件都是root:root。

这个问题可能来自哪里?

信息:我正在使用系统范围的 rvm。

【问题讨论】:

  • 这是一个非常糟糕的以 root 身份部署的做法,我建议创建一个用户并使用它进行部署。

标签: rvm capistrano chmod rvm-capistrano


【解决方案1】:

据我了解,您应该手动进行,设置的作用是 使用用户登录,而不是设置目录权限。

我没有找到 capistrano 的组设置,也许你使用了一些扩展?

你可以做些什么来改变它:

after "deploy:setup", :setup_group
task :setup_group do
  run "chown -R :#{group} #{deploy_to} && chmod -R g+s #{deploy_to}"
end

但首先你不应该使用 root 进行部署,正如@Julian 在评论中提到的更好的做法是使用单独的用户来完成这项任务并将他的组设置为适当的组,那么它就不会需要上述任务并且会自动工作。

【讨论】:

  • 不知道为什么它不再工作了,但这有帮助,THX。致力于对非 root 部署进行更改,但这会带来很多新问题
  • 天哪,我多年来一直在漫不经心地使用set :group!从来没有注意到,因为通常我的用户名和组是相同的:)
【解决方案2】:

只是插话:Capistrano 源代码中根本没有提到 :group。我想这是一个货物崇拜的选择。 :user 选项仅用于 SSH 连接。

关于您的问题,Capistrano 创建的目录和文件是使用默认权限创建的,它绝不会以任何方式chowns;如果您部署为root,那么它们将属于root:root

【讨论】:

    【解决方案3】:

    比解决问题更好的是一开始就没有它:

    1. 首先,创建另一个用户以使用 (as Julien suggests) 进行部署。
      假设我们称他为deployer
    2. 然后使用他进行 SSH 连接
      set :user, 'deployer'
    3. 最后,我们不想使用sudo,所以通过添加将其关闭
      set :use_sudo, false
      发送至您的deploy.rb

    【讨论】:

    • 当我这样做时,apache 无法读取文件,因为它在与部署者用户不同的用户/组下运行。如果我随后手动 chown -R 给网络服务器用户,则该站点可以正常工作。有什么建议吗?
    • @joshua.paling 将部署者添加到 www-data 组怎么样?这对我有用。 (Ubuntu:sudo adduser deployer www-data
    猜你喜欢
    • 2014-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多