::: IT인터넷 :::

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

정보보안썰문가 곰탱이푸우 2021. 7. 14. 08:20
반응형

DSM 7.0으로 업데이트 되면서 기존에 사용하던 gitlab 패키지가 3rd-party라고 지원을 중단했다.

그래서 gitlab을 삭제하고 DSM 7.0으로 업데이트를 진행했다.

GitLab을 새로 설치하기 위해 Docker를 이용한 방법으로 진행해보았다. 생각보다 쉽지만 트러블슈팅은 복잡하다.

 

DSM 6.x 버전에서 GitLab 패키지를 이용한 설치 방법은 아래 포스팅을 참고한다.

 

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

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

www.bearpooh.com

 

github에서 GitLab 설치를 위한 Docker 파일 다운로드

아래 Docker를 사용했다.

 

sameersbn/docker-gitlab

Dockerized GitLab. Contribute to sameersbn/docker-gitlab development by creating an account on GitHub.

github.com

 

docker-compose.yml 파일을 참고하면 크게 3개의 Docker 이미지로 구성된다. Docker Hub에서 다운로드 할 수 있다.

  • sameersbn/gitlab:14.0.5
  • sameersbn/postgresql:12-20200524
  • redis:6.2

 

위의 프로젝트 코드를 다운로드 또는 클론한다.

 

Docker 이미지 빌드는 하지 않을 것이므로, docker-compose.yml 파일만 사용한다.

 

 

redis, postgresql, gitlab 공유 폴더 생성과 권한 부여

 

redis 공유 폴더 생성과 권한 부여

 

redis의 데이터를 저장할 경로를 생성한다.

 

생성한 redis-data 폴더를 우클릭하여 '속성'을 선택한다.

권한 탭을 클릭하면 사용자 또는 그룹에 대해 해당 경로에 대한 권한을 부여할 수 있다.

 

생성 버튼을 클릭하면 권한 편집기가 나타난다.

  • 사용자 또는 그룹은 SYSTEM을 선택한다. (Docker 컨테이너는 SYSTEM 계정으로 실행된다.)
  • 읽기, 쓰기 부분의 체크박스를 선택하고 '확인'을 클릭한다.

SYSTEM 계정에 대해 해당 폴더에 대한 읽기 & 쓰기 권한이 부여된 것을 확인할 수 있다.

 

 

postgresql 공유 폴더 생성과 권한 부여

 

postgresql의 데이터를 저장할 경로를 생성한다.

 

해당 폴더에 대한 권한 설정은 추가 작업이 필요하므로 별도의 작업을 하지 않고 그대로 둔다.

 

 

gitlab 공유 폴더 생성과 권한 부여

 

gitlab의 데이터를 저장할 경로를 생성한다.

 

해당 폴더에 대한 권한 부여는 redis 공유 폴더 생성과 권한 부여를 참고한다.

 

 

docker-compose.yml 파일 수정 및 업로드

다운로드한 파일을 압축 해제하고 docker-compose.yml 파일을 수정한다.

docker-compose.yml 파일은 gitlab 폴더에 위치한다.

 

redis 수정

docker-compose.yml 파일의 redis 부분 코드를 다음과 같이 수정한다.

redis:
    restart: always
    image: redis:6.2  
    command:
    - --loglevel warning
    volumes:
    # 공유 볼륨 경로 지정
    - /volume1/docker/gitlab/redis-data:/data:Z  
    networks:  
    - bridge

 

postgresql 수정

docker-compose.yml 파일의 postgresql 부분 코드를 다음과 같이 수정한다.

postgresql:
    restart: always
    image: sameersbn/postgresql:12-20200524 
    volumes:
    # 공유 볼륨 경로 지정
    - /volume1/docker/gitlab/postgresql-data:/var/lib/postgresql:Z 
    networks: 
    - bridge
    environment:
    - DB_USER=gitlab
    - DB_PASS=password
    - DB_NAME=gitlabhq_production
    - DB_EXTENSION=pg_trgm,btree_gist

 

gitlab 수정

docker-compose.yml 파일의 gitlab 부분 코드를 다음과 같이 수정한다.

### 예시를 위해 표시한 것으로 전체 코드가 아니다.
# docker-compose.yml 파일과 비교하면서 해당 설정을 변경하거나 추가하면 된다.
# docker-compose.yml 파일 내용 중 삭제한 내용은 없고, 삭제하면 안된다. (오류 발생)

