::: IT인터넷 :::

시놀로지 NAS에서 GitLab 설정 방법

정보보안썰문가 곰탱이푸우 2021. 6. 10. 17:32
반응형

참고1) 본 내용은 DSM 6.2.x 버전을 기준으로 작성되었습니다. .
참고2) sameersbn/gitlab Docker 이미지로 DSM 7.0.x에 설치했습니다. 다음 포스팅을 참고해주세요.

 

시놀로지 NAS에서 Docker로 GitLab 설정하기

DSM 7.0으로 업데이트 되면서 기존에 사용하던 gitlab 패키지가 3rd-party라고 지원을 중단했다. 그래서 gitlab을 삭제하고 DSM 7.0으로 업데이트를 진행했다. GitLab을 새로 설치하기 위해 Docker를 이용한

www.bearpooh.com

 

개요

시놀로지 NAS에서 GitLab도 설치 가능하며, DS21x 모델 기준으로 DS216 부터 추가되었다.

  • 아마도 Docker를 DS216부터 지원하기 시작했기 때문으로 보인다.
  • 기존에 사용하던 DS213은 Git Server 설치가 가능했는데 CUI 기반이라 관리나 활용에 불편함이 있다고 느꼈다.
  • DS220+를 구입한 것도 Git 서버 운영을 GUI로 하고 싶었고, NAS에서 Docker도 사용하고 싶었기 때문이다.


시놀로지 NAS에서 GitLab을 설치하는 방법은 크게 두 가지이다.

  • Docker에서 GitLab 이미지를 이용해서 설치하는 방법
  • 시놀로지 패키지 센터에서 설치하는 방법 (어차피 Docker로 설치한다.)

 


시놀로지 Docker 앱의 UI에서 docker-compose를 지원하지 않기 때문에, 의존성이 있는 여러 컨테이너를 동시에 띄우기는 어렵다.

  • 시놀로지 NAS에 SSH로 연결하고 쉘에서 docker-compose 명령어를 사용할 수 있다.
  • 설치의 편의상 시놀로지 패키지 센터를 통해 설치를 진행했다.


시놀로지 GitLab 패키지에 대한 설명은 다음을 참고한다.

 

GitLab - 애드온 패키지 | Synology Incorporated

애드온 패키지 Synology NAS에는 수많은 추가 기능이 포함되어 있습니다. 사용자의 필요에 맞게 특별히 제작된 패키지을 다운로드하여 설치하고, 클라우드에서 파일을 공유하거나, 온라인 앨범에

www.synology.com

 

설치 준비

시놀로지 NAS에서 GitLab을 Docker로 설치할때 주로 사용하는 이미지는 두 가지이다.

  • sameersbn/gitlab - 시놀로지 패키지센터에서 설치할때 사용
  • jboxberger/synology-gitlab - 설치 파일을 받은 후 패키지센터에서 수동 설치 진행 필요

 


jboxberger가 gitlab의 최신 버전을 더욱 잘 반영하고 있어서 해당 이미지를 사용했다.

해당 이미지는 아래 github에서 관리되고 있다. (혜자로운 MIT 라이선스다.)

 

jboxberger/synology-gitlab

Updated an improved Original Synology Package. Contribute to jboxberger/synology-gitlab development by creating an account on GitHub.

github.com

 


설치 파일은 우측의 Releases를 확인한다.
가장 최신 버전은 13.9.3-0068 버전이다. 해당 태그를 클릭하면 릴리즈 페이지로 이동한다.
3개 파일 중 최상단의 spk 파일(804M)을 다운로드한다.

 

 

GitLab 설치

시놀로지 패키지 센터를 실행하고 '수동 설치'를 클릭한다.


찾아보기 버튼을 누르고 spk 파일을 선택하고 다음 버튼을 클릭한다.

이후 설치 과정은 패키지 센터에서 제공하는 앱과 대동소이 하므로 아래 포스팅을 참고한다.
(이미 NAS에 설치가 되어 있어서 지우고 다시 설정하기 어려운 상황이다.)

 

Synology GitLab 설치하기

여러가지 시도를 해보고 삽질을 해보면서 가장 나은 셋팅방법에 대해서 정리를 해볼까 한다. 먼저, GitLab 을 설치하는 방법에는 두가지가 있다. 1. Synology 에서 제공하는 패키지를 이용하는 방법 2

deafjwhong.tistory.com


