GitSmartHTTP для репозиториев Gitolite через Apache не позволяет мне подтолкнуть
Я настраиваю CGI-скрипт git-http-backend для обработки моего git.domain
поддомен. Сервер находится за ELB (эластичным балансировщиком нагрузки) в облаке AWS. Мой серверный конфиг выглядит следующим образом (мой git-хостинг обрабатывается gitolite):
<VirtualHost *:80>
ServerName git.domain
ServerAdmin hjpotter92+git@domain
#SuexecUserGroup git git
DocumentRoot /opt/gitolite/repositories/
PerlLoadModule Apache::Authn::Redmine
SetEnv GIT_PROJECT_ROOT /opt/gitolite/repositories/
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER # Have also tried removing this variable
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAliasMatch \
"(?x)^/(.*/(HEAD | \
info/refs | \
objects/(info/[^/]+ | \
[0-9a-f]{2}/[0-9a-f]{38} | \
pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
git-(upload|receive)-pack))$" \
/opt/gitolite/git-core/git-http-backend/$1
<Directory "/opt/gitolite/git-core">
AllowOverride None
Options +ExecCGI -Includes
Require all granted
</Directory>
<Location />
# enabled in desparation...
# saw it somewhere in bugzilla powered mailing list
DAV On
Order allow,deny
Require all granted
AuthType Basic
AuthName "Git Repositories"
AuthUserFile /dev/null
Require valid-user
PerlAccessHandler Apache::Authn::Redmine::access_handler
PerlAuthenHandler Apache::Authn::Redmine::authen_handler
RedmineDSN "DBI:mysql:database=redmine;host=endpoint.rds.amazonaws.com"
RedmineDbUser "user"
RedmineDbPass "your"
RedmineGitSmartHttp yes
</Location>
LogLevel info
CustomLog /var/log/apache2/gitolite.access.log combined
ErrorLog /var/log/apache2/gitolite.error.log
</VirtualHost>
Мой сервер Apache управляется www-data:www-data
пользователь / группа, и Gitolite настраивается с помощью git:git
группа пользователей. Чтобы Apache мог читать / писать в репозитории, я сделал:
# usermod -a -G git www-data
// and as a desparate measure, in frustration, the following:
# usermod -a -G www-data git
PerlAccessHandler
и аутентификация пользователя работает отлично, потому что я могу клонировать свои репозитории, используя действительный набор учетных данных из установки redmine.
Тем не менее, когда я пытаюсь нажать; Я получаю следующее в журналах сервера:
10.0.225.176 [11/Feb/2017:07:46:26 +0530] "GET /xxx.git/info/refs?service=git-upload-pack HTTP/1.1" 401 726 "-" "git/2.11.0"
10.0.225.176 [11/Feb/2017:07:46:27 +0530] "GET /xxx.git/info/refs?service=git-upload-pack HTTP/1.1" 401 725 "-" "git/2.11.0"
10.0.225.176 [11/Feb/2017:07:46:27 +0530] "GET /xxx.git/info/refs?service=git-upload-pack HTTP/1.1" 200 848 "-" "git/2.11.0"
10.0.225.176 [11/Feb/2017:07:46:27 +0530] "POST /xxx.git/git-upload-pack HTTP/1.1" 200 130408 "-" "git/2.11.0"
и на стороне клиента (после установленного тайм-аута соединения, установленного в моем балансировщике нагрузки, появляется следующее: от 30 секунд до 10 минут):
Counting objects: 2, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 930 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
error: RPC failed; HTTP 504 curl 22 The requested URL returned error: 504 GATEWAY_TIMEOUT
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
Чаще всего у меня тоже есть POST
в git-upload-pack
длины 0 (для одной и той же команды одного и того же хранилища с тем же коммитом)
10.0.225.222 [11/Feb/2017:07:50:55 +0530] "POST /pandorica.git/git-receive-pack HTTP/1.1" 200 0 "-" "git/2.11.0"
10.0.225.222 [11/Feb/2017:07:53:21 +0530] "POST /pandorica.git/git-receive-pack HTTP/1.1" 200 0 "-" "git/2.11.0"
и получить следующее в журналах ошибок моего сервера:
[core:error] [pid 1683] (70007)The timeout specified has expired: [client 10.0.225.176:2534] AH00574: ap_content_length_filter: apr_bucket_read() failed
[cgid:error] [pid 1683] (70007)The timeout specified has expired: [client 10.0.225.176:2534] AH02550: Failed to flush CGI output to client
Я даже играл с setuid и setuid для пользователя git, надеясь, что это может помочь мне перейти в хранилище; но безрезультатно!
chmod u+s /opt/gitolite/repositories
chmod g+s /opt/gitolite/repositories
// and the same commands for `*.git` inside `repositories`
Конфиг git изнутри /opt/gitolite/repositories/xyz.git/
:
http.postbuffer=200M
core.repositoryformatversion=0
core.filemode=true
core.bare=true
redminegitolite.projectid=xxx
http.receivepack=true
http.uploadpack=true
Что касается ссылок, я уже прошел через каждый из следующих:
- ГИТ-HTTP-бэкенд
- Apache и git-http-backend
- Как настроить git через http?
- Настройка git-http-backend с помощью Apache 2.4
- Настройка Git Server в Windows С помощью git-http-backend.exe
Как настроить Apache VHost таким образом, чтобы он начал принимать git push
,
1 ответ
Мне понадобилось время. В моем случае это были разрешения. Я настроил процесс докера для запуска контейнеров без полномочий root. --userns-переназначить
я имею
#/etc/subuid
docker-user:100000:65536
#/etc/subgid
docker-runner:100000:65536
#/etc/passwd
docker-user:x:90:90::/home/docker-user:/sbin/nologin
dockremap:x:220:220::/home/dockremap:/bin/false
docker-root:x:100000:2::/home/docker-root:/sbin/nologin
docker-daemon:x:100001:2::/home/docker-daemon:/sbin/nologin
Просто используйте эту команду:
setfacl -RL -m g:100000:rwx -m g:100002:rwx /var/git