我有一个Apache服务器,将承载几个网站和一个私人的networking接口,旨在自动从一个git的SSHurl部署网站。 那些git repos在同一台机器上,由本地Gitlab实例持有,并由root拥有,所以需要SSH(或者我缺less一些东西)。
因此,我们将PHP运行的shell命令作为www-data从同一台计算机上的根受保护仓库克隆可公开访问的网站。
如果重要的话, mod_vhost_alias
使用mod_vhost_alias
进行pipe理。 我也知道cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
。
但是为www数据生成ssh密钥似乎不是一个好主意。
如果我为此创build专门的“web”用户并为其生成ssh密钥,那么www-data无法在该目录中克隆。 我可以在文件夹上使用ACL,但是仍然没有得到它的ssh访问权限。
或者,也许我应该先用PHP的su web
? 在这种情况下,文件不会被www-data所拥有,这可能导致网站无法工作。
这就到了我失去了什么是好的,什么是安全的地步。 我终于可以find一个工作解决scheme,但它不会干净,可能不会安全。
附加信息 :
这不是一个生产服务器。 所有的网站(一次10个左右)的stream量将非常有限,无论如何,我们大部分网站都会受到密码保护(我上面提到“可公开访问”以涵盖最极端的情况)。
开发是在本地环境中进行的,使用git挂钩将更改推送到在线版本。
只有一个Web界面可以启动部署过程。 只有less数信任的用户可以访问它。
部署将不会更改Apacheconfiguration,因为mod_vhost_alias
将处理虚拟主机,不需要其他任何东西。
所有的网站将有一个公共文件夹,其余的文件将无法访问。 部署脚本在部署时已经写好,可以轻松用于此目的。
中期部署问题不需要解决。
不要混合开发和生产。 理想情况下,生产服务器不包含VCS – 或任何其他开发工具链的痕迹。 由于您现在正在努力部署的自动化,请在您处于分立状态时加大分隔。
除此之外:单独的权限单独的任务。 pipe理界面请求部署。 Web服务器提供大多数不可变的文件。 部署脚本写入文件。
我如何在一个明显相似的设置中完成它:一个脚本,由用户deploy
(组www-data
)拥有和cron执行。 用户deploy
有一个只读帐户的SSH密钥的git服务器(在你的情况下,通过gitlabpipe理)。 脚本获取已标记和部署的存储库名称,如下所示: