【发布时间】:2017-07-11 02:02:31
【问题描述】:
我有一本用于部署我们的 web 应用程序的厨师食谱,有一些文件夹和文件需要由 www-data:www-data 创建和拥有。在部署应用程序时,我在 deploy.rb 食谱中使用了厨师的 deploy 命令,如下所示:
deploy "#{app_dir}" do
repository tmp_dir
user "root"
group "root"
environment app[:environment]
symlink_before_migrate({})
end
然后这些文件和文件夹的创建和权限集在before_symlink.rb 脚本中完成,如下所示:
execute "ensure correct owner of storage folder" do
command "chown -R www-data:www-data #{release_path}/storage"
end
我一直在调试,我已经检查过了:
-
chown被执行,用户存在,在厨师日志中可以看到。 - 如果我在 before_symlink 的末尾执行
sleep命令,然后通过 ssh 进入机器,我可以在storage文件夹中看到该文件夹如我所愿归www-data所有。 - 如果我在
deploy.rb上的 deploy 命令之后立即执行sleep命令,然后 ssh 到机器,现在发布文件夹将链接到current文件夹,并且每个文件和文件夹都将归root:root导致权限错误。
因此,似乎在部署结束时,厨师似乎将每个已部署文件的所有者覆盖给进行部署的用户。这是真的?有什么方法可以将文件和文件夹的所有者设置为before_symlink.rb?
【问题讨论】:
-
如果所有者/组是
www-data:www-data,为什么要将资源分配给root:root?直接在deploy资源中设置正确的。
标签: deployment chef-infra devops