Files
DorkNet/docker-compose.microservices.dokploy.yml
T
Alexa 52e1d4f61c Route microservices through Traefik behind Cloudflare Tunnel
Add scoped Traefik host labels to the gateway and put cloudflared on the
Traefik network so the tunnel hands off to Traefik instead of forwarding
every host straight to the app. Keep backend services internal-only.
2026-06-25 12:04:06 +03:00

236 lines
6.8 KiB
YAML

x-dorknet-service-env: &dorknet-service-env
DORKNET_DOMAIN: ${DORKNET_DOMAIN:?Set DORKNET_DOMAIN in Dokploy}
DORKNET_JWT_SECRET: ${DORKNET_JWT_SECRET:?Set DORKNET_JWT_SECRET in Dokploy}
Database__Provider: postgres
ConnectionStrings__Default: ${DORKNET_POSTGRES_CONNECTION_STRING:-Host=postgres;Port=5432;Database=dorknet;Username=dorknet;Password=${POSTGRES_PASSWORD:-dorknet_dev}}
ConnectionStrings__Redis: redis:6379
S3__Endpoint: ${DORKNET_S3_ENDPOINT:?Set DORKNET_S3_ENDPOINT in Dokploy}
S3__AccessKey: ${DORKNET_S3_ACCESS_KEY:?Set DORKNET_S3_ACCESS_KEY in Dokploy}
S3__SecretKey: ${DORKNET_S3_SECRET_KEY:?Set DORKNET_S3_SECRET_KEY in Dokploy}
S3__Region: ${DORKNET_S3_REGION:-garage}
Photon__AppId: ${Photon__AppId:?Set Photon__AppId in Dokploy}
Photon__VoiceAppId: ${Photon__VoiceAppId:-}
Photon__CloudRegion: ${Photon__CloudRegion:-eu}
DorkNet__DefaultClientVersion: ${DORKNET_DEFAULT_CLIENT_VERSION:-december_2020_12_18}
DorkNet__SupportedVersions__0: ${DORKNET_SUPPORTED_VERSION:-december_2020_12_18}
DorkNet__BuildIdToVersionKey__20201210: ${DORKNET_DECEMBER_BUILD_VERSION_KEY:-december_2020_12_18}
x-dorknet-app-networks: &dorknet-app-networks
networks:
# Internal only — backends are reached by the gateway over `default`,
# never directly by Traefik, so keep them off dokploy-network.
- default
services:
gateway:
build:
context: .
dockerfile: Dockerfile.service
args:
PROJECT_PATH: DorkNet.Gateway/DorkNet.Gateway.csproj
APP_DLL: DorkNet.Gateway.dll
environment:
DORKNET_DOMAIN: ${DORKNET_DOMAIN:?Set DORKNET_DOMAIN in Dokploy}
DorkNet__Services__Identity: http://identity:8080
DorkNet__Services__Rooms: http://rooms:8080
DorkNet__Services__Notify: http://notify:8080
DorkNet__Services__Content: http://content:8080
DorkNet__Services__Social: http://social:8080
DorkNet__Services__Commerce: http://commerce:8080
DorkNet__Services__Platform: http://platform:8080
DorkNet__Services__Moderation: http://moderation:8080
DorkNet__Services__Web: http://web:8080
DorkNet__Services__Monolith: http://monolith:8080
expose:
- "8080"
networks:
- default
- dokploy-network
labels:
# Cloudflare terminates TLS at the edge; the tunnel -> Traefik leg is
# internal HTTP, so route on the `web` entrypoint with no certresolver.
- traefik.enable=true
- traefik.docker.network=dokploy-network
# Scope routing to YOUR domain (apex + subdomains) instead of catch-all:
- traefik.http.routers.dorknet-gw.rule=Host(`${DORKNET_DOMAIN}`) || HostRegexp(`^.+\.${DORKNET_DOMAIN}$`)
- traefik.http.routers.dorknet-gw.entrypoints=web
- traefik.http.services.dorknet-gw.loadbalancer.server.port=8080
depends_on:
- identity
- rooms
- notify
- content
- social
- commerce
- platform
- moderation
- web
- monolith
cloudflared:
image: cloudflare/cloudflared:latest
command: tunnel --no-autoupdate run --token ${CLOUDFLARE_TUNNEL_TOKEN:?Set CLOUDFLARE_TUNNEL_TOKEN in Dokploy}
# Must share dokploy-network so the tunnel can reach the Traefik
# container (dokploy-traefik) by name and hand traffic off to it.
networks:
- dokploy-network
depends_on:
- gateway
restart: unless-stopped
identity:
build:
context: .
dockerfile: Dockerfile.service
args:
PROJECT_PATH: DorkNet.Services.Identity/DorkNet.Services.Identity.csproj
APP_DLL: DorkNet.Services.Identity.dll
environment:
<<: *dorknet-service-env
<<: *dorknet-app-networks
depends_on:
- postgres
- redis
rooms:
build:
context: .
dockerfile: Dockerfile.service
args:
PROJECT_PATH: DorkNet.Services.Rooms/DorkNet.Services.Rooms.csproj
APP_DLL: DorkNet.Services.Rooms.dll
environment:
<<: *dorknet-service-env
<<: *dorknet-app-networks
depends_on:
- postgres
- redis
notify:
build:
context: .
dockerfile: Dockerfile.service
args:
PROJECT_PATH: DorkNet.Services.Notify/DorkNet.Services.Notify.csproj
APP_DLL: DorkNet.Services.Notify.dll
environment:
<<: *dorknet-service-env
<<: *dorknet-app-networks
depends_on:
- postgres
- redis
content:
build:
context: .
dockerfile: Dockerfile.service
args:
PROJECT_PATH: DorkNet.Services.Content/DorkNet.Services.Content.csproj
APP_DLL: DorkNet.Services.Content.dll
environment:
<<: *dorknet-service-env
<<: *dorknet-app-networks
depends_on:
- postgres
- redis
social:
build:
context: .
dockerfile: Dockerfile.service
args:
PROJECT_PATH: DorkNet.Services.Social/DorkNet.Services.Social.csproj
APP_DLL: DorkNet.Services.Social.dll
environment:
<<: *dorknet-service-env
<<: *dorknet-app-networks
depends_on:
- postgres
- redis
commerce:
build:
context: .
dockerfile: Dockerfile.service
args:
PROJECT_PATH: DorkNet.Services.Commerce/DorkNet.Services.Commerce.csproj
APP_DLL: DorkNet.Services.Commerce.dll
environment:
<<: *dorknet-service-env
<<: *dorknet-app-networks
depends_on:
- postgres
- redis
platform:
build:
context: .
dockerfile: Dockerfile.service
args:
PROJECT_PATH: DorkNet.Services.Platform/DorkNet.Services.Platform.csproj
APP_DLL: DorkNet.Services.Platform.dll
environment:
<<: *dorknet-service-env
<<: *dorknet-app-networks
depends_on:
- postgres
- redis
moderation:
build:
context: .
dockerfile: Dockerfile.service
args:
PROJECT_PATH: DorkNet.Services.Moderation/DorkNet.Services.Moderation.csproj
APP_DLL: DorkNet.Services.Moderation.dll
environment:
<<: *dorknet-service-env
<<: *dorknet-app-networks
depends_on:
- postgres
- redis
web:
build:
context: .
dockerfile: Dockerfile.service
args:
PROJECT_PATH: DorkNet.Services.Web/DorkNet.Services.Web.csproj
APP_DLL: DorkNet.Services.Web.dll
environment:
<<: *dorknet-service-env
<<: *dorknet-app-networks
depends_on:
- postgres
- redis
monolith:
build:
context: .
dockerfile: Dockerfile
environment:
<<: *dorknet-service-env
<<: *dorknet-app-networks
depends_on:
- postgres
- redis
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: dorknet
POSTGRES_USER: dorknet
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-dorknet_dev}
volumes:
- microservices-postgres:/var/lib/postgresql/data
redis:
image: redis:7-alpine
volumes:
microservices-postgres:
networks:
dokploy-network:
external: true