【问题标题】:vlad the deployer - deploying with different users?vlad 部署者 - 与不同的用户一起部署?
【发布时间】:2011-03-16 23:39:49
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 无用说明:Vlad the Deployer 可能是有史以来最棒的软件产品名称。
  • 我同意。可惜是红宝石

标签: linux file-permissions vlad-deployer


【解决方案1】:

我会用组权限来做。

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

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

设置部署脚本,以便它们写入名为 /var/www/your-app/>timestamp

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

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

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

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

【讨论】:

    【解决方案2】:

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

    umask o=r

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

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

    【讨论】:

    • 出于多种原因,Apache 不仅需要读取文件,还需要“拥有”文件:写入日志、临时文件等只有在这种情况下才有效。因此,您要么在每次发布文件时创建一个 chown,要么在所有更新者之间共享一个共同用户。
    • 更准确的说法是 Apache 需要“写入”文件,而不是“拥有”文件。 Apache 绝对没有理由需要拥有一个文件或目录来执行任何这些操作:写入日志、临时文件等。它只需要写入权限,您可以使用 umask g=w 完成然后编辑 /etc/group创建一个包含 apache 和所有用户的组,然后在 /etc/passwd 中将此组设为他们的默认组。或者,如果您真的很懒惰/骑士,请忘记组并执行 umask o=w
    • 你是对的。但是,有些事情失败了 - vlad:update 开始进行 svn 更新 - 这实际上是失败的顺序。 SVN 感到困惑 - “john 制作了这个 svn 存储库,现在 peter 正在尝试更新它?>> 失败”。
    • 也许您可以通过选项“svn --username john”提供适当的凭据(密码和/或 SSH 密钥)来解决此问题。或者配置 svn 服务器给所有用户写权限。
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      相关资源
      最近更新 更多