Zum Inhalt springen

Apache/Guacamole/Docker: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
K Textersetzung - „ “ durch „ “
Zeile 12: Zeile 12:
<syntaxhighlight lang="yaml" highlight="" copy line>
<syntaxhighlight lang="yaml" highlight="" copy line>
services:
services:
  db:
db:
    image: mariadb:latest
  image: mariadb:latest
    container_name: guac-db
  container_name: guac-db
    restart: unless-stopped
  restart: unless-stopped
    environment:
  environment:
      MYSQL_ROOT_PASSWORD: "ROOT_SUPER_SECRET"
  MYSQL_ROOT_PASSWORD: "ROOT_SUPER_SECRET"
      MYSQL_DATABASE: "guacamole_db"
  MYSQL_DATABASE: "guacamole_db"
      MYSQL_USER: "guacamole_user"
  MYSQL_USER: "guacamole_user"
      MYSQL_PASSWORD: "GUAC_DB_PASSWORD"
  MYSQL_PASSWORD: "GUAC_DB_PASSWORD"
    volumes:
  volumes:
      - db-data:/var/lib/mysql
  - db-data:/var/lib/mysql
      - ./initdb.sql:/docker-entrypoint-initdb.d/initdb.sql:ro
  - ./initdb.sql:/docker-entrypoint-initdb.d/initdb.sql:ro
    networks:
  networks:
      - guac-net
  - guac-net
  guacd:
guacd:
    image: guacamole/guacd:latest
  image: guacamole/guacd:latest
    container_name: guacd
  container_name: guacd
    restart: unless-stopped
  restart: unless-stopped
    networks:
  networks:
      - guac-net
  - guac-net
  guacamole:
guacamole:
    image: guacamole/guacamole:latest
  image: guacamole/guacamole:latest
    container_name: guacamole
  container_name: guacamole
    restart: unless-stopped
  restart: unless-stopped
    depends_on:
  depends_on:
      - guacd
  - guacd
      - db
  - db
    environment:
  environment:
      GUACD_HOSTNAME: guacd
  GUACD_HOSTNAME: guacd
      GUACD_PORT: "4822"
  GUACD_PORT: "4822"
      REMOTE_IP_VALVE_ENABLED: "true"
  REMOTE_IP_VALVE_ENABLED: "true"
      MYSQL_ENABLED: "true"
  MYSQL_ENABLED: "true"
      MYSQL_HOSTNAME: db
  MYSQL_HOSTNAME: db
      MYSQL_PORT: "3306"
  MYSQL_PORT: "3306"
      MYSQL_DATABASE: "guacamole_db"
  MYSQL_DATABASE: "guacamole_db"
      MYSQL_USERNAME: "guacamole_user"
  MYSQL_USERNAME: "guacamole_user"
      MYSQL_PASSWORD: "GUAC_DB_PASSWORD"
  MYSQL_PASSWORD: "GUAC_DB_PASSWORD"


      WEBAPP_CONTEXT: "ROOT"
  WEBAPP_CONTEXT: "ROOT"
    networks:
  networks:
      - guac-net
  - guac-net
    labels:
  labels:
      - "traefik.enable=true"
  - "traefik.enable=true"
      - "traefik.http.routers.guac.rule=Host(`guacamole.example.com`)"
  - "traefik.http.routers.guac.rule=Host(`guacamole.example.com`)"
      - "traefik.http.routers.guac.entrypoints=websecure"
  - "traefik.http.routers.guac.entrypoints=websecure"
      - "traefik.http.routers.guac.tls.certresolver=letsencrypt"
  - "traefik.http.routers.guac.tls.certresolver=letsencrypt"
      - "traefik.http.services.guac.loadbalancer.server.port=8080"
  - "traefik.http.services.guac.loadbalancer.server.port=8080"


  traefik:
traefik:
    image: traefik:latest
  image: traefik:latest
    container_name: traefik
  container_name: traefik
    restart: unless-stopped
  restart: unless-stopped
    command:
  command:
      - "--providers.docker=true"
  - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
  - "--providers.docker.exposedbydefault=false"


      # HTTP > HTTPS
  # HTTP > HTTPS
      - "--entrypoints.web.address=:80"
  - "--entrypoints.web.address=:80"
      - "--entrypoints.websecure.address=:443"
  - "--entrypoints.websecure.address=:443"
      - "--entrypoints.web.http.redirections.entryPoint.to=websecure"
  - "--entrypoints.web.http.redirections.entryPoint.to=websecure"
      - "--entrypoints.web.http.redirections.entryPoint.scheme=https"
  - "--entrypoints.web.http.redirections.entryPoint.scheme=https"


      # Let's Encrypt ACME HTTP challenge
  # Let's Encrypt ACME HTTP challenge
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
  - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
      - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
  - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
      - "--certificatesresolvers.letsencrypt.acme.email=admin@example.com"
  - "--certificatesresolvers.letsencrypt.acme.email=admin@example.com"
      - "--certificatesresolvers.letsencrypt.acme.storage=/acme.json"
  - "--certificatesresolvers.letsencrypt.acme.storage=/acme.json"


    ports:
  ports:
      - "80:80"
  - "80:80"
      - "443:443"
  - "443:443"


    volumes:
  volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
  - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./acme.json:/acme.json
  - ./acme.json:/acme.json


    networks:
  networks:
      - guac-net
  - guac-net


volumes:
volumes:
  db-data:
db-data:


networks:
networks:
  guac-net:
guac-net:


</syntaxhighlight>
</syntaxhighlight>
Zeile 206: Zeile 206:
| 0 || Erfolg
| 0 || Erfolg
|-
|-
| >0 || Fehler
| >0 || Fehler
|}
|}



Version vom 14. Juni 2026, 00:50 Uhr

Apache/Guacamole/Docker - Installation mit Docker Compose

Beschreibung

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"
   REMOTE_IP_VALVE_ENABLED: "true"
   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: https://<Domain_Name>/

Installation

Aufruf

Optionen

Unix GNU Parameter Beschreibung

Parameter

Umgebungsvariablen

Exit-Status

Wert Beschreibung
0 Erfolg
>0 Fehler

Anwendung

Problembehebung

Konfiguration

Dateien

Datei Beschreibung


Anhang

Siehe auch



Dokumentation

Projekt