아래 부분을 참고하면 설치에 도움이 된다.

  • 포트 설정 단계 - 공유기에서 포트포워딩으로 연결할 포트를 적어준다.
  • 도메인 설정 단계 - 시놀로지 NAS의 도메인과 동일하게 입력한다. 포트는 제외한다.
  • SMTP 설정 - 사용하는 경우 해당 이메일 서버의 SMTP 설정도 확인해야 한다. 설정하지 않았다.


설치가 완료되면 gitlab, postgresql, redis Docker 이미지가 추가 된 것을 확인할 수 있다.


컨테이너 항목을 보면 3개의 컨테이너가 실행 중이다.


gitlab이 RAM의 2.22G를 차지하는 것이 흥미롭다. DS220+가 기본 제공하는 메모리가 2G이므로 메모리 확장 없이는 운영이 불가능하다.

  • DS220+의 경우 램 하나는 온보드로 2G이고, 추가 슬롯이 1개 존재한다.
  • 노트북 램을 꽂아야 하고, 최대 16G 램을 추가할 수 있는 것으로 알려져 있다.

 


시놀로지 정식 RAM은 가격이 사악하고, 일반 노트북 DDR4 램도 인식 가능하다.

  • 일반 램을 꽂을 경우 향후 A/S 부분에서 문제가 된다. (시놀로지 보증 대상 아님)
  • 여유가 되는 분들은 정식 RAM으로, 가성비 중심으로 접근하는 분들은 일반 RAM이 좋을 듯 하다.
  • 8G를 추가해서 현재 10G인데, Nexsus와 Jenkins 설치 후 상시 50% 이상 점유라 16G로 바꿀까 고민중이다...

 

SSL 설정

다른 포스팅들은 설치 후 HTTP 포트에 대해 리버스 프록시를 설정하면 된다고 하는데 몇가지 문제가 있다.

  • 다수의 포트 전환이 발생한다.
  • 외부 포트 - 공유기 - 리버스 프록시 포트 - 시놀로지 NAS - GitLab 컨테이너 외부 포트 - Docker 컨테이너 - GitLab 내부 포트 형태로
  • 이러한 다수의 포트 전환 때문인지 GitLab 접근시 일부 오류가 발생했다.


리버스 프록시 설정 방법은 아래 블로그 내용을 참고한다.

 

Synology GitLab 설치하기

여러가지 시도를 해보고 삽질을 해보면서 가장 나은 셋팅방법에 대해서 정리를 해볼까 한다. 먼저, GitLab 을 설치하는 방법에는 두가지가 있다. 1. Synology 에서 제공하는 패키지를 이용하는 방법 2

deafjwhong.tistory.com


따라서 리버스 프록시를 사용하지 않고 외부 포트 - 공유기 - GitLab 컨테이너 외부 포트를 연결한다.
시놀로지 NAS의 인증서를 이용하여 GitLab에서 사용하는 인증서를 생성해야 하는데 손이 많이 가고 오래 걸린다.

기본적인 진행 방법은 아래 내용을 참고한다.

 

zxc010613/synology-gitlab-ssl

When you want to use an encryption certificate generated by the Synology DSM. - zxc010613/synology-gitlab-ssl

github.com

 

gitlab 중지

시놀로지 패키지 센터를 실행한다.
gitlab을 선택하고 '중지'를 클릭한다.

 

gitlab 컨테이너 설정 추가

시놀로지 Docker를 실행한다.
컨테이너 탭의 synology_gitlab을 선택하고 상단의 '편집'을 클릭한다.

포트 설정 탭을 선택하고 컨테이너 포트의 80 (HTTP)을 443 (HTTPS)으로 변경한다.


환경 탭을 선택하고 아래 환경 변수들을 추가한다.

  • SSL_KEY_PATH=/home/git/data/certs/gitlab.key # /home/git/data/ 경로는 공유 Volume으로 설정한 경로
  • SSL_DHPARAM_PATH=/home/git/data/certs/dhparam.pem
  • SSL_CERTIFICATES_PATH=/home/git/data/certs/gitlab.crt
  • SSL_SELF_SIGNED=false # 자체 서명 인증서는 사용하지 않겠다는 의미
  • GITLAB_HTTPS=true
  • GITLAB_HOST=domain.com
  • GITLAB_PORT=컨테이너 포트 443에 연결한 로컬 포트 # 위의 그림 참고 (git clone 할때 HTTPS 경로 제공)
  • GITLAB_SSH_PORT=컨테이너 포트 22에 연결한 로컬 포트 # 위의 그림 참고 (git clone 할때 SSH 경로 제공)

