2

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

我们有一个与 linux 权限相关的问题。

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

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

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

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

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

4

3 回答 3

2

我会用组权限来做。

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

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

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

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

这样每个人都可以部署,并且可以看到谁部署了什么版本。

这也使部署具有原子性,因此如果您在部署过程中失去网络连接,一切都不会中断。

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

于 2010-08-19T09:42:13.010 回答
1

为什么不让所有文件公开可读?在每个用户的 ~/.bashrc 中放入该行

umask o=r

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

顺便说一句,我从未听说过这样的 Apache 选项;你是说当 Apache 从 /home/USER 读取文件时,它以 USER 的 UID 运行,而不是“nobody”或“apache”?这听起来很奇怪。

于 2010-08-18T01:26:45.947 回答
0

我已经与它斗争了几个月,但我只找到了几种方法来做到这一点:

  • 为部署到服务器的所有用户使用一个共享帐户(嘘!)
  • 使用不同的帐户,但在执行与帐户相关的任务(例如 svn 更新)之前,请使用普通用户帐户(www-data、rails 或类似帐户)。这可能有效,但我还没有测试过。
  • 使用访问控制列表。有人暗示我这可能是正确的解决方案。但是,我没有知识或时间来使其正常工作。

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

于 2010-08-18T14:22:57.570 回答