Tip/Synology

Synology DSM 7.2 - 아파치 과카몰리 도커 설치 및 설정

GUINNESS30 2023. 7. 29. 04:52

 
DSM에서 Container Manager로 하기엔 어차피 SSH를 이용해야할 부분이 있어서
컨테이너 매니저를 통해 설정하는 방법 대신에 시놀로지에 SSH로 바로 접근하거나
웹으로(DSM)으로 SSH를 이용하기 위해 ubuntu 등 리눅스 도커를 이용하여
컨테이너 내 터미널 기능을 이용해서 SSH를 사용하자.
 
oznu/guacamole 등 여러 과카몰리 도커 이미지가 있지만 공식 이미지를 이용해서 설치해본다.
과카몰리는 DB로 postgreSQL 또는 MySQL, SQL Server을 이용하니 원하는 걸로 설치한다.
여기서는 postgreSQL을 이용하여 설치해본다.


1. 필요한 도커 이미지 다운로드

docker pull guacamole/guacamole
docker pull guacamole/guacd
docker pull postgres

2. guacd 설치

(Apache Guacamole 웹앱에서 사용되는 네이티브 서버 사이드 프록시, 즉.. 데몬 / 백그라운드)

docker run --name [guacd 컨테이너 명] -d -p [로컬 포트]:[컨테이너 포트] guacamole/guacd

예) docker run --name some-guacd -d -p 4822:4822 guacamole/guacd

참고) Container Manager에서 guacd 포트 설정

3. postgreSQL 설치 및 세팅

docker run --name [postgres 컨테이너 명] -e POSTGRES_USER=[postgres 유저 ID] -e POSTGRES_PASSWORD=[postgres 유저 PW] -d -p [로컬 포트]:[컨테이너 포트] postgres

예) docker run --name some-postgres -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 15432:5432 postgres (여기서는 로컬 포트 충돌로 15432 으로 변경)

참고) Container Manager에서 postgreSQL 포트 및 환경 설정 (로컬 포트 충돌로 15432 으로 변경)

postgreSQL 컨테이너가 정상적으로 실행되면 데이터베이스와 테이블을 생성해야 하는데
과카몰리에서 필요한 데이터베이스 테이블을 초기화하기 위해 guacamole 이미지에서 스크립트 파일 생성한다.
 

docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh [--postgresql | --mysql | --sqlserver] > [시놀로지 경로]/initdb.sql

예) docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --postgresql > /volume1/docker/initdb.sql

 

주의1) guacamole 공식페이지의 설정방법으로는 뒤에 DB지정하는 옵션에서 postgreSQL은 --postgres로 안내하고 있지만 오류가 발생한다.
initdb.sql을 열어 오류 내용이 표시되는데 사용방법으로 --postgresql 로 표기되어 있으니 이걸로 입력해준다.

참고) initdb.sh 옵션 사용 방법, 사용하는 DB에 맞게 옵션을 입력한다.

주의2) 시놀로지에서 SSH 접속하게되면 기본적으로 루트에서 시작하다보니 guacamole 공식 설정방법대로
' --postgresql >  initdb.sql '을 그대로 입력하면 파일 생성 권한 문제로 오류가 발생한다.
시놀로지에서 Container Manager 을 설치하면 자동으로 생성되는 /volume1/docker 폴더나
별도의 파일 쓰기 권한이 있는 경로로 이동해주고 실행하거나 경로를 지정해서 입력해준다. 예) /volume1/docker/initdb.sql

참고) initdb.sql 파일 저장 경로

 

위에서 생성한 스크립트 파일(initdb.sql)을 postgreSQL 컨테이너로 복사한다.
 

docker cp [시놀로지 경로]/initdb.sql [postgres 컨터이너 명]:[postgres 컨테이너 내부 경로]

예) docker cp /volume1/docker/initdb.sql some-postgres:/tmp

 
postreSQL 컨테이너로 접속하여 데이터베이스를 생성해준다.
 

docker exec -it [컨테이너 명] psql -U [postgres 유저 ID] -c 'create database [데이터베이스 명]'

예) docker exec -it some-postgres psql -U postgres -c 'create database guacamole_db'

 
데이터 베이스를 생성하면 앞서 생성 및 복사한 스크립트를 이용해 테이블을 초기화한다,.
 

docker exec -it [컨테이너 명] psql -U [postgres 유저 ID] -d [데이터베이스 명] -a -f [postgres 컨테이너 내부 경로]/initdb.sql

예) docker exec -it some-postgres psql -U postgres -d guacamole_db -a -f /tmp/initdb.sql