gitlab:
    restart: always
    image: sameersbn/gitlab:14.0.5
    depends_on:
    - redis
    - postgresql
    ports:
    # YOUR_HTTPS_PORT를 사용할 포트로 수정 (공유기 포트포워딩 필요)
    - "YOUR_HTTPS_PORT:443" 
    # YOUR_SSH_PORT를 사용할 포트로 수정 (공유기 포트포워딩 필요)
    - "YOUR_SSH_PORT:22" 
    volumes:
    # 공유 볼륨 경로 지정
    - /volume1/docker/gitlab/gitlab-data:/home/git/data:Z 
    
    ... 중략 ...
    
    - TZ=Asia/Seoul # Asia/Kolkata를 서울로 변경
    - GITLAB_TIMEZONE=Seoul # Kolkata를 서울로 변경
    networks: 
    - bridge

    # 아래 3줄 추가 (인증서 경로) - https://www.bearpooh.com/40 참고
    - SSL_KEY_PATH=/home/git/data/certs/gitlab.key 
    - SSL_DHPARAM_PATH=/home/git/data/certs/dhparam.pem
    - SSL_CERTIFICATES_PATH=/home/git/data/certs/gitlab.crt

    - GITLAB_HTTPS=true # 기본 값은 false
    - SSL_SELF_SIGNED=false

    - GITLAB_HOST=your.domain.path # 외부에서 접근할 URL
    - GITLAB_PORT=YOUR_HTTPS_PORT # ports:에서 지정한 포트로 수정
    - GITLAB_SSH_PORT=YOUR_SSH_PORT # YOUR_SSH_PORT를 ports:에서 지정한 포트로 수정한다.
    
    # 아래 부분은 필요에 따라 수정한다. 별도로 수정하지 않았다.
    - GITLAB_RELATIVE_URL_ROOT=
    - GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
    - GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string
    - GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string

    # 이메일, OAUTH 관련 설정을 변경한다. 해당 기능을 아직 사용할 계획이 없어서 그대로 두었다.

.... 중략 ...

# 아래 3줄 추가 (네트워크)
networks:
  bridge:
    driver: bridge

 

인증서 관련 설정 방법은 다음 포스팅의 'gitlab 공유 폴더에 인증서 복사' 항목을 참고한다.

 

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

참고1) 본 내용은 DSM 6.2.x 버전을 기준으로 작성되었습니다. . 참고2) sameersbn/gitlab Docker 이미지로 DSM 7.0.x에 설치했습니다. 별도 포스팅 예정입니다. 개요 시놀로지 NAS에서 GitLab도 설치 가능하며, D

www.bearpooh.com

 

 

docker-compose.yml 업로드

수정한 docker-compose.yml 파일을 NAS에 업로드한다.

 

docker-compose 실행

docker-compose 실행을 위해 SSH 터미널로 접속해야 한다.

 

아래 포스팅의 '시놀로지 DSM의 SSH 연결' 부분을 참고한다.

 

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

참고1) 본 내용은 DSM 6.2.x 버전을 기준으로 작성되었습니다. . 참고2) sameersbn/gitlab Docker 이미지로 DSM 7.0.x에 설치했습니다. 별도 포스팅 예정입니다. 개요 시놀로지 NAS에서 GitLab도 설치 가능하며, D

www.bearpooh.com

 

docker-compose.yml 파일이 위치한 경로로 이동하고 다음 명령을 실행한다.

사용자 계정이 권한이 없으므로 앞에 sudo를 추가한다.

$ sudo docker-compose up -d

 

 

컨테이너가 생성되었다.

 

시놀로지 NAS의 Docker 앱에서 컨테이너 탭을 확인해보면 postgresql 컨테이너가 재시작을 반복하는 것을 확인할 수 있다.

 

 

로그를 확인해보면 postgresql 컨테이너와 공유한 볼륨 (공유 폴더)의 권한 문제로 인해 발생한다.

 

컨테이너 내부에서 postgres 라는 계정을 사용하는데, 해당 계정의 uid/gid가 101/103이다.

  • uid는 사용자 계정의 ID, gid는 사용자 계정이 속한 그룹의 ID이다.
  • 리눅스에서는 계정 관리에 uid/gid를 사용한다.

 

또한 컨테이너 내부에서 공유 된 폴더에 대한 권한이 실제 권한과 일치하지 않아서 발생하는 문제이다.

  • 컨테이너 내부에서는 0700 권한 사용 (drwx------, 사용자 계정만 읽기쓰기실행 권한 존재, 나머지는 권한 없음)
  • 일종의 트릭인데 NAS의 SSH 터미널에서 공유한 폴더 (postgresql-data)의 권한을 0700으로 지정하면 해결된다.

 

