处理PHP apache应用程序中的文件所有权问题

时间:2015-09-15 22:16:05

标签: php git apache ubuntu

环境:Linux

PHP应用程序以" www-data"

运行

/ var / www / html / app中的PHP文件由" ubuntu"拥有。源文件是从git存储库中提取的。 / var / www / html / app是本地git存储库(origin:bitbucket)

问题:我们的开发人员和Devops希望提取最新的资源(经常),并希望通过网络启动(而不是putty - >并运行git pull命令)。

但是,由于PHP文件以" www-data"它不能运行git pull(因为文件归" ubuntu"所有)。

我对两种选择都不满意:

  • 由于明显的安全问题,将Apache服务器作为" ubuntu"运行。
  • git存储库文件为" www-data",因为它使开发人员登录服务器并直接编辑文件非常不方便。

处理这种情况的最佳做法是什么?我确信这对许多设置来说都是一个常见问题。

现在,我们有一种机制,让Devops从Web触发git pull请求(其中一个PHP作业 - 运行为" www-data"创建一个临时文件)。而作为" ubuntu"运行的Cron作业读取临时文件触发器,然后发出" git pull"命令。在触发器和实际的git pull之间存在时滞,现在这是一个轻微的刺激。我正在设置docker容器,并且需要更新repo,在同一主机中的多个容器上运行。我想借此机会以更好的方式解决这个问题,并寻求有关此问题的建议。

1 个答案:

答案 0 :(得分:0)

我们使用Rocketeer和要部署的组。 Rocketeer将用户设置部署到部署用户(在您的情况下为 ubuntu )并对其进行读/写权限,以及具有读/执行权限的 www-data 组。然后,作为最后一步,它修改了Web可写文​​件夹的权限,以便php可以写入它们。

Rocketeer通过ssh执行,因此可以从任何地方触发,只要它可以连接到服务器(公钥帮助)。您可以设置持续集成/自动部署,以便在更新分支/测试通过时自动触发部署。

在任何情况下,文件由一个可以修改它们的用户拥有并且Web组可以读取文件的内容应解决主要问题。

如果您计划使用docker,最简单的方法是为每个可以分发给主机的构建生成一个新的docker镜像。 docker构建过程只会在创建时提取最新的更改,而不会自行更新。如果需要部署新版本,则会创建并分发具有最新代码的新不可变图像。