infra/docker-compose.yml
2025-04-21 09:31:22 +00:00

100 lines
3.6 KiB
YAML

services:
traefik:
image: traefik:v2.11
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik/traefik.yml:/etc/traefik/traefik.yml:ro
- ./traefik/dynamic.yml:/etc/traefik/dynamic.yml:ro
- ./traefik/acme.json:/acme.json
labels:
- "traefik.enable=true"
signal:
image: netbirdio/signal:latest
restart: unless-stopped
environment:
- SIGNAL_ADDR=signal.dev.d3h.space:51820
ports:
- "51820:51820/udp"
labels:
- "traefik.enable=true"
- "traefik.http.routers.signal.rule=Host(`signal.dev.d3h.space`)"
- "traefik.http.routers.signal.entrypoints=websecure"
- "traefik.http.routers.signal.tls.certresolver=letsencrypt"
management:
image: netbirdio/management:latest
restart: unless-stopped
volumes:
- ./management:/etc/netbird
- ./management:/var/lib/netbird
labels:
- "traefik.enable=true"
- "traefik.http.routers.management.rule=Host(`management.dev.d3h.space`)"
- "traefik.http.routers.management.entrypoints=websecure"
- "traefik.http.routers.management.tls.certresolver=letsencrypt"
dashboard:
image: netbirdio/dashboard:latest
restart: unless-stopped
environment:
- NB_MANAGEMENT_URL=http://management:80
labels:
- "traefik.enable=true"
- "traefik.http.routers.dashboard.rule=Host(`dashboard.dev.d3h.space`)"
- "traefik.http.routers.dashboard.entrypoints=websecure"
- "traefik.http.routers.dashboard.tls.certresolver=letsencrypt"
postgres:
image: postgres:16
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- ./pgdata:/var/lib/postgresql/data
keycloak:
image: quay.io/keycloak/keycloak:latest
restart: unless-stopped
ports:
- "8080" # для доступа из других контейнеров и дебага
environment:
KEYCLOAK_ADMIN: ${KEYCLOAK_ADMIN}
KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD}
KC_DB: postgres
KC_DB_URL_HOST: postgres
KC_DB_URL_DATABASE: ${POSTGRES_DB}
KC_DB_USERNAME: ${POSTGRES_USER}
KC_DB_PASSWORD: ${POSTGRES_PASSWORD}
KC_PROXY: edge
KC_HTTP_ENABLED: true
KC_HOSTNAME: keycloak.dev.d3h.space
KC_HOSTNAME_STRICT: true
KC_HOSTNAME_STRICT_HTTPS: true
KC_PROXY_HEADERS: xforwarded
KC_FRONTEND_URL: https://keycloak.dev.d3h.space
KC_HOSTNAME_URL: https://keycloak.dev.d3h.space
depends_on:
- postgres
labels:
- "traefik.enable=true"
- "traefik.http.routers.keycloak.rule=Host(`keycloak.dev.d3h.space`)"
- "traefik.http.routers.keycloak.entrypoints=websecure"
- "traefik.http.routers.keycloak.tls.certresolver=letsencrypt"
- "traefik.http.routers.keycloak.middlewares=keycloak-https-headers"
- "traefik.http.services.keycloak.loadbalancer.server.port=8080"
- "traefik.http.middlewares.keycloak-https-headers.headers.customrequestheaders.X-Forwarded-Proto=https"
- "traefik.http.middlewares.keycloak-https-headers.headers.customrequestheaders.X-Forwarded-Scheme=https"
- "traefik.http.middlewares.keycloak-https-headers.headers.customrequestheaders.X-Forwarded-Host=keycloak.dev.d3h.space"
- "traefik.http.routers.keycloak-http.rule=Host(`keycloak.dev.d3h.space`)"
- "traefik.http.routers.keycloak-http.entrypoints=web"
- "traefik.http.routers.keycloak-http.middlewares=redirect-to-https"
entrypoint: ["/opt/keycloak/bin/kc.sh", "start"]