Git
Chapters ▾ 2nd Edition

4.5 Git 서버 - Git 데몬

Git 데몬

여기선 “Git” 프로토콜로 동작하는 데몬 설정 방법을 알아본다. 이 방법은 인증 기능이 없는 Git 저장소를 만들 수 있는 가장 빠른 방법이다. 다시 한 번 강조하지만, 인증 기능이 없다. 전 세계 누구든지 데이터에 접근할 수 있다는 뜻이다.

만약 서버가 외부에 그냥 노출돼 있다면 우선 방화벽으로 보호하고 프로젝트를 외부에서 접근할 수 있게 만들어야 한다. 그리고 이미 서버를 방화벽으로 보호하고 있어도 사람이나 컴퓨터(CI 서버나 빌드 서버)가 읽기 접근을 할 수 있도록 SSH 키를 일일이 추가하고 싶지 않을 것이다.

어쨌든 Git 프로토콜은 상대적으로 설치하기 쉽다. 그냥 데몬을 실행하면 된다.

$ git daemon --reuseaddr --base-path=/srv/git/ /srv/git/

--reuseaddr 는 서버가 기존의 연결이 타임아웃될 때까지 기다리지 말고 바로 재시작하게 하는 옵션이다. --base-path 옵션을 사용하면 사람들이 프로젝트를 Clone 할 때 전체 경로를 사용하지 않아도 된다. 그리고 마지막에 있는 경로는 노출할 저장소의 위치를 Git 데몬에 알려주는 것이다. 마지막으로 방화벽을 사용하고 있으면 9418 포트를 열어서 지금 작업하는 서버의 숨통을 틔워주어야 한다.

운영체제에 따라 Git 데몬을 실행시키는 방법은 다르다.

대개의 리눅스 배포판은 systemd`를 가장 보편적으로 사용하며 이를 이용하는 방법이 가장 일반적이다. 아래의 내용으로 `/etc/systemd/system/git-daemon.service 파일을 작성한다.

[Unit]
Description=Start Git Daemon

[Service]
ExecStart=/usr/bin/git daemon --reuseaddr --base-path=/srv/git/ /srv/git/

Restart=always
RestartSec=500ms

StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=git-daemon

User=git
Group=git

[Install]
WantedBy=multi-user.target

여기서 주의해서 봐야 할 부분은 git 이라는 사용자와 그룹을 사용하여 Git 데몬이 실행된다는 점이다. 운영하는 환경에 따라 이 부분을 이미 존재하는 사용자나 그룹을 지정해서 사용할 수도 있다. 위의 예제에서는 Git 실행 파일의 위치가 /usr/bin/git 으로 설정되어 있으나 다른곳에 위치해있다면 변경해주어야 한다.

마지막으로 systemctl enable git-daemon 명령을 실행해서 시스템이 부팅될 때 자동으로 서비스가 시작되고, 시스템이 종료될 때 자동으로 서비스도 종료 되도록 설정한다. systemctl start git-daemon, systemctl stop git-daemon 두 명령으로도 설정할 수 있다.

우분투 LTS 14.04 까지는 Upstart 구성을 사용한다. 따라서 14.04 이하의 버전이라면 Upstart 스크립트를 사용한다. 우선 아래와 같이 파일을 만든다.

/etc/init/local-git-daemon.conf

아래의 내용을 입력한다.

start on startup
stop on shutdown
exec /usr/bin/git daemon \
    --user=git --group=git \
    --reuseaddr \
    --base-path=/srv/git/ \
    /srv/git/
respawn

보안을 위해서 저장소를 읽을 수만 있는 사용자로 데몬을 실행시킬 것을 강력하게 권고한다. git-ro 라는 계정을 새로 만들고 그 계정으로 데몬을 실행시키는 것이 좋다. 하지만 여기에서는 쉽게 설명하려고 git-shell`을 실행하는 동일한 사용자인 `git 계정을 사용한다.

서버가 재시작할 때 Git 데몬이 자동으로 실행되고 데몬이 죽어도 자동으로 재시작될 것이다. 서버는 놔두고 Git 데몬만 재시작할 수 있다.

$ initctl start local-git-daemon

다른 시스템에서는 sysvinit 시스템의 xinetd 스크립트를 사용하거나 자신만의 방법으로 해야 한다.

아무나 읽을 수 있다는 것을 Git 서버에 알려주어야 한다. 저장소에 git-daemon-export-ok 파일을 만들면 된다.

$ cd /path/to/project.git
$ touch git-daemon-export-ok

이 파일이 있으면 Git 데몬은 인증 없이 프로젝트를 노출하는 것으로 판단한다.