Installa Guacamole su Docker con Traefik, Postgres e 2FA
Accedere da remoto a un terminal SSH o a una sessione grafica con VNC/RDP può essere molto utile. In particolare se i device sono molti e se si cambia regolarmente la postazione di lavoro. Guacamole è una delle soluzioni open source sul mercato. Purtroppo non c’è un singolo container docker da installare e non è facile trovare una guida completa per l’installazione dall’inizio alla fine.
Qui sotto ho creato una piccola guida per l’installazione di Guacamole con un database postgres per la gestione degli utente e l’integrazione con Traefik per avere un collegamento https.
Nota
Se vuoi installare Guacamole con il database mySQL guarda questa guida.
Requisiti
- Installazione funzionante di Traefik e relativi certificati per https (vedi esempio di base)
- Accesso con SSH alla macchina dove è installato
docker
Procedura per l’installazione
Database postgres
- Generare il file di inizializzazione per il database postgres (potrebbe servire sudo)
sudo docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --postgresql > initdb.sql
Il file generato deve essere passato (collegato come volume) al database per importare la struttura necessaria per Guacamole
Lanciare e creare il container del database (potrebbe servire sudo)
sudo docker compose up -d guacamole-db
Guacamole
- Creare i due container di Guacamole lanciando il seguente comando (potrebbe servire sudo). Viste le dipendenze dei vari container, verranno creati entrambi.
sudo docker compose up -d guacamole
Guacamole è funzionante e puoi collegarti all’interfaccia all’indirizzo: https://guacamole.example.com I dati per il primo login sono:
- user: guacadmin
- password: guacadmin
Ti consiglio di duplicare l’account di default e crearne uno nuovo di amministratore. Poi eseguire il login con il nuovo account e cancellare quello di default.
2FA per Guacamole
Dalla versione 1.3.0 TOTP è integrato nel container docker (PR 471), purtroppo la documentazione non è ancora stata aggiornata.
Quando l’installazione di Guacamole è funzionante è consigliato attivare l’autentificazione a 2 fattori (2FA).
Aggiungere il parametro
TOTP_ENABLED: 'true'
al containerguacamole
. Al primo login verrà presentato il QR per attivare il 2FA e verrà richiesto d’immettere un codice per confermare.
Docker compose
guacd:
image: guacamole/guacd
container_name: guacd
hostname: guacd
restart: unless-stopped
volumes:
- /volume1/docker/guacamole/guacd/drive:/drive:rw
- /volume1/docker/guacamole/guacd/record:/record:rw
guacamole:
image: guacamole/guacamole:1.6.0
container_name: guacamole
hostname: guacamole
restart: unless-stopped
depends_on:
traefik:
condition: service_started
guacamole-db:
condition: service_started
guacd:
condition: service_started
environment:
GUACD_HOSTNAME: guacd
POSTGRESQL_ENABLED: "true"
POSTGRESQL_HOSTNAME: guacamole-db
POSTGRESQL_DATABASE: guacamole_db
POSTGRESQL_USERNAME: guacamole_user
POSTGRESQL_PASSWORD: ${GUACAMOLE_PASSWORD}
#TOTP_ENABLED: 'true'
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.guacamole.rule=Host(`guacamole.${DOMAIN}`)'
- 'traefik.http.routers.guacamole.entrypoints=web-secure'
- 'traefik.http.routers.guacamole.tls=true'
- "traefik.http.routers.guacamole.tls.certresolver=certificato"
- "traefik.http.routers.guacamole.tls.domains[0].main=*.${DOMAIN}"
- "traefik.http.routers.guacamole.service=guacamoleService"
- "traefik.http.routers.guacamole.middlewares=guacamoleMdl"
- "traefik.http.middlewares.guacamoleMdl.addprefix.prefix=/guacamole"
- "traefik.http.services.guacamoleService.loadBalancer.server.port=8080"
guacamole-db:
container_name: guacamole-db
image: postgres:17-alpine
hostname: guacamole-db
environment:
POSTGRES_DB: guacamole_db
POSTGRES_PASSWORD: ${GUACAMOLE_PASSWORD}
POSTGRES_USER: guacamole_user
TZ: ${TIME_ZONE_ZUERICH}
PGDATA: /var/lib/postgresql/data/pgdata
logging:
driver: "none"
restart: unless-stopped
volumes:
- ./initdb.sql:/docker-entrypoint-initdb.d/initdb.sql #DB configuration file
- /volume1/docker/guacamole/database:/var/lib/postgresql/data/pgdata
Crediti Foto di Steve Buissinne da Pixabay