我们正在使用vlad部署者将rails应用程序部署到生产和测试服务器。我们所有的服务器都是Ubuntu服务器。
我们遇到与linux权限相关的问题。
Vlad使用ssh将文件放在任何服务器上,无论是生产还是测试。我的公司有几个人,每个人在每台服务器上都有不同的帐户。
另一方面,我们配置Apache服务器的方式,它使用网站目录的“所有者”来读取该目录上的文件。
结果,进行第一次部署的用户成为该站点的“所有者”;其他用户无法进行部署 - 由于所有者已更改,Apache将无法读取已修改的文件。
通常这不是什么大问题,但现在假期即将到来,我们希望尽可能干净地解决这个问题 - 例如,我们希望避免共享密码/ ssh密钥。
理想情况下,我需要一个对已部署文件的权限执行某项操作的vlad任务,以便其他用户可以完全修改它们。我对unix命令知之甚少。
答案 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)
我已经和它斗争了几个月了,我只发现了几种方法:
目前,我们只是继续为每个项目使用一个用户,并在需要时手动chowning所有内容。这有点痛苦,但它确实有效。