Apache/Guacamole: Unterschied zwischen den Versionen
| Zeile 132: | Zeile 132: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==== ENV ==== | |||
In docker-compose.yml festgelegte Umgebungsvariablen: | |||
{| class="wikitable options big" | {| class="wikitable options big" | ||
Version vom 24. November 2025, 18:01 Uhr
Apache Guacamole - Gateway für den Fernzugriff auf Computersysteme
Beschreibung
Apache Guacamole ist ein freies und quelloffenes Gateway für den Fernzugriff auf Computersysteme, welches von der Apache Software Foundation betreut wird
Plattformunabhängig ermöglicht es Benutzern, ohne einen dedizierten Client über Webbrowser auf entfernte Computer oder virtuelle Maschinen zuzugreifen
- Administratoren können den Zugriff durch ein erweiterbares System für Authentifizierung und Autorisierung regeln, sodass Zielcomputer sicher hinter Guacamole isoliert werden können, ohne direkt im Internet erreichbar zu sein
Für den Fernzugriff nutzt Guacamole die Komponente guacd, die Protokolle wie RDP, VNC oder SSH für den Zugriff auf die jeweiligen Ressourcen verwendet
- Da Guacamole keinen spezifischen Client benötigt, ist keine Agenteninstallation auf den Zielressourcen erforderlich
- Durch die Integration des Clients in Webbrowser können Benutzer ohne zusätzliche Fernwartungssoftware auf ihre Computersysteme zugreifen
Komponenten
Guacamole setzt sich aus verschiedenen Komponenten zusammen
- Die Webanwendung bildet die Schnittstelle, über die die Benutzer mit Guacamole interagieren können
- Diese stellt die visuelle Oberfläche bereit, mit der entfernte Computersysteme über den Browser aufgerufen und gesteuert werden können
- Im Hintergrund arbeitet der Dienst "guacd", welcher als Backend-Dienst fungiert
- Dieser Dienst übersetzt und optimiert dynamisch native Protokolle in das spezifische Guacamole-Protokoll, um eine effiziente Kommunikation und Darstellung im Webbrowser zu ermöglichen
Webanwendung
Die Webanwendung dient als Benutzeroberfläche und ist für Authentifizierung sowie Autorisierung zuständig
- Sie implementiert nicht direkt Fernzugriffsprotokolle
- Stattdessen verlässt sie sich auf den Dienst "guacd", der diese Protokolle ins Guacamole-Protokoll übersetzt
- Die Serverseite dieser Anwendung ist in Java programmiert und wird in einem Servlet-Container, wie Apache Tomcat oder Jetty, ausgeführt
- Auf der Clientseite, die im Webbrowser abläuft, kommt JavaScript zum Einsatz
Dienst "guacd"
"guacd" ist ein Backend-Dienst, der Anfragen von der Webanwendung entgegennimmt und Verbindungen zu entfernten Computersystemen herstellt
- Dabei lädt "guacd" dynamisch Unterstützung für verschiedene Fernzugriffsprotokolle, was bedeutet, dass weder "guacd" noch die Webanwendung die Einzelheiten der verschiedenen Fernzugriffsprotokolle kennen müssen
- Sowohl "guacd" als auch die dazugehörigen Client-Plugins greifen auf die Bibliothek "libguac" zurück, die das Guacamole-Protokoll abstrahiert und die Kommunikation mit der Webanwendung erleichtert
Installation
Installation über Docker Compose
1. Vorbereitung des Arbeitskatalogs
mkdir /opt/guacamole-docker && cd /opt/guacamole-docker
2. Zunächst muss eine Datei namens docker-compose.yml mit folgendem Inhalt erstellt werden:
services:
db:
image: mariadb:latest
container_name: guac-db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: "ROOT_SUPER_SECRET"
MYSQL_DATABASE: "guacamole_db"
MYSQL_USER: "guacamole_user"
MYSQL_PASSWORD: "GUAC_DB_PASSWORD"
volumes:
- db-data:/var/lib/mysql
- ./initdb.sql:/docker-entrypoint-initdb.d/initdb.sql:ro
networks:
- guac-net
guacd:
image: guacamole/guacd:latest
container_name: guacd
restart: unless-stopped
networks:
- guac-net
guacamole:
image: guacamole/guacamole:latest
container_name: guacamole
restart: unless-stopped
depends_on:
- guacd
- db
environment:
GUACD_HOSTNAME: guacd
GUACD_PORT: "4822"
MYSQL_ENABLED: "true"
MYSQL_HOSTNAME: db
MYSQL_PORT: "3306"
MYSQL_DATABASE: "guacamole_db"
MYSQL_USERNAME: "guacamole_user"
MYSQL_PASSWORD: "GUAC_DB_PASSWORD"
WEBAPP_CONTEXT: "ROOT"
networks:
- guac-net
labels:
- "traefik.enable=true"
- "traefik.http.routers.guac.rule=Host(`guacamole.example.com`)"
- "traefik.http.routers.guac.entrypoints=websecure"
- "traefik.http.routers.guac.tls.certresolver=letsencrypt"
- "traefik.http.services.guac.loadbalancer.server.port=8080"
traefik:
image: traefik:latest
container_name: traefik
restart: unless-stopped
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
# HTTP > HTTPS
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
# Let's Encrypt ACME HTTP challenge
- "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
- "--certificatesresolvers.letsencrypt.acme.email=admin@example.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./acme.json:/acme.json
networks:
- guac-net
volumes:
db-data:
networks:
guac-net:
ENV
In docker-compose.yml festgelegte Umgebungsvariablen:
| Variable | Wert | Beschreibung |
|---|---|---|
| MYSQL_ROOT_PASSWORD | ROOT_SUPER_SECRET | Root-Passwort des MariaDB-Servers |
| MYSQL_DATABASE | guacamole_db | Name der Guacamole-Datenbank, die vom MariaDB-Container erstellt und vom Guacamole-Server verwendet wird |
| MYSQL_USER | guacamole_user | Datenbankbenutzer für Guacamole (wird im MariaDB-Container angelegt und vom Guacamole-Server genutzt) |
| MYSQL_PASSWORD | GUAC_DB_PASSWORD | Passwort des Guacamole-Datenbankbenutzers |
| GUACD_HOSTNAME | guacd | Hostname bzw. Docker-Servicename des guacd-Dienstes |
| GUACD_PORT | 4822 | TCP-Port, auf dem guacd Verbindungen annimmt |
| MYSQL_ENABLED | true | Aktiviert die MySQL-/MariaDB-Authentifizierung im Guacamole-Server |
| MYSQL_HOSTNAME | db | Hostname bzw. Docker-Servicename des MariaDB-Servers |
| MYSQL_PORT | 3306 | TCP-Port des MariaDB-Servers |
| MYSQL_USERNAME | guacamole_user | Datenbankbenutzername, den der Guacamole-Server für Verbindungen verwendet |
| MYSQL_PASSWORD | GUAC_DB_PASSWORD | Passwort des von Guacamole verwendeten Datenbankbenutzers |
| WEBAPP_CONTEXT | ROOT | Kontextpfad der Guacamole-Webanwendung; ROOT platziert die Anwendung direkt unter / anstatt unter /guacamole |
3. Jetzt muss die Struktur der Guacamole-Datenbank vorbereitet werden.
docker run --rm guacamole/guacamole:latest /opt/guacamole/bin/initdb.sh --mysql > initdb.sql
- Dieser Befehl generiert das SQL-Schema Guacamole, ohne das die Datenbank die erforderlichen Tabellen und Anfangsdatensätze nicht erstellen kann
4. Um das Zertifikat zu erhalten, müssen Sie außerdem die Datei acme.json erstellen
touch acme.json && chmod 600 acme.json
5. Start der Container
docker compose up -d
- Die Weboberfläche ist unter folgender Adresse erreichbar: http://<IP_or_Domain_Name>:8080/
Anhang
Siehe auch
Links
Weblinks
- https://de.wikipedia.org/wiki/Apache_Guacamole
- https://guacamole.apache.org
- https://www.howtoforge.de/anleitung/so-installierst-du-apache-guacamole-unter-debian-11/
- https://computingforgeeks.com/install-and-use-guacamole-remote-desktop-on-debian/
- https://guacamole.apache.org/doc/1.4.0/gug/guacamole-docker.html