git trên HTTP với gitolite và nginx


10

Tôi đang cố gắng thiết lập một máy chủ nơi git repo của tôi có thể truy cập bằng HTTP (S).

Tôi đang sử dụng gitolite và nginx (và gitlab cho giao diện web nhưng tôi nghi ngờ nó có sự khác biệt nào).

Tôi đã tìm kiếm cả buổi chiều và tôi nghĩ rằng tôi bị mắc kẹt.

Tôi đã nghĩ rằng tôi đã hiểu rằng nginx cần fcgiwrap để làm việc với gitolite, vì vậy tôi đã thử một vài cấu hình, nhưng không ai trong số chúng hoạt động.

Kho của tôi là tại / home / git / kho.

Đây là ba cấu hình nginx tôi đã thử.

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

Kết quả:

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

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

Kết quả:

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

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

Kết quả:

> 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

> 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

Cũng lưu ý rằng với bất kỳ cấu hình nào trong số đó, khi tôi cố gắng sao chép tên dự án thực sự không tồn tại, tôi gặp lỗi 502.

Có ai đã thành công trong việc này? Tôi đang làm gì sai?

Cảm ơn.

CẬP NHẬT:

tập tin nhật ký lỗi nginx cho biết:

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"

Vì vậy, tôi đã thay đổi quyền cho /var/run/fcgiwrap.socket và bây giờ tôi có:

> 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

Đây là tập tin error.log tôi có bây giờ:

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"

Tôi tiếp tục điều tra.


Có người dùng, đang chạy tiến trình fastcgi, quyền vào thư mục /usr/lib/git-core/git/projectname.git/info?
Jan Marek

{ln -s / home / git / usr / lib / git-core / git} hoặc đặt {{root / home;}} -nhưng giây có thể là vấn đề bảo mật
fantastory

Câu trả lời:


1

Đây là những gì tôi đã đặt trong cấu hình Apache của mình (tôi biết: không phải nginx, nhưng vẫn có thể giúp bạn):

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"

(với @H@đường dẫn trong đó .gitolite.rcvà, trong trường hợp của tôi, các kho được lưu trữ)

Tôi không thấy GITOLITE_HTTP_HOMEGIT_HTTP_BACKENDđịnh nghĩa trong cấu hình của bạn.
Xem cấu hình đầy đủ ở đây .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.