6. Docker 와 Xwiki

6. Docker 와 Xwiki

이제 Synolgoy 쪽의 기능은 거의 끝났습니다. 이제 리눅스 서버에 Docker를 설치하고 필요한 서비스들을 올린다음 Synology가 Reverse Proxy를 해주면 됩니다. 리눅스 서버에 직접 접속하지 않고 Synology를 경유하는 이유는 다음과 같습니다.

  • 인증서를 Synology 쪽에만 설치해 주면 Reverse Proxy뒤의 모든 서비스는 인증서를 설치 하지 않아도 됩니다.
  • 서비스가 계속 늘어나도 dev.example.io/XXXXX 의 XXXXX를 통해서 계속 추가 하면 되므로 접근 일관성이 있습니다.
  • 서비스 되는 물리적 서버가 변경되어도 Reverse Proxy를 수정하면 다른 서버에 접속하게 바꿀 수 있습니다. 유지보수를 위해서 잠깐 내릴때도 점검중 이라는 html을 표시할 수 있습니다(사내 시스템인데 뭐 그렇게 까지 ^^)

Docker

리눅스 서버의 설치와 Docker 의 설치및 사용방법에 대해서는 많은 인터넷 문서가 있으니 여기서는 실제 사용위주로 설명하겠습니다.

  • https://docs.docker.com/install/

저는 Ubuntu Server 18 LTS를 이용했습니다만, 다른 리눅스도 크게 다르지 않습니다.

  • http://releases.ubuntu.com/18.04/

Ubuntu 18의 경우는 OS 인스톨시 서비스 선택화면에서 Docker를 선택하면 OS설치후 자동으로 설치가 되는데, 이때 설치는 apt 가 아닌 snap으로 설치되는 것이라 서비스의 재시작등의 명령이 살짝 다릅니다만 사용하는데는 똑같습니다.

설치된 리눅스 서버의 호스트명은 purple.example.io 라고 하고 Synology local DNS에 등록합니다.

Postgresql

