Git Repository를 셋팅해놓고 보면 자주 나오는 요청 사항 중 하나가 바로 Web 환경이다.
소스 코드 등을 Web 환경에서 제공해주길 바라는 것이다.


Git은 기본적으로 GitWeb이라는 것을 제공해준다.
Redmine을 사용한다면 GitWeb 대신 Redmine에서 제공해주는 '저장소' 메뉴를 활용할 수도 있다.


여기에서는 GitWeb을 설치하는 방법을 알아보겠다.
단, 일반적인 설치 방법과 다른 점은 웹서버를 Apache가 아니라 Nginx를 이용해보겠다.

그렇다고, 뭐가 많이 다른 것은 아니다.
CGI만 구동할 수 있다면 어떤 웹서버를 사용해도 무관할 것으로 보인다.


1. build

   - 일단은 Git의 Source Code가 필요하다.
   - 이번 기회에 Git 업그레이드도 할 겸 새로 다운로드 받아보자.



   - Git의 경우 major 업그레이드는 가끔이지만, Minor 업그레이드는 자주 올라오고 있다.

 


$ tar zxvf git-1.7.10.1.tar.gz
$ cd git-1.7.10.1/

$ make GITWEB_PROJECTROOT=/srv/repository prefix=/usr/local all
$ sudo make prefix=/usr/local install

   - 압축을 풀고, make를 진행하면 된다.
   - 기존과 다른 점은 [ GITWEB_PROJECTROOT=/srv/repository ] 옵션이 추가되었다.
     → repository가 있는 위치를 지정해주는 부분이다.
   - make 옵션의 제일 뒤에 [ all ]이 있는데, 모든 것으로 지정했기 때문에 GitWeb 관련 부분도 포함이 되어버린다.
     → GitWeb만을 위해 make 할 때에는 [ all ] 대신에 [ gitweb/gitweb.cgi ]라고 적어주면 된다.


$ git --version

   - 설치된 결과를 확인해보자.




2. copy

   - 생성한 파일들을 웹서버로 구동하기 위해 일단 위치 정리부터 해보자.


$ sudo cp -Rf gitweb /srv/www/

   - 우리가 관심이 있는 파일은 [ gitweb.cgi ]이다.



3. webrick

   - 잘 동작하는지 한 번 살펴보자.


$ git instaweb --httpd=webrick

   - 아무곳에서나 실행을 하면 위와 같이 에러가 발생을 한다.
   - git repository 안에서 실행을 하면 된다.


   - "bare1repo.git" 디렉토리 안에서 실행을 하지만, 그 상위 디렉토리에서 실행이 된다. (이유는 ???)


   - 정말 보기가 편하다. 'CLI' 환경에 비해서 다양한 정보를 보기가 너무 좋다.



4. Nginx

   - 이 블로그의 포스팅을 계속 보고 계시는 분들은 알겠지만, WAS로 Nginx를 계속 사용하고 있다.
   - Redmine, Munin 모두 Nginx를 기반으로 구동을 했었으니, GitWeb도 Nginx로 구동을 하고자 했다.

   - 그런데, 문제는 이쒸 정말 아우~ 정말 빡치게도.... Nginx와 GitWeb은 친하지 않다.

   - GitWeb이 'CGI'로 되어있는데, Nginx는 기본적으로 FastCGI를 지원하지 않는다.
   - 거기에다가 더욱 더 큰 문제는 기본적인 CGI가 아니라 Perl 기반으로 되어있는 GitWeb이다.


$ sudo apt-get install libfcgi-perl

   - Perl기반의 CGI 지원을 위해 [ libfcgi-perl ]을 설치해주자.


$ sudo apt-get install fcgiwrap spawn-fcgi

   - 추가적으로 2가지 더 설치를 해주자.


$ sudo nano /opt/nginx/conf/nginx.conf

    server {
        listen 9000;

        location @gitwebhandler {
            rewrite /gitweb /gitweb.cgi;
        }

        location /gitweb {
            alias /srv/www/gitweb;
            index gitweb.cgi;

            try_files $uri $uri/ @gitwebhandler;
            expires 10d;

            location ~* \.(css|png|gif|ico|jpe?g|js) {
                expires 31d;
            }

            location ~ .cgi$ {
                root /srv/www/gitweb;
                if (!-e $request_filename) { rewrite / /gitweb.cgi last; }
                expires off;

            #    fastcgi_pass unix:/var/run/fcgiwrap.socket;
                fastcgi_pass 127.0.0.1:8999;
                fastcgi_index gitweb.cgi;
            #    fastcgi_param SCRIPT_NAME $fastcgi_script_name;
                fastcgi_param SCRIPT_NAME gitweb.cgi;
            #    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param SCRIPT_FILENAME /srv/www/gitweb/gitweb.cgi;
                include /opt/nginx/conf/fastcgi_params;
            }
        }
    }

   - 위와 같이 하면 일단 구동은 할 수 있는데, 제대로 동작은 하지 않았다.
   - 첫 화면은 잘 나오는데, repository 등을 클릭했을 때 정상 동작하지 않는다.

   - 몇 일을 해결하려고 애를 썼는데, 해결이 안된 상태로 그냥 그대로 포스팅한다.




다른 진도를 나가야하는데, 여기에 너무 많은 시간을 투자하게 되어 해결하지 못하고 마무리 하게 되어 정말 아쉽다.
나중에라도 꼭 해결을 해보도록 하겠다.

Apache2 환경에서는 곧 추가하도록 하겠다.

이상~

반응형

+ Recent posts