12. Synology Docker

12. Synology Docker

만류했음에도 불구하고, 이미 있는 Synology Docker가 놀고(?) 있는게 아깝거나, 리눅스 서버가 별도로 없는 경우 꼭 Docker로 돌릴 수 밖에 없는 분들을 위해 설명 드립니다. 아마도 전부 다(이제 까지 설명드린 모든 시스템) 설치하시면 메모리 부족 경고가 계속 나올 것입니다. 8기가 이상 설치 하십시오. 인내심도 가지시구요 ^^;

Gitlab

우선은 gitlab 부터 설치 합니다. 패키지 센터 – 제3자( Synology의 한글화가 어색할때가 종종 있는데 이 경우도 그렇습니다)에서 gitlab을 선택하여 설치 합니다. Docker 가 설치되어 있지 않다면 DSM이 알아서 Docker를 먼저 설치 합니다.

설치시 몇가지를 물어 옵니다. 편하신 대로 입력하시면 됩니다만, 우리는 리눅스 서버에 설치 했던것과 일관성있게 하기 위해 다음과 같이 입력 하기로 합니다.

Gitlab 설치에서 설명드린 것럼 응용 프로그램 포털을 통한 역방향 프록시를 설정 합니다. 다만 대상의 호스트 이름을 localhost 라고 줍니다

Gitlab을 설치하고 나면 Docker Image가 세개가 됩니다. 하나는 gitlab, 하나는 Redis, 그리고 Postgres인데 여기서 설치된 Postgresql DB를 Xwiki와 Sonar가 같이 기생해서 사용하도록 하겠습니다.

Docker가 설치되고 DSM 메뉴에서 docker를 실행하면 다음과 같은 화면이 보입니다.

  • 레지스트리 : docker hub에서 이미지를 받아 올 수 있는 메뉴입니다. 여기서 이미지들을 검색해서 다운받을 수 있습니다.
  • 이미지 : 이미 다운 받아진 이미지들이 여기 표시 됩니다.
  • 비디오 형식 : ??!! Container 을 왜 이렇게 번역 했을까요??
  • 네트웍 : docker가 사용중인 가상 스위치 등이 표시 됩니다. 보통은 디폴트인 bridge를 사용합니다. Docker를 이용한 폐쇄 네트웍을 독립적으로 구성할 때 네트웍을 새롭게 만들 수 있습니다.
  • 로그 : 관련 로그가 표시됩니다.

실행이 되면 Docker의 비디오 형식(Container) 에서 synology_gitlab 항목을 볼 수 있습니다. 더블클릭 하고 볼륨 영역을 보시면 어디에 마운트 되었는지 확인 할 수 있으며, Jenkins 설치에서 설명한 것처럼 DSM에 SSH로 로그인 한 후 docker 명령을 직접 사용해도 됩니다.

이제 gitlab이 Directory Server에서 계정을 인증하도록 구성 합니다. 실행 되는게 확인 된다면 종료 하시고, Docker 비디오 형식(Container) 에서 synology_gitlab을 선택 하시고 상단의 편집 메뉴를 누릅니다.

환경 탭을 선택하고 + 버튼을 눌러 아래 항목들을 하나씩 입력합니다. (변수 : 값 입니다)

  • SMTP_ENABLED : true
  • SMTP_DOMAIN : example.io
  • SMTP_HOST : smtp.daum.net
  • SMTP_PORT : 465
  • SMTP_USER : 다음 아이디
  • SMTP_PASS : 다음 패스워드
  • SMTP_OPENSSL_VERIFY_MODE : none
  • SMTP_TLS : true
  • SMTP_STARTTLS : false
  • GITLAB_TIMEZONE : Asia/Seoul
  • GITLAB_HTTPS : true
  • LDAP_UID : uid
  • LDAP_HOST : 172.17.0.1
  • LDAP_BIND_DN : uid=root,cn=users,dc=ldap,dc=com
  • LDAP_BASE : dc=example,dc=io
  • LDAP_PASS : Directory Server 설정시 패스워드
  • LDAP_ACTIVE_DIRECTORY : false
  • LDAP_ENABLED : true

이제 gitlab을 재실행하고 로그인 화면에서 LDAP 탭을 선택한 후 일반 유저로 로그인 해 봅니다.

XWiki

