Nginx 환경에서 gitweb 구동은 아직 성공은 못했다.
누군가 성공하신 분이 계시면 알려주시면 대단히 감사하겠다는....

일단 기본적인 사항에 대해서는 지난 포스팅을 참고하길 바란다.
     - http://whatwant.tistory.com/397


1. Git 준비 (gitweb 준비)

     - Git을 소스코드 설치를 하셨다면 기본적인 준비는 모두 되어있는 것이다.
     - http://whatwant.tistory.com/289



2. Apache2 준비

     - 간단하게 그냥 패키지로 설치하자.

$ sudo apt-get install apache2



3. 경로 정리

     - 개인적인 취향이 반영된 부분이지만... 여하튼 경로를 정리해보자.
     - git 을 소스설치한 경로는 다음과 같다. [ /srv/install/git/git-1.7.11.2 ]

$ cd /srv/www
$ sudo ln -s /srv/install/git/git-1.7.11.2/gitweb ./gitweb.whatwant.com



4. VirtualHost 생성

     - default 사이트는 삭제하고, 포트 변경해서 생성해보자.

$ cd /etc/apache2/sites-available
$ sudo nano ./gitweb

<VirtualHost *:8080>
        ServerAdmin whatwant@whatwant.com

        DocumentRoot /srv/www/gitweb.whatwant.com

        <Directory "/srv/www/gitweb.whatwant.com">

                DirectoryIndex gitweb.cgi
                Allow from all
                AllowOverride all
                Order allow,deny
                Options ExecCGI

                <Files gitweb.cgi>
                        SetHandler cgi-script
                </Files>

                SetEnv  GITWEB_CONFIG  /srv/www/gitweb.conf
        </Directory>

</VirtualHost>

     - 위 설정과 같이 8080 포트로 gitweb을 구동하고자 한다.

$ sudo nano /etc/apache2/ports.conf

NameVirtualHost *:8080
Listen 8080

     - sites 설정을 맞추자

$ cd /etc/apache2/sites-enabled
$ sudo rm -rf ./000-default
$ sudo ln -s ../sites-available/gitweb ./001-gitweb



5. gitweb.conf

     - gitweb 환경설정을 해보자.

$ sudo nano /srv/www/gitweb.conf

$git_temp = "/tmp";

# The directories where your projects are. Must not end with a slash.
$projectroot = "/srv/repositories";

$feature{'blame'}{'default'} = [1];
$feature{'highlight'}{'default'} = [1];



6. gitweb + gitolite

     - 기본적으로 gitolite를 적용한 환경에서 그냥 gitweb을 연결하면 testing.git repository밖에 안보인다.
     - 그래서 별도의 과정을 추가로 진행하여야 한다.

$ sudo usermod -a -G gitolite www-data
$ sudo chown -R git.www-data /srv/repositories
$ sudo chmod -R g+rx /srv/repositories

     - UMASK 기본 값을 변경해야 한다.
     - 이와 관련된 설정 파일은 gitolite를 설치한 repository를 관리하기 위한 계정에 있다.

$ sudo su - git
$ nano ./.gitolite.rc

    #UMASK                       =>  0077,
    UMASK                       =>  0027,


이제 8080 포트로 웹사이트 접속을 하면 된다~!!!

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

git blame (-e 옵션)  (0) 2012.07.29
git man  (0) 2012.07.25
Code Review - Gerrit (Install)  (12) 2012.07.07
[004] 당신은 Git을 어떻게 읽나요?  (0) 2012.06.28
[003] Git의 탄생 비화  (2) 2012.06.26

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