136 lines
4.4 KiB
Markdown
136 lines
4.4 KiB
Markdown
---
|
||
title: "Déploiement d'Apache Guacamole via Docker sur Debian 12 (Bookworm)"
|
||
description:
|
||
tags: []
|
||
date: 2026-03-11 00:27
|
||
lastmod: 2026-03-11 01:19
|
||
type:
|
||
- article
|
||
category:
|
||
- "[[Guide]]"
|
||
status: brouillon
|
||
---
|
||
|
||
# Déploiement d'Apache Guacamole via Docker sur Debian 12 (Bookworm)
|
||
|
||
L'installation d'Apache Guacamole peut vite devenir un enfer de dépendances (Java, Tomcat, extensions JDBC). Le passage par Docker simplifie tout, à condition de bien gérer la persistance des données et l'initialisation de la base PostgreSQL.
|
||
|
||
## 1. La Philosophie du Stack
|
||
|
||
Nous utilisons un trio de conteneurs isolés :
|
||
|
||
- **Guacamole Client** : L'interface Web (Java/Tomcat).
|
||
|
||
- **Guacd** : Le moteur natif (proxy RDP/SSH/VNC).
|
||
|
||
- **PostgreSQL** : Le cerveau (stockage des utilisateurs et connexions).
|
||
|
||
|
||
## 2. Préparation du terrain
|
||
|
||
On commence par structurer notre projet sur l'hôte :
|
||
|
||
```Bash
|
||
mkdir ~/guacamole-docker && cd ~/guacamole-docker
|
||
mkdir -p guacamole-home data init
|
||
```
|
||
|
||
## 3. Le Docker-Compose "Gagnant"
|
||
|
||
Le secret d'une installation qui ne casse pas lors des mises à jour réside dans l'utilisation d'un fichier `guacamole.properties` externe.
|
||
|
||
`nano docker-compose.yml`
|
||
|
||
```YAML
|
||
services:
|
||
# Moteur de protocoles
|
||
guacd:
|
||
image: guacamole/guacd
|
||
container_name: guacd
|
||
restart: always
|
||
|
||
# Base de données
|
||
postgres:
|
||
image: postgres:15
|
||
container_name: guac-postgres
|
||
restart: always
|
||
environment:
|
||
POSTGRES_DB: guacamole_db
|
||
POSTGRES_USER: guacamole_user
|
||
POSTGRES_PASSWORD: TonMotDePasseFort
|
||
volumes:
|
||
- ./data:/var/lib/postgresql/data
|
||
- ./init:/docker-entrypoint-initdb.d
|
||
|
||
# Interface Web
|
||
guacamole:
|
||
image: guacamole/guacamole
|
||
container_name: guacamole
|
||
restart: always
|
||
ports:
|
||
- "8080:8080"
|
||
environment:
|
||
GUACD_HOSTNAME: guacd
|
||
POSTGRESQL_HOSTNAME: postgres
|
||
POSTGRESQL_DATABASE: guacamole_db
|
||
POSTGRESQL_USER: guacamole_user
|
||
POSTGRESQL_PASSWORD: TonMotDePasseFort
|
||
volumes:
|
||
- ./guacamole-home/guacamole.properties:/etc/guacamole/guacamole.properties
|
||
depends_on:
|
||
- guacd
|
||
- postgres
|
||
```
|
||
|
||
## 4. Initialisation de la Base de Données
|
||
|
||
C’est l'étape où 90% des installations échouent. Il faut générer le schéma SQL officiel de Guacamole et le donner à manger à Postgres.
|
||
|
||
```Bash
|
||
# Générer le script SQL
|
||
docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --postgresql > ./init/01_initdb.sql
|
||
|
||
# Lancer les conteneurs (Postgres va lire le dossier ./init)
|
||
docker-compose up -d
|
||
```
|
||
|
||
## 5. Configuration Fine (`guacamole.properties`)
|
||
|
||
Pour éviter que Java n'ignore vos variables d'environnement, créez ce fichier :
|
||
|
||
`nano guacamole-home/guacamole.properties`
|
||
|
||
```Properties
|
||
postgresql-hostname: postgres
|
||
postgresql-port: 5432
|
||
postgresql-database: guacamole_db
|
||
postgresql-username: guacamole_user
|
||
postgresql-password: TonMotDePasseFort
|
||
# Optionnel : priorité à la DB
|
||
extension-priority: postgresql
|
||
```
|
||
|
||
## 6. Le "Cheat Code" pour le premier accès
|
||
|
||
Si `guacadmin` / `guacadmin` vous renvoie un "Identifiant incorrect" (souvent dû à un souci de hachage lors de l'init), créez un admin de secours directement en SQL :
|
||
|
||
```Bash
|
||
docker exec -i guac-postgres psql -U guacamole_user -d guacamole_db -c "INSERT INTO guacamole_entity (name, type) VALUES ('admin_devops', 'USER');"
|
||
docker exec -i guac-postgres psql -U guacamole_user -d guacamole_db -c "INSERT INTO guacamole_user (entity_id, password_hash, password_salt, password_date) SELECT entity_id, decode('8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918', 'hex'), NULL, CURRENT_TIMESTAMP FROM guacamole_entity WHERE name = 'admin_devops';"
|
||
docker exec -i guac-postgres psql -U guacamole_user -d guacamole_db -c "INSERT INTO guacamole_system_permission (entity_id, permission) SELECT entity_id, permission::guacamole_system_permission_type FROM guacamole_entity, (VALUES ('CREATE_CONNECTION'), ('CREATE_USER'), ('ADMINISTER')) AS p (permission) WHERE name = 'admin_devops';"
|
||
```
|
||
|
||
_Identifiants : `admin_devops` / `admin`_
|
||
|
||
---
|
||
|
||
## 🛠 Tips de DevOps :
|
||
|
||
- **Logs** : Utilisez `docker logs -f guacamole` pour voir les extensions se charger. Vous devez voir `PostgreSQL Authentication loaded`.
|
||
|
||
- **Sécurité** : Une fois connecté, créez votre utilisateur final et **supprimez** les comptes par défaut ou de secours.
|
||
|
||
- **HTTPS** : Ne laissez jamais Guacamole en HTTP (8080). Posez un **Nginx Proxy Manager** ou un **Traefik** devant pour gérer le SSL.
|
||
|
||
|