우선 사용할 Database를 만들어야 합니다. Docker-비디오 형식에서 synology_gitlab_postgresql 을 더블클릭 합니다. 상단 터미널 탭을 선택하고 생성 버튼을 누릅니다. 그럼 bash라는 항목이 생기면서 선택하면 터미널 화면이 뜹니다. 여기서 su – postgres 하시면 psql 을 실행 할 수 있습니다. psql 을 이용하여 Xwiki가 사용할 데이터베이스와 user를 생성 합니다.

postgres=# create database xwiki;
 CREATE DATABASE
postgres=# create user xwikiuser with encrypted password 'xwikiuserpassword';
 CREATE ROLE
postgres=# grant all privileges on database xwiki to xwikiuser;
 GRANT
postgres=#\q

synology_gitlab_postgresql 이미지는 docker/gitlab/postgresql 을 마운트 합니다. 따라서 Conainer 안에서 작업을 했다 하더라도 NAS의 해당 디렉토리의 파일에 저장되기 때문에 데이터가 유실되는 일은 없습니다. 이 디렉토리를 백업 하거나 NAS에 SSH로 접속하여 다음 명령을 수행 하시면 데이터 베이스를 별도로 백업 받을 수 있습니다.

docker exec synology_gitlab_postgresql pg_dump -U gitlab_user -w gitlab > gitlab-db-backup.sql

Docker의 레지스트리에서 xwiki를 검색 합니다. XWiki를 더블클릭 하면 버전을 물어 옵니다. XWiki 설치에서 처럼 stable-postgres를 선택하고 다운 받습니다. 마찬가지로 wiki.example.io 로 접속하기 위해 응용 프로그램 포탈에서 역방향 프록시를 잡아 줍니다. 다운로드가 끝나면 이미지를 더블클릭 하여 컨테이너로 만들어 줍니다. 눈치 채셨겠지만 리눅스 서버에서 명령으로 실행 했을 때 사용했던 –publish 는 포트라는 탭에서, –volume 옵션은 볼륨 이라는 탭에서, -e 옵션은 환경 이라는 탭에서 입력해 주면 됩니다. 고급 설정을 누릅니다.

볼륨 탭에서 폴더 추가를 눌러 docker/xwiki 라는 폴더를 만들고 연결 합니다. 마운트 경로에 /usr/local/xwiki/data 를 입력 합니다.

포트설정 탭에서 포트를 8000 으로 바꿔 줍니다.

링크 탭에서 + 를 클릭하고 synology_gitlab_postgresql을 선택하고 별칭에 db라고 입력 합니다. 링크 기능을 사용하지 않고 IP를 직접 적으면 컨테이너가 재실행 될때 마다 IP가 변경될 수 있어 DB접속에 실패 하게 됩니다.

환경 탭에서 +를 눌러서 다음 값들을 차례로 입력 합니다.

  • DB_USER=xwikiuser
  • DB_PASSWORD=xwikipassword
  • DB_DATABASE=xwiki
  • DB_HOST=db

적용을 눌러 컨테이너를 실행 합니다.

나머지 이미지들도 크게 다르지 않습니다. 같은 방법으로 다운받아 설정하고 실행 하면 됩니다.

nginx에서 설정했던 reverse proxy도 proxy_redirect 주소가 purple.example.io에서 localhost로 변경될 뿐입니다.

서비스 업그레이드

Docker의 설정은 백업을 해놓아야 나중에 서비스를 업그레이드 할 때 편리합니다. 우선 컨테이너를 정지 한후 설정 메뉴에서 내보내기를 누릅니다.

대상에 적당한 디렉토리를 정하시고 컨테이너 설정 내보내기를 선택하고 내보내기 버튼을 누릅니다. 이렇게  설정을 저장한 후 Docker 이미지가 업그레이드 되었을때 다음과 같이 업그레이드 할 수 있습니다(주의. docker의 마운트된 볼륨을 반드시 백업 하십시오).

컨테이너를 정지하고 작업-삭제를 눌러 컨테이너를 삭제 합니다. (지우기는 컨테이너를 초기화 하는것)

이미지 메뉴에서 해당 이미지도 삭제 합니다.

레지스트리에 가서 같은 이름의 신버전 이미지를 다시 다운 받습니다. 그런 다음 다시 비디오 형식-설정-가져오기를 눌러 백업했던 파일을 선택하면 컨테이너의 설정 그대로 다시 실행 할 수 있습니다. 하지만 컨테이너를 새로 만든것이기 때문에 터미널에서 작업했던 내용들은 초기화 됩니다(timezone을 바꾸기위해 ln 명령을 사용했던 것등)

1 comment

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다