본문 바로가기
서버/리눅스 서버

Apache Guacamole docker 를 통해 설치하기

by ㅋㅋ잠자 2022. 4. 13.
728x90

안녕하세요? 도정진입니다.

 

이전에 아래와 같이 guacamole 을 날로 설치해보고 호스트에 직접 설치해 보기도 했는데요. 이제는 그렇게 어렵게 시도하지 않아도 명령어 몇방이면 쉽게 설치가 가능하여 아래와 같이 글을 작성합니다.

 

기본적으로 아래의 구성으로 구동됩니다.

1. mysql 서버

2. guacd 

3. 앱서버인 guacamole web

# 이전 작성글
https://blog.djjproject.com/124
https://blog.djjproject.com/131
https://blog.djjproject.com/148
https://blog.djjproject.com/150
https://blog.djjproject.com/240
https://blog.djjproject.com/204
https://blog.djjproject.com/173

 

1. 필요 컨테이너 pull 하기

필요 컨테이너는 guacamole/guacd, guacamole/guacamole, mysql/mysql-server 입니다.

어쩌면 한방에 좀 되면 좋지 않았나 싶기는 한데 이렇게 분리하여 운영하는게 차후 마이크로 서비스와 연관이 있어 보입니다. 전에는 guacd 이거 하나 올리려고 컴파일 하고 난리가 났었습니다.

root@debian:~# docker pull guacamole/guacamole
root@debian:~# docker pull guacamole/guacd
root@debian:~# docker pull mysql/mysql-server

 

2. mysql-server 설정하기

일단 초기 init db 를 넣어야합니다.

아래와 같이 guacamole 이미지에서 추출합니다.

root@debian:~# docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > initdb.sql
root@debian:~# ls -li | grep initdb
2888581 -rw-r--r-- 1 root       root          23050 Apr 13 01:30 initdb.sql

아래의 명령으로 mysql-server 를 실행합니다.

root@debian:~# docker run -dit --name guacd_mysql --restart unless-stopped -e MYSQL_ROOT_PASSWORD='password' mysql/mysql-server

정상적으로 실행중인지 확인합니다.

root@debian:~# docker logs guacd_mysql -f
2022-04-12T16:35:30.916642Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-04-12T16:35:31.293873Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2022-04-12T16:35:31.576546Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2022-04-12T16:35:31.576603Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2022-04-12T16:35:31.611006Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
2022-04-12T16:35:31.611067Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.28'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server - GPL.

처음에 생성한 db를 컨테이너에 넣어줍니다.

root@debian:~# docker cp initdb.sql guacd_mysql:/opt

다음으로 컨테이너에 접근하여 기본 계정을 추가하고 db를 넣습니다.

root@debian:~# docker exec -it guacd_mysql /bin/sh
sh-4.4#

sh-4.4# mysql -u root -p'password'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.28 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
mysql> create database guacamole_db;
Query OK, 1 row affected (0.02 sec)

mysql> create user 'guacamole' identified by 'password';
Query OK, 0 rows affected (0.03 sec)

mysql> grant select,insert,update,delete on guacamole_db.* to 'guacamole';
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql> exit
Bye
sh-4.4# cat /opt/initdb.sql | mysql -u root -p'password' guacamole_db
mysql: [Warning] Using a password on the command line interface can be insecure.

 

3. guacd 실행 및 웹앱 실행

root@debian:~# docker run -dit --name guacd --restart unless-stopped guacamole/guacd

guacamole web 을 실행할 때에는 위에서 만든 컨테이너 2개를 링크하여 통신이 가능하도록 설정해야합니다.

root@debian:~# docker run -dit --name guacd_web --restart unless-stopped --link guacd --link guacd_mysql:mysql -e MYSQL_DATABASE=guacamole_db -e MYSQL_USER=guacamole -e MYSQL_PASSWORD=password -p 10800:8080 guacamole/guacamole

로그를 한번 살펴보고 테스트 해봅니다.