로컬 포트 부분에 입력한 포트들은 공유기에서 포트 포워딩을 해야 외부에서도 접근이 가능하다.
이 부분을 제대로 안하면 애당초 연결이 안될 수 있으니 반드시 신경 써야 한다.

시놀로지 DSM의 SSH 연결

연결에 앞서 설정을 변경한다.

  • 제어판 - 터미널 및 SNMP - 터미널
  • SSH 서비스 활성화와 사용할 포트 지정
  • 기본 포트인 22를 사용하지 않는 경우 공유기에서 해당 포트에 대한 포트포워딩 적용


putty 같은 앱을 사용하여 시놀로지 터미널에 연결한다.

  • 로그인 계정과 암호는 DSM과 동일
  • 공유기에서 해당 포트에 대한 포트포워딩 필요 (공유기에 함께 연결 된 장비라면 패스)

 

 

시놀로지에 저장 된 인증서 확인

아래 경로로 이동하면 6글자의 인증서 폴더를 확인할 수 있다.

$ cd /usr/syno/etc/certificate/_archive/ 
$ ls


폴더가 여러 개인 경우 아래 명령으로 인증서 정보를 확인한다.

$ cd /usr/syno/etc/certificate/_archive/ 
$ ls 
$ cd xxxxxx # ls 명령으로 확인한 인증서 폴더명 
$ openssl x509 -text -noout -in fullchain.pem

 

gitlab 공유 폴더에 인증서 복사

인증서를 찾은 경우 해당 파일을 Gitlab 컨테이너와 공유할 폴더를 생성한다.

공유 폴더 생성
gitlab 컨테이너와 볼륨을 공유할 NAS의 경로이다.

  • 물론 경로는 변경 가능하다.
  • 컨테이너 설정에서 공유 볼륨 경로를 수정해야 한다. (아래 값을 사용해도 수정 필요)
$ mkdir /volume1/docker/gitlab/gitlab/certs 


생성한 공유 폴더에 인증서 복사

$ sudo \cp -f privkey.pem /volume1/docker/gitlab/gitlab/certs/gitlab.key; 
$ sudo \cp -f fullchain.pem /volume1/docker/gitlab/gitlab/certs/gitlab.crt;


dhparam.pem 파일 생성
필수 (MUST)는 아니나 권장 (RECOMMEND) 정도이다.

  • 시놀로지 Docker에 터미널 (SSL) 연결 된 상태여야 한다.
  • 시간이 오래 걸린다.
$ cd /volume1/docker/gitlab/gitlab/certs 
$ openssl dhparam -out dhparam.pem 4096

 

 

공유 설정 및 gitlab 재실행

시놀로지 Docker를 실행하고 컨테이너 탭의 synology_gitlab을 선택한다.
상단의 '편집'을 클릭하고 볼륨 탭에서 아래 경로를 추가한다.

  • 파일/폴더 - /volume1/docker/gitlab/gitlab
  • 마운트 경로 - /home/git/data
  • 유형 - rw


시놀로지 패키지 센터를 실행하고, GitLab을 선택하고 재시작한다.

SSL 정상 적용 확인

설정한 HTTPS 포트로 접속하여 실행 여부를 확인한다.

  • 누차 강조하지만 공유기의 포트포워딩을 확인한다.
  • 인증서 관련 '안전하지 않음' 메시지는 출력되지 않는다.

 

인증서 자동 갱신

Let's Encrypt 인증서는 유효기간이 90일이라 갱신 주기가 매우 짧다.
기본적으로 시놀로지 NAS가 인증서 갱신을 해주지만, GitLab까지 자동 적용되지 않는다.
그렇다고 매번 일정을 챙겨가며 갱신 된 인증서를 적용하기는 번거롭고 불편하다.

이러한 경우 아래 포스팅을 참고하여 자동 갱신되도록 설정한다.

 

시놀로지 NAS의 GitLab 인증서 자동 갱신하기

시놀로지 NAS에 GitLab을 셋팅하고 Let's Encrypt 인증서로 SSL 설정까지 마쳤다면 문제가 하나 있다. Let's Encrypt 인증서의 유효 기간이 90일로 너무 짧다. (유료 인증서의 경우 1년~10년까지 가능) 시놀로

www.bearpooh.com

 

반응형