My boring Blog

Home page di Mauro Frigerio

Installa Guacamole su Docker con Traefik, Postgres e 2FA

03-07-2025 Tempo di lettura 3 minuti Article

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

  1. 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
  1. Il file generato deve essere passato (collegato come volume) al database per importare la struttura necessaria per Guacamole

  2. Lanciare e creare il container del database (potrebbe servire sudo)

sudo docker compose up -d guacamole-db

Guacamole

  1. 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
  1. Guacamole è funzionante e puoi collegarti all’interfaccia all’indirizzo: https://guacamole.example.com I dati per il primo login sono:

    • user: guacadmin
    • password: guacadmin
  2. 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.

  1. Quando l’installazione di Guacamole è funzionante è consigliato attivare l’autentificazione a 2 fattori (2FA).

  2. Aggiungere il parametro TOTP_ENABLED: 'true' al container guacamole. 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