Я сделал пользователя git
и поместил пустой пустой репозиторий в свой домашний каталог /home/git
:
$ git init --bare test.git
$ ls -l
drwxr-xr-x 7 git git 4.0K Jul 18 12:51 test.git
Я хочу, чтобы этот репозиторий был доступен как example.com/repos/test.git
.
Для этого у меня есть следующие nginx
конфигурация:
location ~ /repos(/.*) {
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
fastcgi_param GIT_HTTP_EXPORT_ALL "";
fastcgi_param GIT_PROJECT_ROOT /home/git;
fastcgi_param PATH_INFO $1;
}
Однако попытка клонировать репозиторий не удалась:
$ git clone https://example.com/repos/test.git
Cloning into 'test'...
remote: 403 Forbidden
fatal: unable to access 'https://example.com/repos/test.git/':
The requested URL returned error: 403
Между тем, nginx
было это сказать в своем access.log
:
"GET /repos/test/info/refs?service=git-upload-pack HTTP/1.1"
403 25 "-" "git/2.4.5"
Что я делаю не так?
Спасибо за любую помощь.
...
После многих часов выдергивания волос уловка состояла в том, чтобы изменить порядок nginx
конфигурация.
Кроме того, чтобы включить пуш, мне пришлось добавить несколько basic-auth
директивы.
location ~ /repos(/.*) {
auth_basic "access denied";
auth_basic_user_file /path/to/your/htpasswd;
client_max_body_size 0;
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
include fastcgi_params;
fastcgi_param GIT_HTTP_EXPORT_ALL "";
fastcgi_param GIT_PROJECT_ROOT /home/git;
fastcgi_param PATH_INFO $1;
fastcgi_param REMOTE_USER $remote_user;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
Для любого бедняги, просматривающего это, чтобы найти ответ на свою проблему, если после всего этого вы получите ошибку «недостаточно прав для бла-бла», исправьте права доступа к хранилищу вот так.