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

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

이 글에서는 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/downloads/#ubuntu1604

 

 

- 기본 폴더 이동

#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 관련된 부분이 있는데 그 끝부분에 다음을 추가한다.

 

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

 

 

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

#vi /etc/gitlab/gitlab.rb

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

 

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

 

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

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

 

#sudo gitlab-ctl reconfigure

 

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

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

 

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

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

 

감사합니다!

6 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. 아닙니다. 궁금한것이 있으면 언제든 알려주세요.
          감사합니다.

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>
*
*