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

在PHP apache应用程序中处理文件所有权问题,php,git,apache,ubuntu,Php,Git,Apache,Ubuntu,Env:Linux PHP应用程序作为“www数据”运行 “ubuntu”拥有的/var/www/html/app中的PHP文件。源文件从git存储库中提取/var/www/html/app是本地git存储库(来源:bitbucket) 问题:我们的开发人员和Devops希望(经常)获取最新的源代码,并希望通过web启动(而不是putty->和运行git pull命令) 但是,由于PHP文件以“www数据”的形式运行,因此它不能运行git pull(因为这些文件属于“ubuntu”) 我对这两种

Env:Linux

PHP应用程序作为“www数据”运行

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

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

但是,由于PHP文件以“www数据”的形式运行,因此它不能运行git pull(因为这些文件属于“ubuntu”)

我对这两种选择都不满意:

  • 由于明显的安全问题,以“ubuntu”的形式运行Apache服务器
  • git存储库文件应该是“www数据”,因为这使得开发人员登录服务器并直接编辑文件非常不方便
处理这种情况的最佳做法是什么?我确信这对于许多设置来说都是一个常见的问题

现在,我们有一种机制,Devops在其中触发来自web的git pull请求(其中作为“www数据”运行的PHP作业创建一个临时文件)。一个以“ubuntu”运行的Cron作业读取临时文件触发器,然后发出“git pull”命令。在触发和实际git拉动之间有一个时间差,这是一个轻微的刺激。我正在设置docker容器,并且需要更新repo,在同一主机内的多个容器上运行。我想利用这个机会以更好的方式解决这个问题,并寻求有关建议。

我们使用和部署组。Rocketeer部署时,用户设置为部署用户(在您的例子中为ubuntu)并具有读/写权限,www数据组具有读/执行权限。然后,作为最后一步,它修改web可写文件夹上的权限,以便php可以对其进行写入

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

在任何情况下,如果文件由一个用户拥有,该用户可以修改这些文件,并且web组可以读取这些文件,则应该解决主要问题


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

您可以使用组解决此问题吗?@kvoth:使用组是个好主意。需要探讨的几点:1)由于git pull,新文件的文件所有权将是www数据2)可能需要设置umask(git pull之前)使文件组可写3)开发人员是否应在添加新文件之前设置文件权限,以及在Windows用户添加时这将如何工作。。将选中添加ubuntu用户到www数据组,使webroot chgrp-R www数据和chmod g+s www数据正确拥有所有新文件。旁白:考虑织物这样简单的部署问题。它将使用SSH,但与“fab webservers pull”一样简单。一旦我这样做了:我保留所有权“www数据”,每当我想要直接快速(肮脏)修改文件时,我就直接在bitbucket上进行修改,并触发pull。您可以使用分支来分隔事物。这不是一个完美的解决方案,但对我来说很有效。@markdwhite:SSH的想法很好。我可以这样走,设置组权限,甚至考虑穆萨的建议。我将很快更新我如何处理这件事。