Linux vlad部署者-使用不同的用户部署?

Linux vlad部署者-使用不同的用户部署?,linux,file-permissions,vlad-deployer,Linux,File Permissions,Vlad Deployer,我们使用vlad部署器将rails应用程序部署到生产和测试服务器。我们所有的服务器都是Ubuntu服务器 我们有一个与linux权限相关的问题 Vlad使用ssh将文件放在任何服务器上,无论是生产服务器还是测试服务器。我的公司有几个人,每个人在每个服务器上都有一个不同的帐户 另一方面,按照Apache服务器的配置方式,它使用网站目录的“所有者”来读取该目录上的文件 因此,进行第一次部署的用户成为站点的“所有者”;其他用户无法进行部署-Apache将无法读取修改后的文件,因为所有者已更改 通常这不

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

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

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

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

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

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


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

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

乌马斯克o=r


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

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

  • 为部署到服务器的所有用户使用单个共享帐户(boo!)
  • 使用不同的帐户,但在执行与帐户相关的任务(如svn更新)之前,先创建一个公共用户帐户(www数据、rails或类似帐户)。这可能有用,但我还没有测试过
  • 使用。有人暗示我,这可能是正确的解决方案。然而,我没有足够的知识和时间来让它正常工作

现在,我们只是继续使用每个项目一个用户,并在需要时手动浏览所有内容。这有点痛苦,但它可以工作。

我会使用组权限来完成

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

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

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

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

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

这也使得部署原子化,所以如果在部署的中间丢失网络连接,没有任何东西会被破坏。


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

无用注意:Vlad the Deployer可能是有史以来最棒的软件产品名称。我同意。遗憾的是,Apache不仅需要读取文件,而且还需要“拥有”文件,这有几个原因:只有在这种情况下,才能写入日志、临时文件等。因此,您可以在每次发布文件时都进行更改,或者在所有更新程序中共享一个公共用户。更准确的说法是,Apache需要“编写”文件,而不是“拥有”文件。Apache完全没有理由需要拥有一个文件或目录来执行这些操作:写入日志、临时文件等。它只需要写入权限,您可以使用umask g=w完成写入权限,然后编辑/etc/group来创建一个包含Apache和所有用户的组,然后在/etc/passwd中将此组作为默认组。或者,如果你真的很懒/傲慢,忘记团队,做你是对的。不过,有些东西失败了-vlad:update开始进行svn更新-这实际上是失败的顺序。SVN感到困惑-“john创建了此SVN存储库,现在peter正在尝试更新它?>>失败”。也许您可以使用选项“SVN--username john”来修复此问题,并提供适当的凭据(密码和/或SSH密钥)。或者将svn服务器配置为向所有用户授予写入权限。