Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
构建一个中心Git remote以服务于Apache生产站点_Apache_Git_File Permissions_Cpanel_Whm - Fatal编程技术网

构建一个中心Git remote以服务于Apache生产站点

构建一个中心Git remote以服务于Apache生产站点,apache,git,file-permissions,cpanel,whm,Apache,Git,File Permissions,Cpanel,Whm,我一直将其作为在托管VPS上运行的生产web服务器的起点。VPS运行cPanel和WHM,它最终将托管多个客户端网站,每个网站都有自己的cPanel帐户(因此,每个网站都有自己的Linux用户和主目录,从中为网站提供服务)。每个客户端的站点都是一个独立的Git存储库 目前,我正在通过SSH将每个存储库推送到客户机主文件夹中的裸repo,例如/home/username/git/repository.git/。根据上面的教程,每个repo都配置为通过post-receive钩子签出到另一个目录。在

我一直将其作为在托管VPS上运行的生产web服务器的起点。VPS运行cPanel和WHM,它最终将托管多个客户端网站,每个网站都有自己的cPanel帐户(因此,每个网站都有自己的Linux用户和主目录,从中为网站提供服务)。每个客户端的站点都是一个独立的Git存储库

目前,我正在通过SSH将每个存储库推送到客户机主文件夹中的裸repo,例如
/home/username/git/repository.git/
。根据上面的教程,每个repo都配置为通过post-receive钩子签出到另一个目录。在这种情况下,每个回购协议都签出到自己的
/home/username/public_html
(新cPanel帐户的默认DocumentRoot),文件随后由Apache提供服务。虽然这是可行的,但它要求我(在本地开发环境中)像这样设置远程设备:

url = ssh://username@example.com/home/username/git/repository.git/
它还要求我在每次按下时输入用户的密码,这并不理想

为了将我的所有存储库集中在一个文件夹中,我还尝试将
/root/git/repository.git
作为root用户,然后从那里签出到相应的主目录。但是,这会导致所有签出的文件都归root所有,从而阻止Apache为站点提供服务,并出现如下错误

[error] [client xx.xx.xx.xx] SoftException in Application.cpp:357: UID of script "/home/username/public_html/index.php" is smaller than min_uid
(据我所知,这是一个文件所有权/权限问题)

我可以解决每个回购协议的post-receive钩子中的chown和chgrp命令的问题,但是,这也在我脑海中升起了“不太正确”的旗号。我也考虑过gitosis(将我所有的回购集中在
/home/git/
),但我假设我遇到了同样的文件所有权问题,因为签出的文件将由git用户拥有

我只是用错误的方式来处理这件事吗?我觉得我完全错过了第三个更优雅的解决方案。或者我应该坚持我上面描述的方法之一

它还要求我在每次按下时输入用户的密码,这并不理想

如果您将公共ssh密钥发布到Destination帐户“
.ssh/authorized_keys
”文件,则不必这样做

另请参见示例。
也是官方的参考

它还要求我在每次按下时输入用户的密码,这并不理想

如果您将公共ssh密钥发布到Destination帐户“
.ssh/authorized_keys
”文件,则不必这样做

另请参见示例。

但也是官方参考。

谢谢!这肯定会有帮助。然而,我最初的问题中有一个问题仍然存在:我应该将我的存储库集中在服务器上的一个地方吗?或者为每个单独的存储库登录到一个单独的帐户有意义吗?@peterjmag:如果您采用类似gitolite的策略,您只需要将每个用户的SSH公钥发布到管理Git repo的一个中央帐户。有关更多详细信息,请参阅Gitolite文档:谢谢!这肯定会有帮助。然而,我最初的问题中有一个问题仍然存在:我应该将我的存储库集中在服务器上的一个地方吗?或者为每个单独的存储库登录到一个单独的帐户有意义吗?@peterjmag:如果您采用类似gitolite的策略,您只需要将每个用户的SSH公钥发布到管理Git repo的一个中央帐户。有关更多详细信息,请参阅Gitolite文档: