1

我一直将http://toroid.org/ams/git-website-howto作为在托管 VPS 上运行的生产 Web 服务器的起点。VPS 运行 cPanel 和 WHM,它最终将托管多个客户端网站,每个网站都有自己的 cPanel 帐户(因此,每个网站都有自己的 Linux 用户和提供站点的主目录)。每个客户的站点都是一个单独的 Git 存储库。

目前,我正在通过 SSH 将每个存储库推送到客户端主文件夹中的裸存储库,例如/home/username/git/repository.git/. 根据上面的教程,每个 repo 都被配置为通过 post-receive 挂钩检出到另一个目录。在这种情况下,每个 repo 都签出自己/home/username/public_html的文件(新 cPanel 帐户的默认 DocumentRoot),然后由 Apache 提供文件。虽然这可行,但它需要我设置(在我的本地开发环境中)我的遥控器,如下所示:

url = ssh://username@example.com/home/username/git/repository.git/

它还要求我每次推送时都输入用户密码,这不太理想。

为了将我的所有存储库集中在一个文件夹中,我还尝试以/root/git/repository.gitroot 身份推送,然后从那里签出到适当的主目录。但是,这会导致所有签出的文件都归 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

(据我所知,这是一个文件所有权/权限问题)

我可以在每个 repo 的 post-receive 钩子中使用 chown 和 chgrp 命令来解决这个问题——但是,这也会在我的脑海中引发“不太正确”的标志。我也考虑过 gitosis(将我的所有 repos 集中在 中/home/git/),但我假设我会遇到相同的文件所有权问题,因为签出的文件将归 git 用户所有。

我只是以错误的方式处理这整个事情吗?我觉得我完全错过了对整个问题的第三种更优雅的解决方案。还是我应该坚持我上面描述的一种方法?

4

1 回答 1

1

而且每次推送都需要我输入用户密码,不太理想

如果您将公共 ssh 密钥发布到目标帐户“ .ssh/authorized_keys”文件,则不需要。

例如,另请参阅锁定 ssh 授权密钥
也是官方参考的Pro Git Book “Setting Up the Server”

于 2010-09-14T05:37:37.453 回答