
Dans ce tutoriel, je vais vous expliquer pas à pas comment installer Apache Guacamole avec Docker en utilisant PostgreSQL comme base de données. Cette approche permet de simplifier le déploiement tout en bénéficiant d’une solution fiable pour gérer vos connexions distantes depuis une interface web unique.
Si vous avez l’habitude, j’ai déjà traité à plusieurs reprise l’installation, la configuration et l’utilisation de Guacamole dans différents tutoriels sur le site :
- Guacamole : gérer les accès à votre environnement informatique
- Créer un bastion Guacamole auto-hébergé avec Docker
Dans mes précédentes installations, j’utilisais systématiquement MariaDB comme base de données pour Apache Guacamole, et plus largement pour la majorité des applications que je déployais. Depuis environ un an, je me tourne toutefois davantage vers PostgreSQL. Ce choix est motivé par de meilleures performances sur des bases de données de grande taille (bien que Guacamole ne soit pas particulièrement concerné) mais également par une gestion de la mémoire vive que je juge plus efficace que MariaDB, en particulier dans des environnements Docker.
Dans cet article, je ne traiterai pas de la configuration ni de l’utilisation d’Apache Guacamole. Pour cela, je vous invite à consulter le tutoriel dédié disponible via le lien ci-dessous. Je me concentrerai uniquement sur le déploiement de Guacamole avec Docker.
Sommaire
Prérequis
- Un serveur hôte avec Docker et docker compose d’installer : Ubuntu 24.04 : Installation de Docker et Docker compose
Dans le cadre d’une utilisation quotidienne, une configuration de 2 vCPU et 4 Go de RAM s’est révélée suffisante avec 3/4 utilisateurs simultanés.
Déploiement de Guacamole avec Docker
Afin de vous faciliter le déploiement d’Apache Guacamole avec Docker et PostgreSQL, j’ai préparé sur GitLab l’ensemble des fichiers nécessaires.
Ils sont disponibles à l’adresse suivante : https://git.rdr-it.com/root/docker-compose/-/tree/main/Guacamole-Postgres
Commencer par créer un dossier pour le stack :
mkdir -p /containers/guacamole
Aller dans le dossier :
cd /containers/guacamole
Dans le dossier clone les fichiers dépôts:
bash <(wget -qO- https://git.rdr-it.com/root/scripts/-/raw/master/Linux/rdr-it/get-docker-compse/get.sh) Guacamole-Postgres

Avant de déployer les conteneurs, nous allons passer à la configuration, copier le fichier sample.env en le nommant .env puis éditer le fichier pour la configuration du stack Guacamole + Postgres.
cp sample.env .env nano .env
Pour la configuration, je vous invite à lire le fichier README.md qui vous explique chaque variable d’environnement.
Ensuite exécuter le script run-first.sh qui va récupérer le schéma d’initialisation de la base de données et créer les dossiers.
bash run-first.sh
Pour finir démarrer les conteneurs pour Guacamole :
docker compose up -d
Une fois les conteneurs démarrés et la base de données, vous pouvez aller sur l’interface Web de Guacamole : https://host-ip:port/guacamole/

Les identifiants du par défaut sont guacadmin / guacadmin. Pour des raisons évidentes de sécurité ce mot de passe doit être changé dès la premier connexion.
Pour ce qui est de l’utilisation de Guacamole, je vous laisse vous référencer au tutoriel cité en début de celui-ci.
Configurer un reverse proxy devant Guacamole
Afin de gérer l’accès à Guacamole et de pouvoir accéder à celui-ci par une URL, je vous conseille de placer un reverse proxy devant celui-ci :
Pour ma part j’utilise les deux reverse proxy simultanément, Nginx en frontale qui est le reserve proxy principal qui porte toutes les publications et ensuite sur les serveurs hôtes Docker, Traefik qui va se charger d’envoyer les requêtes vers les conteneurs qui ont une publication Web.
Le virtualhost Nginx :
server{
listen 443 ssl;
http2 on;
server_name bastion.domain.tld;
# Remove headers
more_clear_headers Server;
more_clear_headers X-Powered-By;
# Certificats
ssl_certificate /etc/nginx/ssl/domaintld.crt;
ssl_certificate_key /etc/nginx/ssl/domaintld.key;
location = / {
return 301 /guacamole/;
}
location /guacamole/ {
# A.B.C.D = IP DOCKER HOST
proxy_pass http://A.B.C.D:80/guacamole/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_cookie_path /guacamole/ /guacamole/;
}
}Les labels de configuration de Traefik sur le service guacamole :
labels:
- "traefik.enable=true"
- "traefik.docker.network=proxy"
- "traefik.http.routers.guacamole.rule=Host(`bastion.domain.tld`) && PathPrefix(`/guacamole`)"
- "traefik.http.routers.guacamole.entrypoints=web"
- "traefik.http.services.guacamole.loadbalancer.server.port=8080"
- "traefik.http.routers.guacamole.service=guacamole"
- "traefik.http.routers.guacamole.middlewares=guacamole-headers"
- "traefik.http.middlewares.guacamole-headers.headers.sslProxyHeaders.X-Forwarded-Proto=https"
- "traefik.http.middlewares.guacamole-headers.headers.sslProxyHeaders.X-Forwarded-For=true"
- "traefik.http.middlewares.guacamole-headers.headers.sslProxyHeaders.X-Real-Ip=true"
- "traefik.http.middlewares.guacamole-headers.headers.sslProxyHeaders.X-Forwarded-Port=443"
- "traefik.http.middlewares.guacamole-headers.headers.customRequestHeaders.X-Forwarded-Proto=https"
- "traefik.http.middlewares.guacamole-headers.headers.customRequestHeaders.X-Forwarded-Port=443"Comme vous pouvez le voir j’ai laissé le
/guacamole, afin d’une configuration plus simple avec le passage dans les deux reserve proxy. Dans la configuration du virtualhost Nginx, il y a une redirection 301 de la racine (/) vers le chemin /guacamole.
Conclusion
Le déploiement d’Apache Guacamole avec Docker et PostgreSQL permet de mettre en place rapidement une solution d’accès distant web, fiable et facile à maintenir. Grâce à Docker, l’installation est simplifiée, reproductible et s’intègre parfaitement dans une infrastructure existante, tandis que PostgreSQL offre une base de données robuste et efficace, particulièrement adaptée aux environnements conteneurisés.
Même si Guacamole reste peu exigeant en ressources, cette architecture garantit une bonne évolutivité et une maintenance facilitée sur le long terme. Libre à vous d’adapter cette stack selon vos usages, notamment en matière de sécurité, de sauvegardes ou de haute disponibilité.
Foire aux questions
Apache Guacamole est-il adapté à un usage en production ?
Oui, Apache Guacamole peut être utilisé en production, mais avec certaines limites. Bien qu’il offre de nombreuses fonctionnalités (accès web, journalisation, centralisation des connexions), il reste moins complet en matière de sécurité et de conformité que des solutions dédiées de type PAM.
Cela étant dit, Guacamole constitue une solution nettement plus sécurisée que des accès distants non maîtrisés via des outils comme TeamViewer ou d’autres solutions équivalentes, notamment lorsqu’il est correctement intégré à un annuaire, protégé par une authentification forte et déployé derrière un reverse proxy sécurisé.
Peut-on utiliser MariaDB à la place de PostgreSQL ?
Oui, Guacamole est compatible avec MariaDB/MySQL. PostgreSQL a été choisi ici par préférence personnelle et pour sa gestion des performances et de la mémoire, mais MariaDB reste une alternative tout à fait valable.
Docker est-il obligatoire pour déployer Guacamole ?
Non, Guacamole peut être installé sans Docker. Cependant, l’utilisation de Docker simplifie grandement le déploiement, les mises à jour et la maintenance, en particulier dans des environnements modernes ou multi-services.
Quelle est la configuration minimale recommandée ?
Pour un usage quotidien, il est conseillé de prévoir 2 vCPU et 4 Go de RAM. Cette configuration est à ajuster en fonction du nombre d’utilisateurs simultanés et des types de connexions utilisées.
Guacamole stocke-t-il les mots de passe des connexions ?
Oui, Apache Guacamole peut stocker les identifiants des connexions dans sa base de données en clair.
En effet, ces identifiants doivent pouvoir être récupérés par Guacamole afin d’établir automatiquement les connexions RDP, SSH ou VNC, ce qui explique pourquoi ils peuvent être visibles depuis l’interface web pour les utilisateurs disposant des droits appropriés.
Pour cette raison, Guacamole ne doit pas être considéré comme un coffre-fort de mots de passe. Il est fortement recommandé de limiter l’accès à l’interface d’administration et, lorsque c’est possible, d’utiliser des méthodes d’authentification externes (LDAP, SSO, MFA) ou des solutions dédiées à la gestion des secrets afin de renforcer la sécurité globale.
Il est aussi possible de configurer les connexions sans identifiants, ils seront donc demandé aux utilisateurs au moment de la connexion RDP ou SSH.
