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

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

问题描述:

我们使用vlad部署者将rails应用程序部署到生产和测试服务器。我们所有的服务器是Ubuntu服务器。vlad部署者 - 与不同的用户部署?

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

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

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

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

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

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

+2

无用注意:Vlad Deployer可能是史上最令人敬畏的SW产品名称。 – 2010-07-16 14:59:38

+0

我同意。令人遗憾的是它是红宝石 – 2010-07-16 15:16:20

我一直在用它现在的战斗了几个月,我已经只发现一对夫妇的方式做到这一点:

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

现在,我们只是继续为每个项目使用一个用户,并在需要时手动对所有内容进行chown。这有点痛苦,但它有效。

为什么不让所有文件都公开可读?在每个用户的〜/ .bashrc中放线

的umaskö= R

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

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

+0

出于几个原因,Apache不仅需要阅读,而且要“拥有”文件:写日志,临时文件等只有在这种情况下才能正常工作。因此,您每次发布文件时都要制作一个chown,或者在所有更新程序*享一个普通用户。 – kikito 2010-08-18 06:29:57

+0

如果说Apache需要“写”文件,而不是“拥有”,那将更准确。完全没有理由Apache需要拥有文件或目录来执行任何这些操作:写入日志,临时文件等。它只需要写入权限,您可以使用 umask g = w 然后编辑/ etc/group创建一个包含apache和所有用户的组,然后在/ etc/passwd中将此组设置为它们的默认组。或者,如果你真的是懒惰/傲慢,忘记团体,并做 umask o = w – 2010-08-18 20:05:17

+0

你是对的。有一些失败的东西 - vlad:update开始进行svn更新 - 这实际上是失败的顺序。 SVN会感到困惑 - “约翰做了这个svn仓库,现在彼得正试图更新它?>>失败”。 – kikito 2010-08-19 10:16:50

我会用组权限来做到这一点。

具有Web根目录是/ var/WWW /您的应用程序内/电流

在/ var/WWW /您的应用程序内/应该是所有做展开时的人属于该组的组可写。

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

在/ var/WWW /您的应用程序内/电流是一个符号,而当你已经成功复制所有文件到新的目录更新符号链接的目标,使之指向您创建的目录。

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

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

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