我有一个运行 Apache 和 git 的 Ubuntu 服务器,我可以在服务器上本地克隆/推送存储库,但在尝试远程克隆/推送时收到 500 内部服务器错误。
例如 -
git clone https://<domain>/testrepo.git
如果使用 ssh,我还可以执行 git 操作 - 例如
git clone ssh://jason@<domain>:/home/jason/domains/<domain>/public_html/testrepo.git
我已经确认安装并启用了 apache mods,如
alias
和 cgi
,并测试了 cgi 以确认其有效。
已确认的开放端口(如 80 和 443)已在 Ubuntu 防火墙上开放。
默认的 apache 错误日志中没有错误 - 甚至还提高了日志级别进行调试,nada。
[更新]
在此处检查错误日志时:
/var/log/<domain>_error.log
我看到以下错误 -
Thu Aug 01 21:15:55.438216 2024] [cgi:error] [pid 7583] [client <ip>] AH01215: fatal: detected dubious ownership in repository at '/home/jason/domains/<domain>/public_html/testrepo.git': /usr/lib/git-core/git-http-backend
[Thu Aug 01 21:15:55.438441 2024] [cgi:error] [pid 7583] [client <ip>] AH01215: To add an exception for this directory, call:: /usr/lib/git-core/git-http-backend
[Thu Aug 01 21:15:55.438539 2024] [cgi:error] [pid 7583] [client <ip>] AH01215: : /usr/lib/git-core/git-http-backend
[Thu Aug 01 21:15:55.438690 2024] [cgi:error] [pid 7583] [client <ip>] AH01215: \tgit config --global --add safe.directory /home/jason/domains/<domain>/public_html/testrepo.git: /usr/lib/git-core/git-http-backend
我继续使用
git config --global --add safe.directory /home/jason/domains/<domain>/public_html/testrepo.git
将 repo 目录添加为安全目录
出于测试目的,我将 repo 文件夹的所有者更改为
www:data:www-data
,它工作得很好,这很好,但在我的情况下并不理想。我使用自己的用户名来管理服务器,当然具有 sudo 权限,并且该用户是 www-data
组的成员。所以理论上(对我来说)它应该有效。
但是可惜,还是没有运气。
GIT需要使用默认的Apache用户来运行吗?
服务器配置-
我当前的 apache 配置 -
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /home/jason/domains/<domain>/public_html
ServerName <domain>
ServerAlias <domain>
ErrorLog ${APACHE_LOG_DIR}/<domain>_error.log
CustomLog ${APACHE_LOG_DIR}/<domain>_access.log combined
# Directory settings for public_html
<Directory /home/jason/domains/<domain>/public_html>
Options +ExecCGI +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
# Git HTTP backend configuration
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
SetEnv GIT_PROJECT_ROOT /home/jason/domains/<domain>/public_html
SetEnv GIT_HTTP_EXPORT_ALL
<Directory /usr/lib/git-core>
Options +ExecCGI +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLCertificateFile /etc/letsencrypt/live/<domain>/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/<domain>/privkey.pem
</VirtualHost>
</IfModule>
我在这里缺少什么?
经过进一步的审查和调试,很明显,在存储库目录上设置权限以使用默认的 apache 用户
www-data
似乎是不更改运行 Apache 的用户的唯一解决方案。
正如我原始线程中的评论所述,考虑到我使用自己的用户 ID 作为我在 Apache 中执行的其他所有操作(如 php、python 或 NodeJS)的所有者/权限,我觉得这很奇怪。这是有效的,因为我的用户 ID 是
www-data
组的成员。所以我自然也不认为这对 git 来说是一个问题。