나만의 GIT 서버를 구축하고 프로젝트에 적용하는 방법 (gitlab 설치 구축)

HYEONG HWAN, MUN/ 1월 11, 2017/ 미분류/ 15 comments

https://blog.lael.be/post/5476

이 글에서는 GIT 버전관리 시스템을 구축하고 프로젝트에 도입하는 방법에 대해 설명한다.

 

먼저 GIT 이란 [깃-] 이라고 읽으며, 버전관리 시스템 중 하나이다.
몇년전부터 기존의 버전관리 시스템 표준(레거시 표준)SVN 을 대체하고 대세로 자리매김 하고 있다.

따라서 최신의 개발자/기획자/디자이너/퍼블리셔 라면 이 GIT의 역할과 사용법에 대해 반드시 익혀두어야 할 것이다.

 

GIT 의 자세한 정의는 (https://en.wikipedia.org/wiki/Git) 다음과 같고, 요약하자면 “소스 버전 관리 시스템” 이라고 말할 수 있다.
소스 버전 관리 시스템을 통해, 모든 시점에 대해 저장을 하고, 코드의 병합(merge)이나 변경취소, 시점 복원등의 기능을 이용할 수 있다.
문제의 원인을 파악하기 쉬우며, 예상치 못한 소스 망실에 대해서 안전해 진다.(모든 시점에 대해 백업을 한다고 생각하면 된다.)

GIT = 수동 백업 + 백업 시점 설명

이라고 말할 수 있다.

 


GIT 에 대해 간략한 소개는 이만 마치도록 하고 이제부터는 GIT 구축 방법에 대해 알아보도록 하자.

1. 프로젝트 적용 시점 설정

라엘이의 경험상으로 볼 때, 멀쩡히 잘 돌아가는 프로젝트/회사/팀 에 “여러분 GIT이 좋답니다~ 우리회사 모든 프로젝트에 GIT을 도입하기로 했습니다!” 라는 말은 엄청난 반감을 일으킬 것이다.

특히나 일정이 촉박한 현재 진행 중인 프로젝트 중간에 GIT 을 도입하는 것은 매우 권고하지 않는다. (strongly not recommend)

  • 권장하는 GIT 도입 시점 (다음 중 하나 조건이 충족하면 됨)

- 구성원이 GIT 사용에 능숙
- 프로젝트 착수 환경 준비에 1주일 이상의 기간이 할당된 프로젝트
- 구성원이 작업하는 파트가 독립된(겹치지 않는) 프로젝트
- 급하게 변하지 않으며, 장기적인 유지보수가 필요한(진행중인) 프로젝트 - 회사 상용솔루션
- 아이디어가 샘솟는 개인 프로젝트

 

2. GIT 서버 소프트웨어 선택

GIT 을 사용하려면 소스를 제어하는 GIT 서버툴을 설치하여야 한다.

TIP

본인이 아무리 기술이 뛰어나더라도 다음의 구축은 하지 않기를 바랍니다.

1) 메일서버 구축
- 메일서버는 중단이 되면 안되는 서버입니다. 일반적으로 메일은 5대 이상의 서버가 계층을 이루며 서비스합니다. 대부분의 경우 메일서버 구축은 손해입니다. 도메인 업체에서 무료로 제공하는 메일이나 구글앱스 같은 유료 서비스 사용을 권장합니다.

2) 네임서버 구축
- 네임서버는 메일서버보다 더 중요합니다. 무료 네임서버가 많으니 가능하다면 무료 네임서버 이용을 권장합니다.

3) 로컬환경에 GIT서버 구축
- GIT 서버는 소스관리를 하는 것이기 때문에 중요합니다. (저는 겪어보지 못했지만) 이렇게 중요한 서버의 컴퓨터가 망가지는 사례를 들어 보았는데, git 프로젝트에서 git 서버가 죽으면 작업이 중단되게 됩니다. 비슷한 이유로 정전이나 인터넷 회선불량의 가능성도 염두해 두어야 합니다. 망가지거나 서비스 불능에 대처할 자신이 있다면 “로컬환경에 git 서버 구축”을 하셔도 됩니다.

