86 lines
2.9 KiB
YAML
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
|