자세한 사항은 아래 내용을 참고한다.

 

Permission issue when migrating PostgreSQL 10 to 11 · Issue #2156 · sameersbn/docker-gitlab

Today I've decide to upgrade PostgreSQL 10 to 11 as was suggested in GitLab admin area notification (was using sameersbn/postgresql:10-2). In my docker-compose.yml I've change PostgreSQL im...

github.com

 

아래 명령을 실행하여 공유 폴더의 권한과 계정을 변경한다.

# 실행중인 컨테이너를 중지하고 컨테이너를 삭제한다.
$ sudo docker-compose down 

# 공유 폴더의 권한을 0700으로 변경한다. -R이므로 recursive하게 하위 폴더에도 적용한다.
$ sudo chmod -R 0700 postgresql-data 
# 해당 폴더의 사용자/그룹 계정을 컨테이너 내부와 통일한다.
$ sudo chown -R 101:103 posgresql-data

 

위의 내용이 적용되면 아래와 같이 변경된다.

  • postgresql-data의 권한은 drwx------ 로 변경되었다.
  • 사용자 계정은 101, 그룹 계정은 103으로 변경되었다.

 

다시 docker-compose 명령을 사용하여 컨테이너를 실행한다.

 

docker-compose는 별도의 프로젝트 명을 지정하지 않으면 컨테이너와 네트워크의 이름에 현재 폴더명을 prefix로 추가한다.

  • gitlab 폴더이므로 gitlab_posgresql_1, gitlab_redis_1, gitlab_gitlab_1 형태로 컨테이너 이름이 생성되었다.
  • 네트워크 이름은 gitlab_bridge로 생성되었다.

 

 

gitlab 정상 동작 확인

NAS의 Docker 앱에서 gitlab_postgresql_1 컨테이너의 로그를 확인해보면 정상적으로 실행되는 것이 확인된다.

 

gitlab에 접속해보면 패스워드 변경 화면이 확인된다. root 계정의 비밀번호를 수정한다.

 

패스워드를 변경하면 로그인 창으로 변경된다.

변경한 root 계정의 비밀번호를 사용하여 로그인한다.  (root / 변경한 비밀번호)

 

 

사용자 계정 생성

비밀번호 변경 후 약 30초~1분 정도 필요하고, 로그인이 되지 않으면 브라우저를 종료하고 새로 실행한다.

 

상단 메뉴의 ▤ MENU 버튼을 누르고 Admin 버튼을 클릭한다.

 

Users를 클릭하고, 우측 끝 부분의 New user 버튼을 클릭한다.

 

사용자의 ID, 사용자 이름, 이메일 주소를 입력한다.

패스워드는 메일로 보낸다고 되어있다.

 

계정을 생성하면 아래와 같은 화면이 출력된다.

docker-compose.yml 파일에 이메일 설정을 하지 않았으므로 비밀번호 변경 메일이 오지 않는다.

우측 상단의 Edit 버튼을 클릭한다.

 

 

하단의 Password 부분에 임시로 사용할 비밀번호를 입력한다.

 

root 계정을 로그아웃하고, 생성한 신규 계정으로 접속하면 패스워드 변경 알림이 나타난다.

  • 로그아웃하고 약 1분 후 브라우저를 종료하고 새로 실행하는 것을 권장한다.
  • 사용할 비밀번호로 변경한다.

 

로그인이 완료되면 초기 화면이 출력된다. gitlab 설치가 완료되었다!

 

 

GitLab에서 Group, Project 생성

gitlab에서 코드 관리를 위한 Group과 Project를 생성하는 방법은 아래 포스팅을 참고한다.

 

gitlab에서 group, project 생성하기

gitlab을 설치하는 과정은 이전 포스팅에서 진행했다. 시놀로지 NAS에서 GitLab 설정 방법 개요 시놀로지 NAS에서 GitLab도 설치 가능하며, DS21x 모델 기준으로 DS216 부터 추가되었다. 아마도 Docker를 DS216

www.bearpooh.com

 

GitLab에서 소스코드 작업

gitlab에서 clone, push, branch 생성과 변경 등의 소스코드 작업 방법은 아래 포스팅을 참고한다.

 

gitlab에서 소스코드 작업하기 (clone, checkout, commit, push)

project와 branch까지 만들었으면 코드 개발을 위해 실제 개발 환경에 코드 저장소를 clone 해야 한다. gitlab에서 project 와 branch 생성하는 것은 아래 포스팅을 참고한다. gitlab에서 group, project 생성하..

www.bearpooh.com

 

반응형