ubunt 14.04 git daemon + gitweb을 이용한 git server구축하기
Ubuntu 14.04를 설치하고 git 서버를 구축한다.
GitHub와 같이 회원관리 기능에 커뮤니티 기능까지 원한다면 GitLab같은 오픈소스 git 서버를 구축하길 추천한다.
간단하게 git 만으로도 서버를 구축할 수 있다 git 명령어 중에 daemon 명령어를 쓰면 git 서비스가 돌아간다. 최대 동시접속자는 많지 않다 적어도 10~20명정도는 된다고 한다.
이 정도면 개인 git 서버로 충분하다 여기에 git 소스에서 제공하는 gitweb라는 CGI 형식으로 제공하는 simple web UI도 제공한다.
gitweb을 이용하면 위에서 구축한 git daemon과 함께 http 프로토콜의 웹 서비스도 제공한다. gitweb은 kernel.org에서 제공하는 커널 소스의 웹UI로 이미 제공하고 있다.
1. git daemon 서버 구축
일단 git이 없다면 git을 설치한다.
$ sudo apt-get install git
$ git --version
으로 확인 가능하다.
git이라는 계정을 만든다. SSH키를 이용할 계획이라면 git의 패스워드를 지정할 필요는 없다. 여기서는 그냥 패스워드까지 만든다.
$ sudo useradd git
$ sudo passwd git
패스워드를 지정한다.
그리고 저장소를 쓸 디렉토리를 만든다. 여기서는 /home 경로에 만든다.
$ sudo -u git -H mkdir /home/git
$ cd /home/git
$ sudo -u git -H mkdir test.git
$ cd test.git
$ sudo -u git -H git init --bare
Initialized empty Git repository in /home/git/repositories/test.git/
$ sudo -u git -H git daemon --verbose --export-all --base-path=/home/git --enable=receive-pack &
데몬을 돌렸으니 실제 다른 경로로 가서 git에 업로드할 프로젝트를 만들자.
$ cd ~/work
$ mkdir test
$ cd test
$ git init
Initialized empty Git repository in /home/simon-linux/work/test/.git/
이런 식으로 실제로 내용물이 있어야 commit을 할 수 있다.
$ touch readme.txt
$ echo "This is test" > readme.txt
$ git add .
$ git commit -m "initial commit"
방금 구축한 git 서버 URL을 origin으로 등록한다.
$ git remote add origin git@localhost:/home/git/test.git
$ git push -u origin master
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is b3:8a:ac:1f:00:70:eb:80:6b:e9:eb:8e:fe:3b:e9:d0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Counting objects: 3, done.
Writing objects: 100% (3/3), 212 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@localhost:/home/git/project.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
2. gitweb 구축하기
아래 사이트를 참고했다.
http://blog.daum.net/junek69/37
웹서버와 gitweb을 설치한다.
$ sudo apt-get install apache2 gitweb
$ sudo cp /etc/apache2/conf.d/gitweb /etc/apache2/sites-available/gitweb.conf
$ sudo ln -s /etc/apache2/sites-available/gitweb.conf /etc/apache2/sites-enabled/gitweb.conf
$ sudo vi /etc/apache2/sites-available/gitweb.conf
기존의 내용은 모두 지우고 아래 내용을 붙여넣기 한다.
Alias /git /usr/share/gitweb
<Directory /usr/share/gitweb>
Options +FollowSymLinks +ExecCGI +SymLinksIfOwnerMatch
AllowOverride All
order allow,deny
Allow from all
AddHandler cgi-script .cgi
DirectoryIndex gitweb.cgi
</Directory>
Alias 뒤의 git이 접속 경로가 된다. 예를 들어 http://localhost/git 이렇게 접속하면 된다.
$ sudo vi /etc/gitweb.conf
아래 변수값을 1에서 구축한 git 저장소 위치로 수정한다.
--> $projectroot = "/home/git";
$ sudo vi /usr/share/gitweb/gitweb.cgi
열어서 git 명령어의 위치와 git 저장소 위치를 업데이트한다.
# core git executable to use
# this can just be "git" if your webserver has a sensible PATH
our $GIT = "/usr/bin/git";
# absolute fs-path which will be prepended to the project path
#our $projectroot = "/pub/scm";
our $projectroot = "/git/";
.....
그리고 가장 중요한 아파치2에서 CGI 실행 모듈을 활성화한다. 이게 안되면 그냥 웹브라우저에서 gitweb.cgi의 소스만 출력된다.
$ sudo a2enmod cgi
$ sudo service apache2 restart
참고사이트
http://askubuntu.com/questions/403067/cgi-bin-not-working
자 이제 아래 주소로 접속해보자
http://localhost/git
혹은 http://localhost/git/test.git 과 같은 개별 git저장소를 지정한다.