mapletree/guacamole/docker-compose.yml
2026-01-26 15:03:11 -07:00

83 lines
2.7 KiB
YAML

services:
# 1. The Database
guac-db:
image: postgres:15-alpine
container_name: guac-db
user: root
cpus: 2.0
mem_limit: "4096m"
mem_reservation: "1024m"
restart: unless-stopped
environment:
POSTGRESQL_USERNAME: guacamole_user
POSTGRESQL_PASSWORD: apts22$$
POSTGRESQL_DB: guacamole_db
volumes:
- /docker/guacamole/init:/docker-entrypoint-initdb.d:ro # Loads schema on first boot
- /docker/guacamole/db:/var/lib/postgresql/data
networks:
- guac_internal
# 2. The "Proxy Daemon" (Translates RDP/SSH to HTML5)
guacd:
image: guacamole/guacd
container_name: guacd
cpus: 1.0
mem_limit: "1024m"
mem_reservation: "256m"
restart: unless-stopped
networks:
- guac_internal
- guac_ssh
# 3. The Web Interface
guacamole:
image: guacamole/guacamole
container_name: guacamole
restart: unless-stopped
user: root
cpus: 2.0
mem_limit: "3072m" # 3 GB
mem_reservation: "1024m"
depends_on:
- guac-db
- guacd
environment:
GUACD_HOSTNAME: guacd
POSTGRESQL_HOSTNAME: guac-db
POSTGRESQL_DATABASE: guacamole_db
POSTGRESQL_USERNAME: guacamole_user
POSTGRESQL_PASSWORD: apts22$$
CATALINA_OPTS: "-Djava.security.egd=file:/dev/./urandom -Xms1g -Xmx2g"
networks:
- guac_internal
- guac_external # Connects to Traefik
labels:
- "traefik.enable=true"
- "traefik.http.routers.guac.rule=Host(`ssh.mapletree.email`)"
- "traefik.http.routers.guac.entrypoints=websecure"
- "traefik.http.routers.guac.tls=true"
- "traefik.http.services.guac.loadbalancer.server.port=8080"
- "traefik.http.routers.guac.tls.certresolver=myresolver"
- "traefik.docker.network=guac_external"
# Middleware 1: Redirect
- "traefik.http.middlewares.guac-redirect.redirectregex.regex=^https://([^/]+)/?$$"
- "traefik.http.middlewares.guac-redirect.redirectregex.replacement=https://$${1}/guacamole/"
# Middleware 2: Disable Buffering (Stability Fix)
- "traefik.http.middlewares.guac-buffer.buffering.maxResponseBodyBytes=0"
- "traefik.http.middlewares.guac-buffer.buffering.maxRequestBodyBytes=0"
- "traefik.http.middlewares.guac-buffer.buffering.memRequestBodyBytes=0"
- "traefik.http.middlewares.guac-buffer.buffering.memResponseBodyBytes=0"
- "traefik.http.middlewares.guac-buffer.buffering.retryExpression=IsNetworkError() && Attempts() <= 2"
# Apply Both
- "traefik.http.routers.guac.middlewares=guac-redirect,guac-buffer"
networks:
guac_internal:
internal: true
guac_external:
external: true
guac_ssh:
external: true