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:
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:
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.