GIT 서버 소프트웨어의 종류 및 가격(*최저 옵션 기준)

이 글에서는 사용이 쉽고, 이해가 쉽고, 구축이 간편한 GITLAB 을 선택할 것이다.

 

GITLAB 의 공식사이트는 https://about.gitlab.com 이다.
제품 소스는 https://about.gitlab.com/products/ 에서 다운 받을 수 있다.
제작사의 support 를 받고 싶거나, GIT 추가 명령어 기능(장담하는데 저와 여러분 모두 쓸일이 없는 기능입니다)을 사용하고 싶다면 비용을 지불하고 신청하면 된다.



 

3. GIT 서버 도메인 준비

GIT 서버 소프트웨어가 결정 되었다면, GIT 서버 도메인을 준비하도록 하자.

보통 회사의 도메인이 example.com 이라면, git.example.com 이나 dev.example.com, git-dev.example.com 을 쓰곤 한다.

적절히 구매하여 준비하도록 하자.

 

웹서버의 보안 통신은 https 를 통해서 이루어지며, https 의 필요조건은 도메인의 보유이다.

 

4. GIT 서버 소프트웨어를 설치할 서버 준비

서버 프로그램을 구동하기 위한 최소사양을 파악하자.

https://docs.gitlab.com/ce/install/requirements.html 페이지에서 해당 사항을 알 수 있다.

 

 

CPU 는 동시 접속자 (concurrent activation) 에 영향을 준다.
RAM 은 동시 프로세스 실행에 영향을 준다.

swap 이 설정된 2코어 2GB 서버를 선택하거나, 2코어 4GB 서버를 선택하면 된다.

 

이 글에서는 신뢰할 수 있는 클라우드 사업자 VULTR 를 사용할 것이다.

http://www.vultr.com/ 클라우드에 가입 후 아래 그림과 같이 진행하면 된다.

 

Servers => + 버튼 클릭

 

 

Location 에서 Tokyo 선택

 

Ubuntu 16.04 x64 선택 후 2CPU 4096 Memory 상품 선택

 

hostname 값과 label 값 입력

 

< 그림 - 초기 비밀번호는 매우 복잡하게 설정되니 꼭 복사기능을 사용하도록 하자. >

 

쉘 접속 후에는

# passwd

명령어를 통해 기본 비밀번호를 나만의 비밀번호로 변경하도록 하자.

 

5. 생성한 서버와 준비한 도메인 연결

3번에서 준비한 GIT 서버 도메인과, 4번에서 준비한 GIT 서버를 연결한다.
DNS 의 A 레코드에 서버의 IP 를 적어주면 된다.
자세한 설명은 생략한다. (네임서버 제공업체에 문의해 보아라.)

NOTE

이 글 예제에서는 gitlab.lael.be 도메인과 45.76.217.102 서버를 연결한 후 작업할 것이다.



 

6. GIT 서버 소프트웨어 설치

반드시 5번-도메인 연결 을 완료 한 후에 진행하세요.

 

1) 서버 기본 세팅

 

서버 기본 세팅은 다음의 글을 참조한다. (https://blog.lael.be/post/2600)
0번(root 권한으로 변경) 부터 9번(Hostname 설정)까지 진행한다.
9번(Hostname 설정)을 진행할 때 hostname에 연결된 도메인 주소를 제대로 설정해주도록 하자.

< 그림 - 서버에 올바른 hostname 이 설정 되어있다. >

2) Gitlab 설치

참고로 공식 설치가이드 페이지 주소는 다음과 같다.

https://about.gitlab.com/install/#ubuntu

 

 

- 기본 폴더 이동

#cd /root

- 필수 기초 소프트웨어 설치

#sudo apt-get install curl openssh-server ca-certificates postfix

