Git auf HTTP mit Gitolit und Nginx

10

Ich versuche, einen Server einzurichten, auf den mein Git-Repo mit HTTP (S) zugreifen kann.

Ich verwende Gitolite und Nginx (und Gitlab für das Webinterface, aber ich bezweifle, dass es einen Unterschied macht).

Ich habe den ganzen Nachmittag gesucht und glaube, ich stecke fest.

Ich glaube, ich habe verstanden, dass Nginx fcgiwrap benötigt, um mit Gitolite zu arbeiten, also habe ich verschiedene Konfigurationen ausprobiert, aber keine davon funktioniert.

Meine Repositories befinden sich unter / home / git / repositories.

Hier sind die drei Nginx-Konfigurationen, die ich ausprobiert habe.

1:

   location ~ /git(/.*) {
       gzip off;
       root /usr/lib/git-core;

       fastcgi_pass  unix:/var/run/fcgiwrap.socket;
       include /etc/nginx/fcgiwrap.conf;

       fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
       fastcgi_param DOCUMENT_ROOT /usr/lib/git-core/;
       fastcgi_param SCRIPT_NAME git-http-backend;

       fastcgi_param GIT_HTTP_EXPORT_ALL "";
       fastcgi_param GIT_PROJECT_ROOT /home/git/repositories;
       fastcgi_param PATH_INFO $1;
       #fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
    }

Ergebnis:

> git clone http://myservername/projectname.git test/
Cloning into test...
fatal: http://myservername/projectname.git/info/refs not found: did you run git update-server-info on the server?

und

> git clone http://myservername/git/projectname.git test/
Cloning into test...
error: The requested URL returned error: 502 while accessing http://myservername/git/projectname.git/info/refs
fatal: HTTP request failed

2:

   location ~ /git(/.*) {
        fastcgi_pass  localhost:9001;
        include       /etc/nginx/fcgiwrap.conf;
        fastcgi_param SCRIPT_FILENAME     /usr/lib/git-core/git-http-backend;
        fastcgi_param GIT_HTTP_EXPORT_ALL "";
        fastcgi_param GIT_PROJECT_ROOT    /home/git/repositories;
        fastcgi_param PATH_INFO           $1;
    }

Ergebnis:

> git clone http://myservername/projectname.git test/
Cloning into test...
fatal: http://myservername/projectname.git/info/refs not found: did you run git update-server-info on the server?

und

> git clone http://myservername/git/projectname.git test/
Cloning into test...
error: The requested URL returned error: 502 while accessing http://myservername/git/projectname.git/info/refs
fatal: HTTP request failed

3:

location ~ ^.*\.git/objects/([0-9a-f]+/[0-9a-f]+|pack/pack-[0-9a-f]+.(pack|idx))$ {
    root /home/git/repositories/;
  }

  location ~ ^.*\.git/(HEAD|info/refs|objects/info/.*|git-(upload|receive)-pack)$ {
    root /home/git/repositories;

    fastcgi_pass unix:/var/run/fcgiwrap.socket;
    fastcgi_param SCRIPT_FILENAME   /usr/lib/git-core/git-http-backend;
    fastcgi_param PATH_INFO         $uri;
    fastcgi_param GIT_PROJECT_ROOT  /home/git/repositories;  
    include /etc/nginx/fcgiwrap.conf;
  }

Ergebnis:

> git clone http://myservername/projectname.git test/
Cloning into test...
error: The requested URL returned error: 502 while accessing http://myservername/projectname.git/info/refs
fatal: HTTP request failed

und

> git clone http://myservername/git/projectname.git test/
Cloning into test...
error: The requested URL returned error: 502 while accessing http://myservername/git/projectname.git/info/refs
fatal: HTTP request failed

Beachten Sie auch, dass bei einer dieser Konfigurationen beim Versuch, mit einem Projektnamen zu klonen, der tatsächlich nicht vorhanden ist, ein 502-Fehler angezeigt wird.

Ist das schon jemandem gelungen? Was mache ich falsch?

Vielen Dank.

AKTUALISIEREN:

Nginx-Fehlerprotokolldatei sagte:

2012/04/05 17:34:50 [crit] 21335#0: *50 connect() to unix:/var/run/fcgiwrap.socket failed (13: Permission denied) while connecting to upstream, client: 192.168.12.201, server: myservername, request: "GET /git/oct_editor.git/info/refs HTTP/1.1", upstream: "fastcgi://unix:/var/run/fcgiwrap.socket:", host: "myservername"

Also habe ich die Berechtigungen für /var/run/fcgiwrap.socket geändert und jetzt habe ich:

> git clone http://myservername/git/projectname.git test/
Cloning into test...
error: The requested URL returned error: 403 while accessing     http://myservername/git/projectname.git/info/refs
fatal: HTTP request failed

Hier ist die error.log-Datei, die ich jetzt habe:

2012/04/05 17:36:52 [error] 21335#0: *78 FastCGI sent in stderr: "Cannot chdir to script directory (/usr/lib/git-core/git/projectname.git/info)" while reading response header from upstream, client: 192.168.12.201, server: myservername, request: "GET /git/projectname.git/info/refs HTTP/1.1", upstream: "fastcgi://unix:/var/run/fcgiwrap.socket:", host: "myservername"

Ich recherchiere weiter.

Arnaud
quelle
Haben Benutzer, unter denen der Fastcgi-Prozess ausgeführt wird, Rechte zum Eingeben des Verzeichnisses /usr/lib/git-core/git/projectname.git/info?
Jan Marek
{ln -s / home / git / usr / lib / git-core / git} oder set {{root / home;}} - aber die zweite könnte ein Sicherheitsproblem sein
fantastisch

Antworten:

1

Folgendes habe ich in meiner Apache-Konfiguration festgelegt (ich weiß: nicht nginx, kann Ihnen aber trotzdem helfen):

SetEnv GIT_PROJECT_ROOT @H@/repositories
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv GITOLITE_HTTP_HOME @H@
ScriptAlias /hgit/ @H@/gitolite/bin/gl-auth-command/
SetEnv GIT_HTTP_BACKEND "@H@/usr/local/apps/git/libexec/git-core/git-http-backend"

(mit @H@dem Pfad .gitolite.rc, in dem und in meinem Fall die Repositorys gespeichert sind)

Ich sehe GITOLITE_HTTP_HOMEund GIT_HTTP_BACKENDdefiniert nicht in Ihrer Konfiguration.
Die vollständige Konfiguration finden Sie hier .

VonC
quelle