{"id":18,"date":"2025-11-08T20:16:43","date_gmt":"2025-11-08T19:16:43","guid":{"rendered":"https:\/\/techblog.olpajoma.de\/?p=18"},"modified":"2025-11-08T20:45:37","modified_gmt":"2025-11-08T19:45:37","slug":"guacamole-docker-mit-traefik-3-0","status":"publish","type":"post","link":"https:\/\/techblog.olpajoma.de\/index.php\/2025\/11\/08\/guacamole-docker-mit-traefik-3-0\/","title":{"rendered":"Guacamole (Docker Compose) mit Traefik 3.0"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Dieser Beitrag beschreibt die Einrichtung von Guacamole in der bestehenden Docker Compose Umgebung mit lauff\u00e4higem Traefik 3.0, die nach Anleitung von goneuland (<a href=\"https:\/\/goneuland.de\/traefik-v3-installation-konfiguration-und-crowdsec-security\/\">Traefik V3 Installation, Konfiguration und CrowdSec-Security<\/a>) erstellt wurde.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Anlage Containerverzeichnis und Wechsel in selbes:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mkdir \/opt\/containers\/guacamole\ncd \/opt\/containers\/guacamole<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Anlage docker-compose.yml Datei<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">version: '3.9'\n\nservices:\n  guacd:\n    image: guacamole\/guacd:latest\n    container_name: guacd\n    hostname: guacd\n    restart: unless-stopped\n    volumes:\n      - .\/guacd\/drive:\/drive:rw\n      - .\/guacd\/record:\/record:rw\n    networks:\n      - guacamole_net\n\n  guacamole:\n    image: guacamole\/guacamole:latest\n    container_name: guacamole\n    hostname: guacamole\n    restart: unless-stopped\n    depends_on:\n      - guacd\n      - guacamole-db\n    environment:\n      GUACD_HOSTNAME: guacd # Hostname des guacd-Containers\n      MYSQL_ENABLED: \"true\"\n      MYSQL_HOSTNAME: guacamole-db # Hostname des Datenbank-Containers\n      MYSQL_DATABASE: guacamole_db # DB Name\n      MYSQL_USER: guacamole_user\n      MYSQL_PASSWORD: guacamole_2025\n      MYSQL_DRIVER: mysql\n    links:\n        - guacd\n    labels:\n      - \"traefik.enable=true\"\n      - \"traefik.http.routers.guacamole.rule=Host(`www.olpajoma.de`) &amp;&amp; PathPrefix(`\/guacamole`)\"\n      - \"traefik.http.routers.guacamole.entrypoints=websecure\"\n      - \"traefik.http.routers.guacamole.middlewares=default@file\"\n        #- \"traefik.http.routers.guacamole.middlewares=guac-auth,guacprefix\"\n        #- \"traefik.http.middlewares.guac-auth.basicauth.users=USERNAME:PASSWORD\"\n      - \"traefik.http.routers.guacamole.tls=true\"\n      - \"traefik.http.routers.guacamole.tls.certresolver=http_resolver\"\n      - \"traefik.http.routers.guacamole.service=guacamole\"\n      - \"traefik.http.services.guacamole.loadbalancer.server.port=8080\"\n      - \"traefik.docker.network=proxy\"\n    networks:\n      - guacamole_net    # Guacamole internes Netzwerk\n      - proxy # Hausnetz Traefik\n\n\n\n  guacamole-db:\n    image: mariadb:10.9.5\n    container_name: guacamole-db\n    hostname: guacamole-db\n    restart: unless-stopped\n    environment:\n      MYSQL_DATABASE: guacamole_db\n      MYSQL_USER: guacamole_user\n      MYSQL_PASSWORD: guacamole_2025\n      MYSQL_ROOT_PASSWORD: 'Vault2022'\n    networks:\n      - guacamole_net\n    volumes:\n        .\/database:\/var\/lib\/mysql  # DB Dateien persistierend\n\nnetworks:\n    proxy:\n      external: true\n    guacamole_net:\n      external: false\n      #name: guacamole_net\n\n\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Datenbank initialisieren<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Datenbank und Guacamolecontainer starten<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker compose up -d guacamole database<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">DB-Initialisierungsdatei erstellen<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker run --rm guacamole\/guacamole \/opt\/guacamole\/bin\/initdb.sh --mysql > initdb.sql<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kopieren des erstellten Skripts in den DB-Container und ausf\u00fchren<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker cp initdb.sql guacamole-db:\/initdb.sql\ndocker exec -it guacamolde-db bash cat \/initdb.sql | mysql -u root -p guacamole_db<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Alternativ kann die Initialisierung auch automatisch erfolgen. Dazu muss das init-File im Container als Volume zur Verf\u00fcgung gestellt werden. Das Verzeichnis ben\u00f6tigt chmod +x <br><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Abschnitt &#8222;database&#8220; wird dazu um das Volume erweitert:<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  database:\n    image: mariadb:10.9.5\n    container_name: guacamole-db\n    restart: unless-stopped\n    environment:\n      MYSQL_DATABASE: guacamole_db\n      MYSQL_USER: guacamole_user\n      MYSQL_PASSWORD: guacamole_2025\n      MYSQL_ROOT_PASSWORD: 'Vault2022'\n    networks:\n      - guacamole_net\n    volumes:\n      - datenbank:\/var\/lib\/mysql # Datenbank-Daten persistieren\n      - \/opt\/containers\/guacamole\/init:\/docker-entrypoint-initdb.d\n<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Nach Datenbankinitialisierung alle Container starten<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker compose up -d<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Kontrolle der Logfiles<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"bash\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">docker logs guacamole-db\ndocker logs guacamole\ndocker logs guacd<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Anmelden als Standardbenutzer (guacadmin\/guacadmin)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c4ndern des Benutzers, Anlage von Benutzern und Verbindungen <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dieser Beitrag beschreibt die Einrichtung von Guacamole in der bestehenden Docker Compose Umgebung mit lauff\u00e4higem Traefik 3.0, die nach Anleitung&#8230; <a class=\"read-more\" href=\"https:\/\/techblog.olpajoma.de\/index.php\/2025\/11\/08\/guacamole-docker-mit-traefik-3-0\/\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4,5],"tags":[],"class_list":["post-18","post","type-post","status-publish","format-standard","hentry","category-docker","category-guacamole"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/techblog.olpajoma.de\/index.php\/wp-json\/wp\/v2\/posts\/18","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techblog.olpajoma.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techblog.olpajoma.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techblog.olpajoma.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/techblog.olpajoma.de\/index.php\/wp-json\/wp\/v2\/comments?post=18"}],"version-history":[{"count":5,"href":"https:\/\/techblog.olpajoma.de\/index.php\/wp-json\/wp\/v2\/posts\/18\/revisions"}],"predecessor-version":[{"id":27,"href":"https:\/\/techblog.olpajoma.de\/index.php\/wp-json\/wp\/v2\/posts\/18\/revisions\/27"}],"wp:attachment":[{"href":"https:\/\/techblog.olpajoma.de\/index.php\/wp-json\/wp\/v2\/media?parent=18"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techblog.olpajoma.de\/index.php\/wp-json\/wp\/v2\/categories?post=18"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techblog.olpajoma.de\/index.php\/wp-json\/wp\/v2\/tags?post=18"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}