部署者 - 与不同用户一起部署?

时间:2010-07-16 13:56:27

标签: linux file-permissions vlad-deployer

我们正在使用vlad部署者将rails应用程序部署到生产和测试服务器。我们所有的服务器都是Ubuntu服务器。

我们遇到与linux权限相关的问题。

Vlad使用ssh将文件放在任何服务器上,无论是生产还是测试。我的公司有几个人,每个人在每台服务器上都有不同的帐户。

另一方面,我们配置Apache服务器的方式,它使用网站目录的“所有者”来读取该目录上的文件。

结果,进行第一次部署的用户成为该站点的“所有者”;其他用户无法进行部署 - 由于所有者已更改,Apache将无法读取已修改的文件。

通常这不是什么大问题,但现在假期即将到来,我们希望尽可能干净地解决这个问题 - 例如,我们希望避免共享密码/ ssh密钥。

理想情况下,我需要一个对已部署文件的权限执行某项操作的vlad任务,以便其他用户可以完全修改它们。我对unix命令知之甚少。

3 个答案:

答案 0 :(得分:2)

我会用群组权限来做。

将网络根目录设为/ var / www / your-app / current

/ var / www / your-app /应该是所有正在部署的人所属的组可写的组。

设置部署脚本,以便它们写入名为/ var / www / your-app /> timestamp<的目录。其中timestamp是当前时间戳。

/ var / www / your-app / current是一个符号链接,当您成功将所有文件复制到新目录时,您将更新符号链接的目标,以便它指向您创建的目录。

这样每个人都可以部署,你可以看到谁部署了哪个版本。

这也使部署成为原子,因此如果在部署过程中丢失网络连接,任何事情都不会中断。

由于您不会删除旧目录,因此如果您设法引入一些错误,则可以轻松地回滚到“最后状态”。

答案 1 :(得分:1)

为什么不将所有文件公开读取?在每个用户的〜/ .bashrc中放行

umask o = r

http://en.wikipedia.org/wiki/Umask

BTW我从来没有听说过这样的Apache选项;你是说当Apache从/ home / USER读取文件时,它使用的是UID而不是“nobody”或“apache”?这听起来很不稳定。

答案 2 :(得分:0)

我已经和它斗争了几个月了,我只发现了几种方法:

  • 为部署到服务器的所有用户使用单个共享帐户(boo!)
  • 使用不同的帐户,但在执行与帐户相关的任务(例如svn更新)之前,请在常用用户帐户(www-data,rails或类似帐户)中显示。这个可能有效,但我还没有测试过。
  • 使用access control lists。有人暗示我这可能是正确的解决方案。但是,我没有足够的知识或时间来使这项工作正常进行。

目前,我们只是继续为每个项目使用一个用户,并在需要时手动chowning所有内容。这有点痛苦,但它确实有效。