Guack/docker-compose.yml
2025-11-23 17:32:18 +00:00

86 lines
2.9 KiB
YAML

services:
db:
image: postgres:16-alpine
container_name: guacamole-postgres
restart: unless-stopped
environment:
- POSTGRES_DB=guacamole_db
- POSTGRES_USER=guacamole_user
- POSTGRES_PASSWORD=YourSecureDBPassword123
- TZ=Europe/Ljubljana
volumes:
- db_data:/var/lib/postgresql/data
- ./db-init:/docker-entrypoint-initdb.d:ro
networks: [default]
guacd:
image: guacamole/guacd:latest
platform: linux/amd64
container_name: guacamole-guacd
restart: unless-stopped
networks: [default]
healthcheck:
test: ["CMD", "sh", "-lc", "echo ping | nc -w 1 127.0.0.1 4822"]
interval: 30s
timeout: 5s
retries: 5
guacamole:
image: guacamole/guacamole:latest
# platform: linux/amd64
container_name: guacamole-app
restart: unless-stopped
environment:
- TZ=Europe/Ljubljana
- GUACD_HOSTNAME=guacd
- GUACD_PORT=4822
- POSTGRES_HOSTNAME=db
- POSTGRES_PORT=5432
- POSTGRES_DATABASE=guacamole_db
- POSTGRES_USER=guacamole_user
- POSTGRES_PASSWORD=YourSecureDBPassword123
# NOTE: no WEBAPP_CONTEXT → default is /guacamole
depends_on:
- guacd
- db
networks:
- default
- traefik_default
labels:
- "traefik.enable=true"
# critical when a service is on multiple networks:
- "traefik.docker.network=traefik_default"
# Main router → only /guacamole…
- "traefik.http.routers.guacamole.rule=Host(`guac.rozic-dev.com`) && PathPrefix(`/guacamole`)"
- "traefik.http.routers.guacamole.entrypoints=websecure"
- "traefik.http.routers.guacamole.tls=true"
- "traefik.http.routers.guacamole.tls.certresolver=letsencrypt"
- "traefik.http.services.guacamole.loadbalancer.server.port=8080"
# Root redirect: / → /guacamole/
- "traefik.http.routers.guacamole-root.rule=Host(`guac.rozic-dev.com`) && Path(`/`)"
- "traefik.http.routers.guacamole-root.entrypoints=websecure"
- "traefik.http.routers.guacamole-root.tls=true"
- "traefik.http.routers.guacamole-root.tls.certresolver=letsencrypt"
- "traefik.http.routers.guacamole-root.middlewares=guac-redirect"
- "traefik.http.middlewares.guac-redirect.redirectregex.regex=^https?://([^/]+)(/)?$"
- "traefik.http.middlewares.guac-redirect.redirectregex.replacement=https://$${1}/guacamole/"
- "traefik.http.middlewares.guac-redirect.redirectregex.permanent=true"
# HTTP → HTTPS
- "traefik.http.routers.guacamole-http.rule=Host(`guac.rozic-dev.com`)"
- "traefik.http.routers.guacamole-http.entrypoints=web"
- "traefik.http.routers.guacamole-http.middlewares=https-redirect"
- "traefik.http.middlewares=https-redirect.redirectscheme.scheme=https"
- "traefik.http.middlewares=https-redirect.redirectscheme.permanent=true"
volumes:
db_data:
networks:
traefik_default:
external: true
default:
driver: bridge