git on HTTP with gitolite and nginx

6,153

Here is what I set in my Apache config (I know: not nginx, but still can help you):

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"

(with @H@ the path where .gitolite.rc and, in my case, the repositories are stored)

I don't see GITOLITE_HTTP_HOME and GIT_HTTP_BACKEND defined in your config.
See the full config here.

Share:
6,153

Related videos on Youtube

Arnaud
Author by

Arnaud

Updated on September 18, 2022

Comments

  • Arnaud
    Arnaud over 1 year

    I am trying to setup a server where my git repo would be accessible with HTTP(S).

    I am using gitolite and nginx (and gitlab for web interface but I doubt it makes any difference).

    I have searched the whole afternoon and I think I'm stuck.

    I have think I have understood that nginx needs fcgiwrap to work with gitolite, so I tried several configurations, but none of them work.

    My repositories are at /home/git/repositories.

    Here's the three nginx configurations I have tried.

    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;
        }
    

    Result:

    > 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?
    

    and

    > 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;
        }
    

    Result:

    > 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?
    

    and

    > 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;
      }
    

    Result:

    > 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
    

    and

    > 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
    

    Also note that with any of those configurations, when I try to clone with a project name that actually doesn't exist, I get a 502 error.

    Does anyone already succeeded in doing this? What am I doing wrong?

    Thanks.

    UPDATE:

    nginx error log file said:

    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"
    

    So I changed permissions for /var/run/fcgiwrap.socket, and now I have :

    > 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
    

    Here is the error.log file I have now:

    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"
    

    I keep on investigating.

    • Jan Marek
      Jan Marek almost 12 years
      Have user, under is running fastcgi process, rights to enter directory /usr/lib/git-core/git/projectname.git/info?
    • Fantastory
      Fantastory over 9 years
      {ln -s /home/git /usr/lib/git-core/git} or set {{root /home;}} -but second could be security problem