Cómo instalar Apache Guacamole como contenedor Docker en Ubuntu

Apache Guacamole es una aplicación de escritorio remoto sin cliente, gratuita y de código abierto, que te permite acceder a máquinas de Escritorio y Servidores remotos a través de un navegador web. Soporta protocolos estándar como VNC, RDP y SSH, y utiliza HTML5 para la conexión remota. Puede funcionar en la mayoría de las distribuciones de Linux, y el cliente se ejecuta en cualquier navegador web moderno. No necesitas instalar ningún software en tu sistema. Sólo tienes que navegar y conectarte a cualquier servidor remoto definido en tu servidor.

En este post, te mostraremos cómo instalar el servidor y el cliente Apache Guacamole con Docker en Ubuntu 22.04.

Requisitos previos

  • Un servidor que ejecute Ubuntu 22.04.
  • Una contraseña de root configurada en el servidor.

Instalar el motor Docker

Siempre es recomendable instalar la última versión de Docker en tu servidor.

Primero, instala las dependencias necesarias utilizando el siguiente comando:

apt install ca-certificates curl gnupg lsb-release -y

Tras instalar todas las dependencias, añade la clave GPG de Docker y el repositorio con el siguiente comando:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor > /etc/apt/trusted.gpg.d/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list

A continuación, actualiza el repositorio e instala el paquete Motor Docker con el siguiente comando:

apt update -y
apt install docker-ce docker-ce-cli containerd.io -y

Una vez finalizada la instalación, verifica la versión de Docker con el siguiente comando:

docker --version

Deberías obtener la siguiente salida:

Docker version 20.10.18, build b40c2f6

Instalar Docker Compose

También tendrás que instalar Docker Compose en tu servidor. Puedes instalarlo con el siguiente comando:

curl -sL "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

A continuación, verifica la versión de Docker Compose utilizando el siguiente comando:

docker-compose --version

Obtendrás la siguiente salida:

docker-compose version 1.29.2, build 5becea4c

Descargar Servidor y Cliente Apache Guacamole

En primer lugar, tendrás que descargar la imagen del Servidor y Cliente de Apache Guacamole del registro de Docker.

En primer lugar, descarga la imagen del servidor con el siguiente comando:

docker pull guacamole/guacd

Deberías ver la siguiente salida:

Using default tag: latest
latest: Pulling from guacamole/guacd
4b7b4a8876e2: Pull complete 
4e542e9cf89d: Pull complete 
9741340fbbb2: Pull complete 
96fa725029d6: Pull complete 
0f0a6df13f2a: Pull complete 
a4fa6e99a790: Pull complete 
07365dfaa371: Pull complete 
Digest: sha256:efdc09beba21e2c5d7c8c77e8c6b95ffd173d75645c9c41b6024f5b835d2a034
Status: Downloaded newer image for guacamole/guacd:latest
docker.io/guacamole/guacd:latest

En primer lugar, descarga la imagen del cliente con el siguiente comando:

docker pull guacamole/guacamole

Deberías ver el siguiente resultado:

Using default tag: latest
latest: Pulling from guacamole/guacamole
2b55860d4c66: Pull complete 
2ca45fc4c4ca: Pull complete 
0cd32add6672: Pull complete 
ac52cbbb8ca2: Pull complete 
7f7dc3a9f4cc: Pull complete 
5d7996a24402: Pull complete 
4819d3e4118d: Pull complete 
055afbac1f72: Pull complete 
23ee772344b7: Pull complete 
e44569de6126: Pull complete 
f7d7e8014b18: Pull complete 
Digest: sha256:8a8db8cf9f5359aa20547382213a42a720ea1c5fe86460ded727061e1995d9f2
Status: Downloaded newer image for guacamole/guacamole:latest
docker.io/guacamole/guacamole:latest

A continuación, verifica las imágenes descargadas con el siguiente comando:

docker images

Obtendrás la siguiente salida:

REPOSITORY            TAG       IMAGE ID       CREATED        SIZE
guacamole/guacd       latest    4086ac9e35a7   9 hours ago    271MB
guacamole/guacamole   latest    959856a45436   10 hours ago   432MB

Iniciar Apache Guacamole Contenedor MySQL

