vault backup: 2026-03-11 00:42:21
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
---
|
||||
title: "Déploiement d'Apache Guacamole via Docker sur Debian 12 (Bookworm)"
|
||||
description:
|
||||
tags: []
|
||||
date: 2026-03-11 00:27
|
||||
lastmod: 2026-03-11 00:27
|
||||
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.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user