XWiki는 DB가 필요합니다. 나중에 설치될 Gitlab과 Sonar도 DB가 필요합니다. Gitlab의 경우에는 Docker image에 DB도 포함하고 있어서 별도로 설치하는게 더 번거로우므로 그냥 이미지 것을 사용하기로 하고, XWiki와 Sonar를 위한 DB를 설치해야 합니다. 보통의 경우는 MySQL을 많이 사용합니다만, 저는 postgresql을 사용하기로 합니다(https://db-engines.com/en/ranking). 마찬가지로 Postgresql의 설치와 사용법에 대해서는 다른 문서를 참고 하십시오. 여기서는 사용 위주로 설명 드리겠습니다.

우선 /etc/postgresql/10/main/postgresql.conf 를 열어서 listen_addresses =  ‘localhost’항목을 찾아 listen_addresses = ‘localhost,172.17.0.1’ 로 수정해 줍니다. Docker가 설치되면 디폴트로 Container 들은 172.17.0.xx 의 주소를 가지며 호스트는 172.17.0.1 을 가집니다. 그래서 Container가 호스트의 Postgressql에 접속하려면 해당 네트웍에서 접속할 수 있도록 listen 해주어야 합니다.

다음으로 ID/Password를 이용하여 Database에 접속할 수 있도록 pg_hba.conf를 열어서 다음 을 추가해 줍니다.

host all all 172.17.0.0/16 md5

다음 명령으로 postgres 가 docker network에 대해 listen 하고 있는지 확인 합니다.

root@purple:/etc/postgresql/10/main# netstat -an | grep 5432
tcp 0 0 172.17.0.1:5432 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN

 요렇게 나오면 됩니다. 172.17 에 대해 안나온다면, docker보다 postgresql이 더 먼저 실행된 경우이므로 postgresql을 다시 실행해 줍니다.

xwiki가 사용할 Database와 User를 생성해 줍니다.

[anakin@purple ~]sudo -u postgres psql
psql (10.9 (Ubuntu 10.9-0ubuntu0.18.04.1))
Type "help" for help.

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

해당 User로 DB에 접속이 되는지 확인해 봅니다.

[anakin@purple ~]psql -h localhost -U xwikiuser -d xwiki -W
Password for user xwikiuser:
psql (10.9 (Ubuntu 10.9-0ubuntu0.18.04.1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

xwiki=> \q

XWiki

  • 공식 사이트 – https://www.xwiki.org/

적당한 디렉토리를 하나 만듭니다. 저는 ~/docker/xwiki 라고 만들었습니다. 거기서 다음 명령을 수행해 주시면 됩니다. (저의 경우는 ~이 /home/anakin 입니다)

sudo docker run  --detach \
     --publish 8000:8080 \
     --name xwiki \
     --restart always \
     --volume /home/anakin/docker/xwiki/data:/usr/local/xwiki/data \
     -e "DB_USER=xwikiuser" \
     -e "DB_PASSWORD=xwikiuserpassword" \
     -e "DB_DATABASE=xwiki" \
     -e "DB_HOST=172.17.0.1" \
     xwiki:stable-postgres

–publish의 :(콜론) 앞은 호스트 포트 이므로 이렇게 설치되면 localhost:8000 으로 접속하면 위키가 보이게 됩니다. 또한 모든 데이터는 ~/docker/xwiki/data 에 생성 되므로 docker 이미지를 교체해도 데이터는 계속 남게 됩니다.

docker logs -f xwiki 하시면 컨테이너가 실행되면서 남기는 로그들을 볼 수 있으며 문제가 발생했을때 힌트로 삼을 수 있습니다.

root@purple:~/docker/xwiki# sudo docker ps | grep xwiki
3fe72ca4f405 xwiki:stable-postgres “docker-entrypoint.s…” 5 weeks ago Up 4 days 0.0.0.0:8000->8080/tcp xwiki

정상 실행중

이제 브라우저에서 purple.example.io:8000 하면 위키 페이지가 보일 것입니다. 최초 실행시에는 default 위키를 설치할 거냐고 물어 볼것 입니다. 설치해 줍니다. 빈 위키는 아무것도 없으므로 시작하기 어렵습니다. 먼가 잘못되었다 싶으면 Database를 지우고 ~/docker/xwiki/data 디렉토리를 비우고 xwiki를 재실행하면 완전 초기화 되므로 몇번 해보시는 것도 나쁘지 않습니다. 또한 먼가 권한 문제로 로그인 되지 않거나 문제가 발생했을때는 ~/docker/xwiki/data/xwiki.cfg 파일의 xwiki.superadminpassword=xxxx 항목을 보시고 xxxx를 설정하신다음 위키를 재실행 하시면 아이디 superadmin 패스워드 xxxx 로 무조건 로그인이 되며, super admin이기 때문에 모든 권한을 가지고 있어 문제를 해결 할 수 있습니다.

XWiki Install

앞으로 모든 docker image들이 대부분 시각이 UTC로 설정되어 있습니다. 이를 KST(한국표준시로 바꿔야 합니다. 어떤 서비스들은 커맨드라인 혹은 환경변수를 설정하여 줄 수 있지만 저희는 그냥 container에 들어가서 수정해 봅니다(다른 비슷한 일도 수행할 수 있으니까요). 다만 이렇게 수정된 내용에 대해서는 이미지를 교체했을때(새로운 버전으로 업그레이드 했을때) 유지 되지 않는다는 것을 명심하십시오.

쉘에서 다음 명령을 수행 합니다. (영문자 오 아닌 숫자 영 입니다)

sudo docker exec -ti -u 0 xwiki /bin/bash

컨테이너 내부의 쉘 프롬프트로 교체 될 것입니다. 여기서 다음 명령을 수행 하십시오.

unlink /etc/localtime && ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

date 라는 명령을 쳐서 ‘KST’가 나오면 성공입니다. exit 를 쳐서 컨테이너에서 빠져 나옵니다.

LDAP 설정

이제 Xwiki가 Synology NAS의 Directory Server에 연결하여 계정정보를 이용하여 로그인 할 수 있도록 해야 합니다. Xwiki에 Admin으로 로그인하여 우측 상단 햄버거 메뉴를 누르고 Administrator Wiki 를 클릭 합니다. 좌측 메뉴에서 Extensions를 선택하고 ldap 으로 모든 extensions를 검색 합니다.

Extensions

여기서 Legacy LDAP authenticator 와 LDAP Application를 설치해 줍니다. 정상적으로 설치 되었다면 좌측 하단에 새롭게 LDAP 메뉴가 보이게 됩니다.

LDAP Application

다음 항목을 채워 줍니다.

LDAP : YES
LDAP SERVER ADDRESS : 192.168.1.34 (NAS의 IP)
LDAP SERVER PORT : 389
LDAP LOGIN MATCHING : uid={0},cn=users,dc=example,dc=io
LDAP UID ATTRIBUTE NAME : uid

이제 다시 리눅스 서버에서 ~/docker/xwiki/data/xwiki.cfg를 열어 다음을 추가 해줍니다. (웹에서 설정한 내용보다 여기서 설정한 내용이 우선순위가 더 높습니다.)

xwiki.authentication.ldap=1
xwiki.authentication.class=org.xwiki.contrib.ldap.XWikiLDAPAuthServiceImpl
xwiki.authentication.ldap.ssl=0
xwiki.authentication.ldap.timeout=5000
xwiki.authentication.ldap.trylocal=1

이제 wiki를 재실행하고 user 로 로그인해 봅니다. 로그인이 성공해야 합니다. 로그인이 안되고 admin으로도 로그인이 안되면 위에서 말씀 드린 super admin으로 로그인 하면됩니다. 위키가 설치되면 페이지를 꾸며 봅니다.

냉정하기 이를데 없는 첫페이지

Search 설정

Xwiki 11 최신 버전에는 Solr 8 이 번들 되어 있으며 Nori 한글형태소 분석기가 기본 설치되어 있어 한글 형태소 분석기를 따로 설치 하지 않아도 됩니다.

Administater Wiki 좌측 메뉴의 Search 항목을 보시면, 기본 검색 엔진에 Database와 Solr 를 선택 할 수 있습니다. 기본적으로 Solr 가 되어 있을건데, 한국어 검색에 문제가 조금 있습니다. Database로 변경하시면 그럴저럭 사용할 수는 있으나 제대로 된 한국어 검색을 위해서, 그리고 문서가 엄청 많아 졌을때 검색 속도를 위해서 Solr에 한국어 형태소 분석기를 설치/설정해 주어야 합니다(Xwiki 11을 기준으로 작성 되었습니다. 버전이 바뀌어 Solr가 업그레이드 되면 동작 하지 않을 수 있습니다).

https://raw.githubusercontent.com/stopwords-iso/stopwords-ko/master/stopwords-ko.txt 에서 파일을 받아 ~/docker/xwiki/data/solr/xwiki/conf/lang 에 stopwords-ko.txt 라는 이름으로 넣어줍니다(file permission, owner 주의)
~/docker/xwiki/data/solr/xwiki/conf/managed-schema 를 managed-schema.en 으로 복사 하고 첨부된 managed-schema.ko 를 업로드 하셔서 managed-schema로 덮어 씁니다. 또한 jar 파일 두개는 ~/docker/xwiki/data/solr/lib 에 넣어 줍니다. Xwiki를 재시작하고 상단 우측의 돋보기 메뉴를 통해 한글 검색을 해봅니다.
첨부파일(이런식의 배포가 라이센스 위반이라면 알려주십시오) : https://drive.google.com/open?id=1SnGQ9CFao06duBXHCeCVok4D-JV0_3GR

Reverse Proxy

이제 purple.exemple.io:8000 대신에 wiki.example.io 라고 쳤을때 나오게 하려면 DSM의 Reverse Proxy를 수정해야 합니다. DSM에서  제어판-응용 프로그램 포털을 클릭하고 역방향 프록시 탭을 선택한 다음 생성을 클릭합니다. 화면대로 정상 설정된다면 https://wiki.example.io 를 통해 위키가 정상 동작 해야 합니다. HSTS를 체크하면 http로 들어왔을때 https로 연결 됩니다.

Mail 설정

위키의 변경 내역 요약을 메일로 받아 보기 위해서는 메일서버도 셋팅해 줍니다. 저희는 다음 메일을 사용하므로 다음처럼 셋팅하시면 됩니다. 다른 메일서비스를 이용하신다면 해당 메일 서비스에 문의하셔서 주소와 포트정보를 입력 하시면 될것 입니다.

  • EMAIL ADDRESS TO SEND FROM : admin@example.io
  • EMAIL SERVER : smtp.daum.net
  • EMAIL SERVER PORT : 465
  • EMAIL SERVER USER NAME : <daum id>
  • EMAIL SERVER PASSWORD : <daum password>
  • ADDITIONAL PROPERTIES : mail.smtp.auth=true

서비스 업그레이드

운영중 새버전의 이미지가 나와 서비스를 업그레이드 해야 할 수 있습니다.  우선 서비스를 중지 합니다.

sudo docker stop xwiki

DB와 마운트된 디렉토리를 백업 받습니다.

pg_dump -h localhost -U xwikiuser -d xwiki -w -W > backup.sql
tar cvfz ~/docker/xwiki/backup.tgz ~/docker/xwiki/data

docker 의 이미지도 백업 해 둡니다.

sudo docker tag xwiki:stable-postgres xwiki-backup

이제 이미지와 컨테이너를 지우고 포스트 상단의 docker run 커맨드를 다시 수행 합니다.

sudo docker rm xwiki
sudo docker rmi xwiki:stable-postgres
sudo docker run ......

새버전의 이미지를 다시 받아 와서 업그레이드 되어 실행 될것 입니다. 혹시나 실패하는 경우 DB와 data 디렉토리를 복원하고 docker run 을 다시 실행하면 되는데 이때에는 백업 받은 이미지 명 xwiki-backup 으로 실행 하면 됩니다. docker run 명령시 맨 아랫줄에 있던 것이 이미지 명입니다. 업그레이드가 잘되었다면 백업 받은 이미지 xwiki-backup은 삭제 해도 됩니다.

sudo docker rmi xwiki-backup

1 comment

답글 남기기

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