我们使用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”? 这听起来不可思议。
我已经与它斗争了几个月,我只找到了一些方法来做到这一点:
现在,我们只是继续为每个项目使用一个用户,并且在需要时手动将所有内容一一给出。 这有点痛苦,但是有用。