4. guacamole 설치

이제 사전작업은 끝났으므로 guacamole를 guacd 컨테이너 및 postgres 컨테이너와 연결하고
db 사용에 필요한 환경변수를 입력하여 설치한다.
 

docker run --name [guacamole 컨테이너 명] --link [guacd 컨테이너 명]:guacd --link [postgres 컨테이너 명]:postgres -e POSTGRES_DATABASE=[데이터베이스 명] -e POSTGRES_USER=[postgres 유저 ID] -e POSTGRES_PASSWORD=[postgres 유저 PW] -e TOTP_ENABLED=true -d -p [로컬 포트]:[컨테이너 포트] guacamole/guacamole

예) docker run --name some-guacamole --link some-guacd:guacd --link some-postgres:postgres -e POSTGRES_DATABASE=guacamole_db -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=mysecretpassword -e TOTP_ENABLED=true -d -p 9090:8080 guacamole/guacamole (여기서는 로컬 포트 충돌로 9090 으로 변경)

참고) Container Manager에서 guacamole 포트, 환경, 링크 설정 (로컬 포트 충돌로 9090 으로 변경)

이후 브라우저에서 ' http://[시놀로지 IP 또는 URL]:[guacamole 로컬 포트]/guacamole ' 으로 접속하여
정상적으로 페이지가 뜨는지 확인

guacamole 로그인 화면, 본인 도메인 및 역방향 프록시 설정 등 잘 접속되는지 확인한다.

5. guacamole 계정 설정

초기 관리자계정 ID: guacadmin / PW: guacadmin 으로 로그인하면
앞서 guacamole 설치할 때, OTP 관련 환경변수를 추가하였기에
(-e TOTP_ENABLED=true) OTP 등록용 QR코드가 뜬다.
구글 OTP / 시놀로지 Secure SignIn / Microsoft Authenticator 앱 등으로
QR코드나 코드를 입력하여 2차 인증을 등록한다.

QR코드로 2차 인증앱에서 등록하고 인증기의 코드를 입력한다.

접속 후, 관리자 계정 설정을 위해 오른쪽 상단 계정을 선택, 세팅 진입

이후 사용자 추가나 보안을 위해 추가 관리자 계정을 생성 후,
초기 관리자 계정은 삭제하도록 한다. (OTP 다시 등록 ㅠㅠ)

일단 계정 설정까지만 하고 RDP나 SSH 연결이나 기타 설정은 다음 게시물에..
 
후속글)
2023.07.29 - [Tip/Synology] - Synology DSM 7.2 - 아파치 과카몰리 기본 URL 경로 변경

Synology DSM 7.2 - 아파치 과카몰리 기본 URL 경로 변경

2023.07.29 - [Tip/Synology] - Synology DSM 7.2 - 아파치 과카몰리 도커 설치 및 설정 Synology DSM 7.2 - 아파치 과카몰리 도커 설치 및 설정 DSM에서 Container Manager로 하기엔 어차피 SSH를 이용해야할 부분이 있어

blog.jwshin.kr

 
 
참고)
* guacd 설치: https://hub.docker.com/r/guacamole/guacd

Docker

hub.docker.com

* guacamole 설치: https://hub.docker.com/r/guacamole/guacamole

Docker

hub.docker.com

* postgres 설치-1: https://hub.docker.com/_/postgres

postgres - Official Image | Docker Hub

Note: the description for this image is longer than the Hub length limit of 25000, so has been trimmed. The full description can be found at https://github.com/docker-library/docs/tree/master/postgres/README.md. See also docker/hub-feedback#238 and docker/

hub.docker.com

* postgres 설치-2: https://4eda.tistory.com/entry/Synology-에서-Docker-로-PostgreSQL-설치하기

Synology 에서 Docker 로 PostgreSQL 설치하기

안녕하세요, Yo플레입니다. Synology 에서 docker 로 PostgreSQL 설치하기 입니다. AWS 에서 PostgreSQL 을 사용하려고 했는데, 비용이 너무 많이 들어서 이런 저런 방법을 찾다가 Synology NAS 에서 Docker 로 Postgr

4eda.tistory.com

* OTP 설정: https://it-svr.com/apache-guacamolee-google-otp-totp

Apache Guacamole에 Google OTP(TOTP) 적용하기.

안녕하세요. 달소입니다. 이번 글은 앞서 소개해드렸던 원격접속 게이트웨이 서비스인 과카몰리에 보안강화를 위해 구글 OTP를 적용하는방법입니다. 과카몰리에대한 설명과 설치에 대한 글은

it-svr.com