git บน HTTP ด้วย gitolite และ nginx


10

ฉันกำลังพยายามติดตั้งเซิร์ฟเวอร์ที่ repo git ของฉันสามารถเข้าถึงได้ด้วย HTTP (S)

ฉันใช้ gitolite และ nginx (และ gitlab สำหรับเว็บอินเตอร์เฟส แต่ฉันสงสัยว่ามันสร้างความแตกต่าง)

ฉันค้นหาตลอดบ่ายและฉันคิดว่าฉันติดอยู่

ฉันคิดว่าฉันเข้าใจแล้วว่า nginx ต้องการ fcgiwrap เพื่อทำงานกับ gitolite ดังนั้นฉันจึงลองใช้การกำหนดค่าหลายอย่าง แต่ไม่สามารถใช้งานได้

ที่เก็บของฉันอยู่ที่ / home / git / repositories

นี่คือการกำหนดค่า nginx สามรายการที่ฉันได้ลอง

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

ผลลัพธ์:

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

ผลลัพธ์:

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

ผลลัพธ์:

> 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

โปรดทราบด้วยการกำหนดค่าใด ๆ เหล่านั้นเมื่อฉันพยายามโคลนด้วยชื่อโครงการที่ไม่มีอยู่จริงฉันได้รับข้อผิดพลาด 502

ใครทำสำเร็จแล้วในการทำเช่นนี้? ผมทำอะไรผิดหรือเปล่า?

ขอบคุณ

UPDATE:

ไฟล์บันทึกข้อผิดพลาด nginx กล่าวว่า:

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"

ดังนั้นฉันเปลี่ยนสิทธิ์สำหรับ /var/run/fcgiwrap.socket และตอนนี้ฉันมี:

> 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

นี่คือไฟล์ error.log ฉันมีตอนนี้:

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"

ฉันตรวจสอบต่อไป


มีผู้ใช้ภายใต้ใช้กระบวนการ fastcgi สิทธิในการเข้าสู่ไดเรกทอรี/usr/lib/git-core/git/projectname.git/info?
Jan Marek

{ln -s / home / git / usr / lib / git-core / git} หรือตั้ง {{root / home;}} - แต่วินาทีอาจเป็นปัญหาด้านความปลอดภัย
แปลกใจ

คำตอบ:


1

นี่คือสิ่งที่ฉันตั้งไว้ในการตั้งค่า Apache ของฉัน (ฉันรู้ว่า: ไม่ใช่ nginx แต่ยังสามารถช่วยคุณได้):

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"

(ด้วย@H@เส้นทางที่.gitolite.rcและในกรณีของฉันที่เก็บจะถูกเก็บไว้)

ฉันไม่เห็นGITOLITE_HTTP_HOMEและGIT_HTTP_BACKENDกำหนดไว้ในการกำหนดค่าของคุณ
ดูการตั้งค่าเต็มได้ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.