혹시 선택 옵션이 나타난다면 Internet Site 를 선택한다.
선택에 대한 확신이 서지 않을때에는 기본값을 사용하면 된다. (엔터)

 

- gitlab 설치 프로그램 저장소 추가

#curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

 

- 저장소 목록 업데이트

#apt-get update

 

- Gitlab Community Edition설치

#sudo apt-get install gitlab-ce

 

- Gitlab 초기설정

#sudo gitlab-ctl reconfigure

많은 것들을 설정/ 업데이트 할 것이다.

서버에 문제가 있거나 업데이트가 필요한 경우 위의 명령어를 실행해주면 정상화 된다.

 

- 최고관리자 암호 설정

최고관리자 IDroot 이다.

암호를 설정해 보자.

인터넷 브라우저를 열고, 연결된 도메인을 입력한다.

이 글에서는 http://gitlab.lael.be 를 입력할 것이다.

 

 

GITLAB root 관리자 비밀번호를 설정한 후에 로그인 한 후에 프로그램을 설정하자.

기능이 매우 많기 때문에 일일이 나열하지는 않겠다. 다만

가입 기능을 아예 끄거나, 가입 기능을 허용하려면 특정 도메인만 허용하고, 인증메일을 사용하도록 설정하는 것을 권장한다.

가입 기능을 끄면 관리자에 의해 수동으로 계정을 만들어서 사용할 수 있다.

 

 

- GITLAB 에 보안 인증서 추가 설치

무료 보안인증서 발행업체인 Let’s Encrypt 를 사용하여 GITLAB 에 보안 인증서를 추가할 것이다.

 

#apt-get install letsencrypt
#mkdir -p /var/www/letsencrypt
#vi /etc/gitlab/gitlab.rb

 

설정파일 중간 쯤에 nginx 관련된 부분이 있는데 그 끝부분에 다음을 추가한다.

(빠른 탐색 방법 : 명령모드에서 /logging 입력 후 엔터)

 

nginx['custom_gitlab_server_config'] = "location ^~ /.well-known { root /var/www/letsencrypt; }"

변경사항 적용 & 업데이트 확인

#sudo gitlab-ctl reconfigure

 

#sudo letsencrypt certonly -a webroot -w /var/www/letsencrypt -d gitlab.lael.be

 

 

위의 메일주소로 인증서 만료 직전에 갱신알림메일이 발송된다.

 

약관 동의를 물어보면 A 를 입력한다.

이메일 주소 공유를 물어보면 N 을 입력한다.

 

#vi /etc/gitlab/gitlab.rb

인증서가 발급되었으니 gitlab 에 적용한다.

( 간편 탐색 명령어 : (명령모드에서) 1G )

 

서비스 주소 및 인증서 경로를 지정한다.

1G

 

( 간편 탐색 명령어 : (명령모드에서) 980G )

< 위의 부분을 찾아서 아래와 같이 변경한다 >

nginx['ssl_certificate'] = "/etc/letsencrypt/live/#{node['fqdn']}/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/#{node['fqdn']}/privkey.pem"

위의 코드가 적용되지 않는다면 수동으로 도메인을 강제 지정해 주어야 한다.

nginx['ssl_certificate'] = "/etc/letsencrypt/live/gitlab.lael.be/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/gitlab.lael.be/privkey.pem"

 

 

변경사항 적용 & 업데이트 확인

#sudo gitlab-ctl reconfigure

 

SSL 인증서 자동갱신 설정

#crontab -e
10 5 * * 1 /usr/bin/letsencrypt renew >> /var/log/le-renew.log
15 5 * * 1 /usr/bin/gitlab-ctl restart nginx

다시 GIT서비스에 접속해보면 HTTPS 인증서가 적용되어 있을 것이다.

 

3) 방화벽 설정 (가이드)

