vlad部署者 – 部署与不同的用户?

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

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

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

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

因此,进行首次部署的用户成为该站点的“所有者” 其他用户无法进行部署 – 由于所有者已更改,Apache将无法读取已修改的文件。

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

理想情况下,我需要一个vlad任务来完成部署文件的权限,以便其他用户完全修改它们。 为了做到这一点,我对UNIX命令不够了解。

我会用组权限来做。

Web根目录是/ var / www / your-app / current

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

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

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

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

这也使得部署原子化,所以如果在部署过程中失去了网络连接,则不会中断。

既然你不会删除旧的目录,如果你设法引入一些错误,你可以轻松地回滚到“最后一个好”的状态。

你为什么不把所有的文件公之于众? 在每个用户的〜/ .bashrc中放行

umask o = r

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

顺便说一句,我从来没有听说过这样的Apache选项; 你说当Apache从/ home / USER读取一个文件时,用USER的UID运行,而不是“nobody”或“apache”? 这听起来不可思议。

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

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

现在,我们只是继续为每个项目使用一个用户,并且在需要时手动将所有内容一一给出。 这有点痛苦,但是有用。