16:52:20.924 [localhost-startStop-1] INFO  o.a.g.extension.ExtensionModule - Extension "MySQL Authentication" (mysql) loaded.
16:52:21.225 [localhost-startStop-1] INFO  o.a.g.t.w.WebSocketTunnelModule - Loading JSR-356 WebSocket support...
12-Apr-2022 16:52:23.181 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/home/guacamole/tomcat/webapps/guacamole.war] has finished in [8,723] ms
12-Apr-2022 16:52:23.185 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
12-Apr-2022 16:52:23.204 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 8857 ms

 

4. 테스트

http://ip-addr:10800/guacamole 로 접근하면 아래와 같은 페이지가 열립니다.

초기 아이디 비밀번호는 guacadmin / guacadmin 입니다.

 

5. 기초 설정

기본적으로 생성된 계정을 지우고 새로 생성하여 관리자 계정을 하나 만듭니다.

새로 생성한 계정으로 로그인하여, 기본 계정 guacadmin 을 삭제합니다.

테스트 연결을 생성합니다.

한편, 컨테이너 내부에 있기 때문에 localhost 로 하면 연결이 안되는 경우가 생깁니다.

따라서 호스트쪽의 IP 전체를 입력하여 연결하시면 됩니다.

 

6. 터미널 폰트 문제 / 한글 문제 해결

일단 폰트를 Consolas 를 쓰고 싶으나, D2Coding 폰트가 유명하여 아래 사이트에서 받았습니다.

https://github.com/naver/d2codingfont/releases

 

guacd 컨테이너에 적용해보겠습니다.

# 먼저 컨테이너를 지웁니다.
root@debian:~# docker rm -f guacd
guacd

# 폰트를 받고 풀어줍니다.
root@debian:/opt/d2coding# wget https://github.com/naver/d2codingfont/releases/download/VER1.3.2/D2Coding-Ver1.3.2-20180524.zip

root@debian:/opt/d2coding# unzip D2Coding-Ver1.3.2-20180524.zip
Archive:  D2Coding-Ver1.3.2-20180524.zip
   creating: D2Coding/
  inflating: D2Coding/D2Coding-Ver1.3.2-20180524.ttc
  inflating: D2Coding/D2Coding-Ver1.3.2-20180524.ttf
  inflating: D2Coding/D2CodingBold-Ver1.3.2-20180524.ttf
   creating: D2CodingAll/
  inflating: D2CodingAll/D2Coding-Ver1.3.2-20180524-all.ttc
   creating: D2CodingLigature/
  inflating: D2CodingLigature/D2Coding-Ver1.3.2-20180524-ligature.ttc
  inflating: D2CodingLigature/D2Coding-Ver1.3.2-20180524-ligature.ttf
  inflating: D2CodingLigature/D2CodingBold-Ver1.3.2-20180524-ligature.ttf


# 볼륨을 바인드하여 새로 컨테이너를 생성합니다.
root@debian:/opt/d2coding# docker run -dit --name guacd --restart unless-stopped -v /opt/d2coding/D2Coding:/usr/share/fonts/truetype/d2coding guacamole/guacd

연결 설정에서 아래와 같이 폰트에 입력합니다.

한글폰트도 잘 나옵니다.

 

7. Apache2 프록시와 연동

기존에 아래의 글을 참고하여 서버를 설정하시면 됩니다.

저는 오래전 부터 apache2 로 설정이 되어 있어서 nginx 로는 다음에 리눅스 서버를 새로 설치할 때 넘어갈 생각입니다.

https://blog.djjproject.com/233
https://blog.djjproject.com/182
https://blog.djjproject.com/123

 

간단히 마치겠습니다.

 

감사합니다.

 

 

---- 추가

RDP 를 하나 추가해 보았습니다.

이전보다 매우 부드럽게 작동하며, 동작도 안정적이네요. 다만, 동영상을 볼 정도는 아닙니다.

제일 마음에 드는 것은 한영키가 먹는다는 것이네요 !!

728x90

댓글0