본문 바로가기
Projects/Ubuntu Git Server

[Ubuntu Git Server] 1. 서버 환경 구축

by DevJaewoo 2021. 12. 1.
반응형

 

Git LOGO

 

프로젝트 시작 배경

2022년도를 맞이하며 SW 팀의 소스코드 관리 방식을 변경하기로 했다.

기존에는 NAS에 개인별로 폴더를 만들고 스냅샷이 필요할 때마다 폴더를 압축해 업로드 하는 방식으로 관리했지만,

아래의 3가지 문제점 때문에 사내 Git 서버를 구축하고 그곳에서 소스코드를 관리하는 방식으로 변경하기로 했다.

 

  1. 용량 문제: 스냅샷을 한번 업로드 할때마다 용량이 2배, 3배로 늘어남
  2. 팀원 동시개발 문제: 서로 다른 모듈을 개발할 경우 수정 포인트를 일일이 비교하여 병합본을 만들어야 함
  3. 버전 관리 문제: 공유 폴더에서 특정 버전의 압축파일을 찾기 힘들고, 찾은 압축파일을 다시 개발 툴에 적용시키기도 힘들음

 

위의 문제를 해결하기 위한 Git 서버를 담당하게 되어 서버 구축 과정, 문제 해결 과정을 글로 남기려 한다.


Ubuntu Server OS 설치

흔히 서버로 사용되는 OS에는 CentOS, Debian, RHEL, Windows 등 다양한 OS가 있지만 무료 정책, 패키지 관리자 (apt), 업데이트 지원 등을 고려하여 Ubuntu를 설치하기로 결정했다.

 

또한 혹시 발생할지 모르는 하드디스크 손상을 대비하기 위해 1TB HDD를 2개를 RAID1로 구성해 하나의 디스크가 손상이 나더라도 서버가 돌아갈 수 있도록 구성했다.

 

설치 과정은 아래의 글에 따로 정리해두었다.

2021.11.24 - [Tips/Linux] - [Linux] Ubuntu Server 20.04 RAID 구성하기

 

[Linux] Ubuntu Server 20.04 RAID 구성하기

Ubuntu Server 20.04 RAID 구성하기 준비물: Ubuntu Server 20.04 부팅 USB, 2개 이상의 디스크 1. Ubuntu Server 20.04 설치 진행 파티션 설정 이전까지는 기본적인 OS 설치 과정과 같습니다. 자세한 내용..

devjaewoo.tistory.com


Git Server 환경 구축

여러 명의 팀원을 다같이 관리해야 하기 때문에 gitolite라는 툴을 쓰기로 했다.

간단히 말하자면 Linux 기준 하나의 사용자로 여러 사람이 Git에 접근할 수 있도록 해주는 사용자 관리 툴이다.

 

설치 과정은 아래의 Ubuntu 공식 홈페이지 글을 참고했다.

https://ubuntu.com/server/docs/service-gitolite

 

Services - gitolite | Ubuntu

Ubuntu is an open source software operating system that runs from the desktop, to the cloud, to all your internet connected things.

ubuntu.com

 

우선 git repository를 접근하기 위한 공용 사용자 git과,

git에 관련된 권한을 설정하기 위한 관리자 git-admin을 생성한다.

# adduser --system --shell /bin/bash --group --disabled-password --home /home/git git
# adduser --system --shell /bin/bash --ingroup git --disabled-password --home /home/git-admin git-admin

 

그 다음 git-admin의 ssh 키를 생성한다.

이 키는 나중에 gitolite setup 시 관리자 키로 등록된다.

# su - git-admin
$ ssh-keygen -t rsa
$ exit

 

아래와 같이 .ssh 폴더와 파일 3개가 생성되면 된다.

$ tree .ssh
.ssh
├── authorized_keys
├── id_rsa
└── id_rsa.pub

 

다시 관리자로 돌아와 이전에 생성한 공개키를 git 사용자 홈 디렉터리에 복사한다.

관리자 권한으로 복사했기 때문에 git 사용자가 접근하기 위해 owner, group을 git으로 변경해준다.

# cp ~git-admin/.ssh/id_rsa.pub ~git/git-admin.pub
# chown git:git ~git/git-admin.pub

 

git 사용자로 전환한 후 최신 gitolite를 clone해 설치한다.

설치 후 아까 생성한 git-admin 계정의 공개키를 관리자로 설정한다.

# su - git
$ git clone https://github.com/sitaramc/gitolite.git
$ ./gitolite/install

$ ./gitolite/src/gitolite setup -pk git-admin.pub
$ exit

 

아래와 같이 repositories 디렉터리가 생성된다.

$ ls -laF ./repositories/
total 0
drwx------ 4 git git  51 Dec  1 08:46 ./
drwxr-xr-x 6 git 118 154 Dec  1 08:46 ../
drwx------ 8 git git 181 Dec  1 08:46 gitolite-admin.git/
drwx------ 7 git git 162 Dec  1 08:46 testing.git/

 

다시 git-admin 사용자로 전환하고 방금 생성된 gitolite-admin repo를 clone 해준다.

이전에 git-admin의 공개키를 관리자 키로 등록했기 때문에 접근이 가능하다.

# su - git-admin
$ git clone git@localhost:gitolite-admin.git
Cloning into 'gitolite-admin'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.

 

clone이 완료되면 아래와 같이 3개의 디렉터리와 2개의 파일이 생성된다.

이렇게 하면 Git Server 환경 구축은 끝이다.

$ tree
.
└── gitolite-admin
    ├── conf
    │   └── gitolite.conf
    └── keydir
        └── git-admin.pub

3 directories, 2 files
반응형