En primer lugar, necesitarás al menos un contenedor de base de datos para la autenticación de Apache Guacamole. Puedes descargar y lanzar el contenedor MySQL con el siguiente comando:

docker run --name guacamoledb -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=guacdb -d mysql/mysql-server

Obtendrás la siguiente salida:

latest: Pulling from mysql/mysql-server
cdd8b07c6082: Pull complete 
c2f1720beca1: Pull complete 
39f143a8d6de: Pull complete 
118a8285b641: Pull complete 
b45cbcaf75c7: Pull complete 
d4574372e600: Pull complete 
1f565a3cbc52: Pull complete 
Digest: sha256:e30a0320f2e3c7b7ee18ab903986ada6eb1ce8e5ef29941b36ec331fae5f10b2
Status: Downloaded newer image for mysql/mysql-server:latest
c7a9309eac20a7d0bb6f0a16460bf2b678aae741c201efae8974ea64a3736595

A continuación, crea un directorio para almacenar la base de datos:

mkdir -p /opt/guacamole/mysql

A continuación, genera el script de inicialización de MySQL con el siguiente comando:

docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --mysql > /opt/guacamole/mysql/01-initdb.sql

A continuación, copia el script de inicialización de la base de datos MySQL Guacamole en el contenedor Docker MySQL:

docker cp /opt/guacamole/mysql/01-initdb.sql guacamoledb:/docker-entrypoint-initdb.d

A continuación, conéctate al contenedor de la base de datos MySQL con el siguiente comando:

docker exec -it guacamoledb bash

Una vez conectado, obtendrás el siguiente intérprete de comandos:

bash-4.4# 

A continuación, lista el script de inicialización de MySQL con el siguiente comando:

cd /docker-entrypoint-initdb.d/
ls

Salida:

01-initdb.sql

A continuación, conéctate a la shell de MySQL con el siguiente comando:

mysql -u root -p

A continuación, cambia la base de datos a guacd e inicializa la base de datos Guacamole:

use guacdb;
source 01-initdb.sql;

A continuación, verifica todas las tablas con el siguiente comando:

show tables;

Obtendrás la siguiente salida:

+---------------------------------------+
| Tables_in_guacdb                      |
+---------------------------------------+
| guacamole_connection                  |
| guacamole_connection_attribute        |
| guacamole_connection_group            |
| guacamole_connection_group_attribute  |
| guacamole_connection_group_permission |
| guacamole_connection_history          |
| guacamole_connection_parameter        |
| guacamole_connection_permission       |
| guacamole_entity                      |
| guacamole_sharing_profile             |
| guacamole_sharing_profile_attribute   |
| guacamole_sharing_profile_parameter   |
| guacamole_sharing_profile_permission  |
| guacamole_system_permission           |
| guacamole_user                        |
| guacamole_user_attribute              |
| guacamole_user_group                  |
| guacamole_user_group_attribute        |
| guacamole_user_group_member           |
| guacamole_user_group_permission       |
| guacamole_user_history                |
| guacamole_user_password_history       |
| guacamole_user_permission             |
+---------------------------------------+

A continuación, crea un usuario admin y establece una contraseña con el siguiente comando:

create user guacadmin@'%' identified by 'password';
grant SELECT,UPDATE,INSERT,DELETE on guacdb.* to guacadmin@'%';

A continuación, vacía los privilegios y sal del intérprete de comandos MySQL con el siguiente comando:

flush privileges;
exit;

A continuación, sal del contenedor MySQL con el siguiente comando:

exit

Ahora puedes verificar el contenedor en ejecución utilizando el siguiente comando:

docker ps

Deberías ver el contenedor MySQL en la siguiente salida:

CONTAINER ID   IMAGE                COMMAND                  CREATED         STATUS                   PORTS                       NAMES
c7a9309eac20   mysql/mysql-server   "/entrypoint.sh mysq…"   2 minutes ago   Up 2 minutes (healthy)   3306/tcp, 33060-33061/tcp   guacamoledb

También puedes comprobar los registros del contenedor con el siguiente comando:

docker logs guacamoledb

Obtendrás la siguiente salida:

[Entrypoint] Starting MySQL 8.0.30-1.2.9-server
2022-10-02T11:31:52.589985Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
2022-10-02T11:31:52.592352Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.30) starting as process 1
2022-10-02T11:31:52.602604Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-10-02T11:31:52.875859Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2022-10-02T11:31:53.131572Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2022-10-02T11:31:53.131639Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2022-10-02T11:31:53.163561Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060, socket: /var/run/mysqld/mysqlx.sock
2022-10-02T11:31:53.163648Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.30'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MySQL Community Server - GPL.

Iniciar Contenedor Servidor Guacamole

Ahora, ejecuta el siguiente comando para iniciar el contenedor servidor Guacamole:

docker run --name guacamole-server -d guacamole/guacd

Puedes comprobar los registros del contenedor con el siguiente comando:

docker logs --tail 10 guacamole-server

Obtendrás la siguiente salida:

guacd[7]: INFO:	Guacamole proxy daemon (guacd) version 1.4.0 started
guacd[7]: INFO:	Listening on host 0.0.0.0, port 4822

Para comprobar el contenedor en ejecución, utiliza el siguiente comando:

docker ps

Obtendrás la siguiente salida:

CONTAINER ID   IMAGE                COMMAND                  CREATED          STATUS                             PORTS                       NAMES
51b2efdab0db   guacamole/guacd      "/bin/sh -c '/usr/lo…"   26 seconds ago   Up 25 seconds (health: starting)   4822/tcp                    guacamole-server
c7a9309eac20   mysql/mysql-server   "/entrypoint.sh mysq…"   3 minutes ago    Up 3 minutes (healthy)             3306/tcp, 33060-33061/tcp   guacamoledb

Iniciar contenedor cliente Guacamole

También puedes iniciar el contenedor cliente Guacamole con el siguiente comando:

docker run --name guacamole-client --link guacamole-server:guacd --link guacamoledb:mysql -e MYSQL_DATABASE=guacdb -e MYSQL_USER=guacadmin -e MYSQL_PASSWORD=password -d -p 80:8080 guacamole/guacamole

A continuación, verifica el contenedor en ejecución con el siguiente comando:

docker ps

Deberías ver la siguiente salida:

CONTAINER ID   IMAGE                 COMMAND                  CREATED              STATUS                                 PORTS                                   NAMES
d4034a72bb69   guacamole/guacamole   "/opt/guacamole/bin/…"   58 seconds ago       Up 57 seconds                          0.0.0.0:80->8080/tcp, :::80->8080/tcp   guacamole-client
51b2efdab0db   guacamole/guacd       "/bin/sh -c '/usr/lo…"   About a minute ago   Up About a minute (health: starting)   4822/tcp                                guacamole-server
c7a9309eac20   mysql/mysql-server    "/entrypoint.sh mysq…"   5 minutes ago        Up 5 minutes (healthy)                 3306/tcp, 33060-33061/tcp               guacamoledb

En este punto, el contenedor Guacamole está iniciado y escucha en el puerto 80. Puedes comprobarlo con el siguiente comando

ss -altnp | grep :80

Obtendrás la siguiente salida:

LISTEN 0      4096         0.0.0.0:80        0.0.0.0:*    users:(("docker-proxy",pid=4006,fd=4))   
LISTEN 0      4096            [::]:80           [::]:*    users:(("docker-proxy",pid=4013,fd=4))   

Acceder al panel de control de Apache Guacamole

Ahora puedes acceder a la interfaz web de Apache Guacamole utilizando la URL http://your-server-ip/guacamole. Deberías ver la pantalla de inicio de sesión de Guacamole:

Apacje Guacamole Escritorio remoto

Introduce las credenciales por defecto:

Usuario: guacadmin

Contraseña: guacadmin

A continuación, haz clic en el botón Iniciar sesión. Deberías ver el panel de control de Guacamole en la siguiente pantalla:

Gestor de conexiones

Conclusión

Enhorabuena! has instalado correctamente el servidor y el cliente Apache Guacamole utilizando Docker en el servidor Ubuntu 22.04. Ahora puedes crear una nueva conexión y acceder al servidor remoto mediante un navegador web. No dudes en preguntarme si tienes alguna duda.

Scroll al inicio