代码之家  ›  专栏  ›  技术社区  ›  kikito

VLAD部署者-部署不同的用户?

  •  2
  • kikito  · 技术社区  · 15 年前

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

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

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

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

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

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

    理想情况下,我需要一个VLAD任务,该任务对部署的文件的权限做些什么,以便其他用户可以完全修改它们。我对unix命令的了解不够,无法做到这一点。

    3 回复  |  直到 7 年前
        1
  •  2
  •   Alexander Kjäll    14 年前

    我会用组权限来完成。

    让web根目录是/var/www/your app/current

    /var/www/your app/应该可以由执行部署的所有人员所属的组写入组。

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

    /var/www/your app/current是一个symlink,当您成功地将所有文件复制到新目录时,您将更新symlink的目标,以便它指向您创建的目录。

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

    这也使部署成为原子的,因此,如果在部署过程中丢失网络连接,则不会发生任何中断。

    因为您不会删除旧目录,所以如果您设法引入一些bug,您可以轻松地回滚到“最后一个良好”状态。

        2
  •  1
  •   Modern Hacker    14 年前

    你为什么不把所有的文件都公开读?在每个用户的~/.bashrc中

    乌萨克O=R

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

    顺便问一句,我从来没有听说过这样的Apache选项;你是说当Apache从/home/user读取一个文件时,它使用的是user的uid,而不是“nobody”或“apache”?听起来很奇怪。

        3
  •  0
  •   kikito    14 年前

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

    • 为部署到服务器的所有用户使用一个共享帐户(boo!)
    • 使用不同的帐户,但在执行与帐户相关的任务(如SVN更新)之前,先对公用用户帐户(WWW数据、Rails或类似帐户)进行更改。这个 可以 工作,但我还没有测试过。
    • 使用 access control lists . 有人暗示我这可能是正确的解决办法。但是,我没有足够的知识和时间来让这项工作正常进行。

    现在,我们只需要继续为每个项目使用一个用户,并在需要时手动改变所有内容。这有点疼,但很管用。