GITLAB에서 사용하는 TCP 포트는 80, 443, 22 입니다.
클라우드 서버를 사용중이고, 클라우드 방화벽을 사용할 수 있다면 해당 메뉴에서 적절한 IP 접근제한을 설정해 주시면 됩니다.
다만 ip 제한을 걸 경우 LetsEncrypt(SSL) 인증에 문제가 발생할 수 있습니다. 잠시 방화벽을 풀고 인증받거나 아예 80,443 을 public open 하여서 해결 할 수 있습니다.

다음과 같이 fail2ban 을 설정하여 비밀번호 로그인 몇회 오류시 접속을 차단하는 것도 좋습니다.

Ubuntu 에 fail2ban 을 설치하여 보안을 강화하기.

 

4) 사용자 추가 (가이드)

가입을 받지 않게 설정하였기 때문에, 사용자 추가가 좀 번거롭습니다. 관리자가 추가해주어야 합니다.

저는 root 계정으로 로그인 후, 새 사용자를 추가한 다음에, 유저목록 -> Edit 버튼을 클릭하고, 비밀번호를 설정합니다.

그리고 해당 사용자에게 아이디/비밀번호를 통보해 줍니다. 사용자는 로그인 후 스스로 비밀번호를 변경할 수 있습니다.

 

7. 운영 및 유지보수

가끔씩 gitlab 관리자 아이디로 로그인시, “업데이트가 있으며 업데이트 해달라“고 뜬다.
그럴때, 다음의 명령어를 사용하여 소프트웨어를 최신버전으로 업데이트 할 수 있다. (5분정도 걸림)

자동으로 git서버 중지 -> 업데이트 다운로드 -> 업데이트 패치 -> git 재시작이 진행된다.

# apt-get update
# apt-get upgrade

