Pro git - 4.5

Updated:

Pro git - Git 데몬

  • “Git” 프로토콜로 동작하는 데몬 설정 방법
  • 인증 기능이 없는 Git 저장소를 만들 수 있는 가장 빠른 방법
  • 만약 서버가 외부에 그냥 노출돼 있다면 우선 방화벽으로 보호하고 프로젝트를 외부에서 접근할 수 있게 만들어야 한다.
  • Git 프로토콜은 상대적으로 설치하기 쉽다. 그냥 데몬을 실행하면 된다.
$ git daemon --reuseaddr --base-path=/srv/git/ /srv/git/
  • --reuseaddr 는 서버가 기존의 연결이 타임아웃될 때까지 기다리지 말고 바로 재시작하게 하는 옵션이다.
  • --base-path 옵션을 사용하면 사람들이 프로젝트를 Clone 할 때 전체 경로를 사용하지 않아도 된다.
  • 그리고 마지막에 있는 경로는 노출할 저장소의 위치를 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 두 명령으로도 설정할 수 있다.
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
  • --bare 옵션을 주고 git init 를 실행해서 워킹 디렉토리가 없는 빈 저장소를 하나 만든다.
$ cd /srv/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /srv/git/project.git/
  • 이제 John, Josie, Jessica는 이 저장소를 리모트 저장소로 등록하고 나서 브랜치를 Push 할 수 있다.
  • 프로젝트마다 적어도 한 명은 서버에 접속해서 Bare 저장소를 만들어야 한다.
  • git 계정과 저장소를 만든 서버의 호스트 이름이 gitserver 라고 하자.
  • 만약 이 서버가 내부망에 있고 gitserver 가 그 서버를 가리키도록 DNS에 설정하면 아래와 같은 명령을 사용할 수 있다. (myproject 프로젝트가 이미 있다고 가정한다)
  • 우분투 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 데몬은 인증 없이 프로젝트를 노출하는 것으로 판단한다.