참고 : gitlab 공식 업데이트 가이드 (https://about.gitlab.com/update/#ubuntu)


축하합니다! GIT 을 사용할 모든 초기 설정이 끝났습니다!

설정하다가 잘 안되는 부분이 있으시면 알려주세요.

 

감사합니다!

 


 

# 19.03.26 추가

gitlab 백업방법

# sudo gitlab-rake gitlab:backup:create

/etc/gitlab/gitlab.rb 파일의 gitlab_rails[‘backup_path’]  에 지정된 위치에 백업된다. (기본값 : /var/opt/gitlab/backups )

사이트 환경 설정, 사용자 정보, 저장소 정보를 포함한 모든 gitlab 정보가 백업된다.

 

# cd /var/opt/gitlab/backups
# ll -h

timestamp_gitlab_backup.tar

이렇게 백업이 생긴다.  이 파일을 안전한 곳에 보관하면 된다.

 


gitlab 복원방법

gitlab 복원을 진행하면 [모든] 사이트 정보해당 백업파일 값으로 변경된다.

사이트 설정, 사용자 설정, 저장소 데이터를 포함한 모든 gitlab 정보가 해당 백업파일 값으로 변경된다.

 

- 암호화키 복사

원본 서버에서 /etc/gitlab/gitlab-secrets.json 파일을 복사해서 복원할 서버에 붙여넣는다.

이 작업을 하지 않으면 웹UI 상에서 기존의 복원된 사용자 저장소에 대해 정보변경이 되지 않는다.

프로젝트 정보 수정시, Whoops, something went wrong on our end. 같은 메세지가 나올 수 있다.

 

- 백업 폴더에 백업 파일 복사

백업한 서버와 복원할 서버가 같다면 (이미 이 파일이, 이 위치에 있기 때문에) 건너뛰어도 되는 작업이다.

# cd /var/opt/gitlab/backups/
# ll -h

 

- 파일 이동 명령어
# mv 해당백업파일.tar /var/opt/gitlab/backups/

 

- 파일이 올바로 준비되었는지 확인
# ll -h

 

- DB를 사용하는 서비스 중지
# sudo gitlab-ctl stop unicorn
# sudo gitlab-ctl stop sidekiq
# gitlab-ctl status

 

- 복원하기

_gitlab_backup.tar 를 제외한 파일 이름을 입력한다.

# gitlab-rake gitlab:backup:restore BACKUP=1553573272_2019_03_26_11.9.0

 

복원 진행 중간에 정말로 복원 할 것인지 물어본다. yes 를 입력하면 된다.

 

- gitlab 서비스 다시 재시작
# gitlab-ctl restart

 

- gitlab 서비스 상태 확인 및 교정 (check and sanitize)
# gitlab-rake gitlab:check SANITIZE=true

잘못된 부분(빨간색 글자)이 있다면, 위의 상태 확인 명령어를 다시 실행한다.

 

- 복원 완료

완료!

 

복원 기념으로 재부팅을 한번 하자.

# reboot

 

 

GITLAB 디버깅 로그 파일 위치

# /var/log/gitlab/gitlab-rails/production.log

 

 

15 Comments

  1. svn과 git을 설치하고자 하는 찰라에
    헤놀로지(시놀로지)에 쉽게 설치하게 되어있어
    설치만 해놓은 상태입니다.

    가상 vmware에 가상 리눅스 한개 더 만들생각하고 있었는데
    라엘님말씀대로 신뢰할수 있는 클라우드서버 사용 고려해보겠습니다.
    취미로 월유지비가 나가는 것이 부담이 되긴 하지만요…

    아마존 aws ec2 무료체험 받을때 고정아이피 한개를 무료로 받았는데
    vultr은 어떤가요?

    1. 90%의 클라우드는 고정IP 하나를 무료로 제공합니다.

  2. 지난주 아마존에서
    1만7천원인가 내어서 ec2 삭제 했는데
    linode 이벤트 아직 유효한가요?
    그리고 한달에 약 얼마정도 유지비용이 들어가는 부분인가요?

    1. 안녕하세요. linode 10달러짜리는 한달에 만천원, 20달러짜리는 한달에 2만2천원 정도 나옵니다. 한달에 만원짜리가 거의 최저가 입니다.

      1. 안녕하세요.
        HYEONG HWAN, MUN님 답변 감사드리며,
        즐거운 한주 되세요.

        1. 아닙니다. 궁금한것이 있으면 언제든 알려주세요.
          감사합니다.

  3. 라엘님 덕분에 너무 쉽게 설치했습니다:) 감사합니다.

    그런데 제가 gmail을 쓰는데 Profile – Main Setting 에 Email cofirm mail이 오질 않습니다.

    혹시 gitlab을 사용하신다면 해결방법을 알 수 있을까요..?

    1. 이메일 수신은 안쓰는 기능이라 확인하지 못하겠네요.

      저는 root 사용자로 계정추가 및 비밀번호 설정을 모두 합니다.
      한 페이지에서 동시에 설정할 수 없으니, 계정 추가 후 계정 변경, 비밀번호 설정을 해보세요.

  4. 안녕하세요 페이지 잘읽었습니다
    gitlab server로 운용중에 있는대요 이전에 push했을 경우에는 email이 잘오다가 갑자기 push를 해도 이메일이 안오는 경우는 어떻게 생각할 수 있을까요?

    1. 메일을 너무많이 보내서 스팸처리 되었을것 같습니다.
      자동이메일의 메일주소를 확인하고 sfp 처리를 해주세요.

  5. Pingback: docker 로 gitlab만들기 - DeepMi

  6. 가이드 감사합니다

    한참동안 찾아도 방법이 안나와서 고민하고 있었는데 정답지를 발견했네요 ㅎㅎㅎ

    1. 이 글이 좋은 가이드가 되었기를 기대합니다!

  7. 라엘님 안녕하세요
    오프라인환경에서 (페쇄망: 보안정책상..)

    윈도우 10에서
    gitlab구축 방법은 없을까요?

    1. virtualbox 에 linux ubuntu 에 git 을 설치하고, usb에 해당 가상하드디스크 파일을 담은후에, 원하는 피씨에서 복원하는 방법이 있습니다.

Leave a Comment

작성하신 댓글은 관리자의 수동 승인 후 게시됩니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*