Files
oc-deploy/docker/demo/docker-compose.dev.yml

415 lines
15 KiB
YAML
Raw Normal View History

2026-04-13 16:35:42 +02:00
version: '3.9'
services:
mongo:
image: 'mongo:latest'
networks:
- oc
ports:
- 27017:27017
container_name: mongo
volumes:
- oc-data:/data/db
- oc-data:/data/configdb
mongo-express:
image: "mongo-express:latest"
restart: always
depends_on:
- mongo
networks:
- oc
ports:
- 8081:8081
container_name: mongo-express
environment:
- ME_CONFIG_BASICAUTH_USERNAME=test
- ME_CONFIG_BASICAUTH_PASSWORD=test
nats:
image: 'nats:latest'
container_name: nats
ports:
- 4222:4222
command:
- "--debug"
networks:
- oc
loki:
image: 'grafana/loki'
container_name: loki
labels:
- "traefik.stack=peer1"
- "traefik.enable=true"
- "traefik.http.routers.loki.entrypoints=web"
- "traefik.http.routers.loki.rule=PathPrefix(`/tools/loki`)"
- "traefik.http.services.loki.loadbalancer.server.port=3100"
- "traefik.http.middlewares.loki-stripprefix.stripprefix.prefixes=/tools/loki"
- "traefik.http.routers.loki.middlewares=loki-stripprefix"
- "traefik.http.middlewares.loki.forwardauth.address=http://oc-auth:8080/oc/forward"
ports :
- "3100:3100"
networks:
- oc
2026-04-15 17:02:28 +02:00
volumes:
- ./loki-data:/loki
2026-04-13 16:35:42 +02:00
hydra:
container_name: hydra
image: oryd/hydra:v2.2.0
environment:
SECRETS_SYSTEM: oc-auth-got-secret
LOG_LEAK_SENSITIVE_VALUES: true
# OAUTH2_TOKEN_HOOK_URL: http://oc-auth:8080/oc/claims
HYDRA_ADMIN_URL: http://hydra:4445
URLS_SELF_ISSUER: http://localhost:8000/hydra
URLS_SELF_PUBLIC: http://localhost:8000/hydra
URLS_LOGIN: http://localhost:8000/auth/login
URLS_CONSENT: http://localhost:8000/auth/consent
URLS_LOGOUT: http://localhost:8000/auth/logout
URLS_ERROR: http://localhost:8000
STRATEGIES_ACCESS_TOKEN: jwt
WEBFINGER_OIDC_DISCOVERY_SUPPORTED_SCOPES: profile,email,phone,roles
WEBFINGER_OIDC_DISCOVERY_SUPPORTED_CLAIMS: name,family_name,given_name,nickname,email,phone_number
DSN: memory
user: root
entrypoint: >
sh -c "
hydra serve all --dev &
echo '⏳ Waiting for Hydra admin API...' &&
until wget -q --spider http://localhost:4445/health/ready; do
sleep 2;
done &&
echo '✅ Hydra is ready. Importing clients...' &&
hydra import oauth2-client /clients.json -e http://hydra:4445 &&
echo '🚀 Clients imported.' &&
wait
"
volumes:
- ./clients.json:/clients.json
networks:
- oc
ports:
- "4444:4444"
- "4445:4445"
deploy:
restart_policy:
condition: on-failure
labels:
- "traefik.stack=peer1"
- "traefik.enable=true"
- "traefik.http.routers.hydra.entrypoints=web"
- "traefik.http.routers.hydra.rule=PathPrefix(`/hydra`)"
- "traefik.http.services.hydra.loadbalancer.server.port=4444"
- "traefik.http.middlewares.hydra-stripprefix.stripprefix.prefixes=/hydra"
- "traefik.http.routers.hydra.middlewares=hydra-stripprefix"
ldap:
image: pgarrett/ldap-alpine
container_name: ldap
volumes:
- "./ldap.ldif:/ldif/ldap.ldif"
networks:
- oc
ports:
- "390:389"
deploy:
restart_policy:
condition: on-failure
keto:
image: oryd/keto:v0.7.0-alpha.1-sqlite
ports:
- "4466:4466"
- "4467:4467"
command: serve -c /home/ory/keto.yml
restart: on-failure
volumes:
- type: bind
source: .
target: /home/ory
container_name: keto
networks:
- oc
traefik:
image: traefik:v3.6
container_name: traefik
restart: unless-stopped
networks:
- oc
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--providers.docker.network=oc"
- "--providers.docker.constraints=Label(`traefik.stack`,`peer1`)"
- "--entrypoints.web.address=:8000"
user: root
ports:
- "8000:8000" # Expose Traefik on port 8000
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
oc-datacenter:
env_file:
- path: ./env.env
required: false
environment:
2026-04-14 10:54:31 +02:00
- OC_MONGO_DATABASE=DC_myDC
- OC_KUBE_CA=${KUBE_CA:-}
- OC_KUBE_CERT=${KUBE_CERT:-}
- OC_KUBE_DATA=${KUBE_DATA:-}
2026-04-13 16:35:42 +02:00
image: '${REGISTRY:-opencloudregistry/}oc-datacenter:latest'
ports:
- 8092:8080
labels:
- "traefik.stack=peer1"
- "traefik.enable=true"
- "traefik.http.routers.datacenter.entrypoints=web"
- "traefik.http.routers.datacenter.rule=PathPrefix(`/datacenter`)"
- "traefik.http.services.datacenter.loadbalancer.server.port=8080"
- "traefik.http.middlewares.datacenter-rewrite.replacepathregex.regex=^/datacenter(.*)"
- "traefik.http.middlewares.datacenter-rewrite.replacepathregex.replacement=/oc$$1"
- "traefik.http.routers.datacenter.middlewares=datacenter-rewrite,auth-datacenter"
- "traefik.http.middlewares.auth-datacenter.forwardauth.address=http://oc-auth:8080/oc/forward"
- "traefik.http.middlewares.auth-datacenter.forwardauth.trustForwardHeader=true"
- "traefik.http.middlewares.auth-datacenter.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
container_name: oc-datacenter
networks:
- oc
oc-scheduler:
environment:
2026-04-14 10:54:31 +02:00
- OC_MONGO_DATABASE=DC_myDC
- OC_KUBE_CA=${KUBE_CA:-}
- OC_KUBE_CERT=${KUBE_CERT:-}
- OC_KUBE_DATA=${KUBE_DATA:-}
2026-04-13 16:35:42 +02:00
image: '${REGISTRY:-opencloudregistry/}oc-scheduler:latest'
labels:
- "traefik.stack=peer1"
- "traefik.enable=true"
- "traefik.http.routers.scheduler.entrypoints=web"
- "traefik.http.routers.scheduler.rule=PathPrefix(`/scheduler`)"
- "traefik.http.middlewares.scheduler-rewrite.replacepathregex.regex=^/scheduler(.*)"
- "traefik.http.middlewares.scheduler-rewrite.replacepathregex.replacement=/oc$$1"
- "traefik.http.routers.scheduler.middlewares=scheduler-rewrite,auth-scheduler"
- "traefik.http.services.scheduler.loadbalancer.server.port=8080"
- "traefik.http.middlewares.auth-scheduler.forwardauth.address=http://oc-auth:8080/oc/forward"
- "traefik.http.middlewares.auth-scheduler.forwardauth.trustForwardHeader=true"
- "traefik.http.middlewares.auth-scheduler.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
ports:
- 8090:8080
container_name: oc-scheduler
networks:
- oc
oc-catalog:
environment:
2026-04-14 10:54:31 +02:00
- OC_MONGO_DATABASE=DC_myDC
2026-04-13 16:35:42 +02:00
image: '${REGISTRY:-opencloudregistry/}oc-catalog:latest'
ports:
- 8087:8080
container_name: oc-catalog
networks:
- oc
labels:
- "traefik.stack=peer1"
- "traefik.enable=true"
- "traefik.http.routers.catalog.entrypoints=web"
- "traefik.http.routers.catalog.rule=PathPrefix(`/catalog`)"
- "traefik.http.middlewares.catalog-rewrite.replacepathregex.regex=^/catalog(.*)"
- "traefik.http.middlewares.catalog-rewrite.replacepathregex.replacement=/oc$$1"
- "traefik.http.routers.catalog.middlewares=catalog-rewrite,auth-catalog"
- "traefik.http.services.catalog.loadbalancer.server.port=8080"
- "traefik.http.middlewares.auth-catalog.forwardauth.address=http://oc-auth:8080/oc/forward"
- "traefik.http.middlewares.auth-catalog.forwardauth.trustForwardHeader=true"
- "traefik.http.middlewares.auth-catalog.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
oc-workspace:
environment:
2026-04-14 10:54:31 +02:00
- OC_MONGO_DATABASE=DC_myDC
2026-04-13 16:35:42 +02:00
image: '${REGISTRY:-opencloudregistry/}oc-workspace:latest'
ports:
- 8089:8080
labels:
- "traefik.stack=peer1"
- "traefik.enable=true"
- "traefik.http.routers.workspace.entrypoints=web"
- "traefik.http.routers.workspace.rule=PathPrefix(`/workspace`)"
- "traefik.http.middlewares.workspace-rewrite.replacepathregex.regex=^/workspace(.*)"
- "traefik.http.middlewares.workspace-rewrite.replacepathregex.replacement=/oc$$1"
- "traefik.http.routers.workspace.middlewares=workspace-rewrite,auth-workspace"
- "traefik.http.services.workspace.loadbalancer.server.port=8080"
- "traefik.http.middlewares.auth-workspace.forwardauth.address=http://oc-auth:8080/oc/forward"
- "traefik.http.middlewares.auth-workspace.forwardauth.trustForwardHeader=true"
- "traefik.http.middlewares.auth-workspace.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
container_name: oc-workspace
networks:
- oc
oc-peer:
environment:
2026-04-14 10:54:31 +02:00
- OC_MONGO_DATABASE=DC_myDC
2026-04-13 16:35:42 +02:00
image: '${REGISTRY:-opencloudregistry/}oc-peer:latest'
labels:
- "traefik.stack=peer1"
- "traefik.enable=true"
- "traefik.http.routers.peer.entrypoints=web"
- "traefik.http.routers.peer.rule=PathPrefix(`/peer`)"
- "traefik.http.middlewares.peer-rewrite.replacepathregex.regex=^/peer(.*)"
- "traefik.http.middlewares.peer-rewrite.replacepathregex.replacement=/oc$$1"
- "traefik.http.routers.peer.middlewares=peer-rewrite,auth-peer"
- "traefik.http.services.peer.loadbalancer.server.port=8080"
- "traefik.http.middlewares.auth-peer.forwardauth.address=http://oc-auth:8080/oc/forward"
- "traefik.http.middlewares.auth-peer.forwardauth.trustForwardHeader=true"
- "traefik.http.middlewares.auth-peer.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
ports:
- 8093:8080
container_name: oc-peer
networks:
- oc
oc-auth:
image: '${REGISTRY:-opencloudregistry/}oc-auth:latest'
ports:
- 8094:8080
container_name: oc-auth
labels:
- "traefik.stack=peer1"
- "traefik.enable=true"
- "traefik.http.routers.auth-sec.entrypoints=web"
- "traefik.http.routers.auth-sec.rule=PathPrefix(`/auth/`)"
- "traefik.http.middlewares.auth-sec-rewrite.replacepathregex.regex=^/auth(.*)"
- "traefik.http.middlewares.auth-sec-rewrite.replacepathregex.replacement=/oc$$1"
- "traefik.http.services.auth-sec.loadbalancer.server.port=8080"
- "traefik.http.routers.auth-sec.middlewares=auth-sec-rewrite,auth-auth-sec"
- "traefik.http.middlewares.auth-auth-sec.forwardauth.address=http://oc-auth:8080/oc/forward"
- "traefik.http.middlewares.auth-auth-sec.forwardauth.trustForwardHeader=true"
- "traefik.http.middlewares.auth-auth-sec.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
environment:
LDAP_ENDPOINTS: ldap:389
LDAP_BINDDN: cn=admin,dc=example,dc=com
LDAP_BINDPW: password
LDAP_BASEDN: "dc=example,dc=com"
LDAP_USER_BASEDN: "ou=users,dc=example,dc=com"
LDAP_ROLE_BASEDN: "ou=AppRoles,dc=example,dc=com"
networks:
- oc
volumes:
- ./pem/private3.pem:/keys/private/private.pem
- ./pem/public3.pem:/keys/public/public.pem
oc-shared:
environment:
- MONGO_DATABASE=DC_myDC
image: '${REGISTRY:-opencloudregistry/}oc-shared:latest'
ports:
- 8091:8080
container_name: oc-shared
labels:
- "traefik.stack=peer1"
- "traefik.enable=true"
- "traefik.http.routers.shared.entrypoints=web"
- "traefik.http.routers.shared.rule=PathPrefix(`/shared`)"
- "traefik.http.middlewares.shared-rewrite.replacepathregex.regex=^/shared(.*)"
- "traefik.http.middlewares.shared-rewrite.replacepathregex.replacement=/oc$$1"
- "traefik.http.routers.shared.middlewares=shared-rewrite"
- "traefik.http.services.shared.loadbalancer.server.port=8080"
- "traefik.http.middlewares.shared.forwardauth.address=http://oc-auth:8080/oc/forward"
networks:
- oc
oc-workflow:
image: '${REGISTRY:-opencloudregistry/}oc-workflow:latest'
ports:
- 8088:8080
container_name: oc-workflow
labels:
- "traefik.stack=peer1"
- "traefik.enable=true"
- "traefik.http.routers.workflow.entrypoints=web"
- "traefik.http.routers.workflow.rule=PathPrefix(`/workflow`)"
- "traefik.http.services.workflow.loadbalancer.server.port=8080"
- "traefik.http.middlewares.workflow-rewrite.replacepathregex.regex=^/workflow(.*)"
- "traefik.http.middlewares.workflow-rewrite.replacepathregex.replacement=/oc$1"
- "traefik.http.routers.workflow.middlewares=workflow-rewrite,auth-workflow"
- "traefik.http.middlewares.auth-workflow.forwardauth.address=http://oc-auth:8080/oc/forward"
- "traefik.http.middlewares.auth-workflow.forwardauth.trustForwardHeader=true"
- "traefik.http.middlewares.auth-workflow.forwardauth.authResponseHeaders=X-Auth-Request-User,X-Auth-Request-Email"
networks:
- oc
oc-discovery_1:
image: '${REGISTRY:-opencloudregistry/}oc-discovery_1:latest'
ports:
2026-04-15 15:46:27 +02:00
- 4005:4005
2026-04-13 16:35:42 +02:00
container_name: oc-discovery_1
networks:
2026-04-14 10:17:07 +02:00
discovery:
2026-04-15 15:46:27 +02:00
ipv4_address: 172.40.0.5
2026-04-14 10:17:07 +02:00
oc:
2026-04-13 16:35:42 +02:00
oc-discovery_2:
image: '${REGISTRY:-opencloudregistry/}oc-discovery_2:latest'
ports:
- 4002:4002
container_name: oc-discovery_2
networks:
2026-04-14 10:17:07 +02:00
discovery:
ipv4_address: 172.40.0.2
oc:
2026-04-13 16:35:42 +02:00
oc-discovery_3:
image: '${REGISTRY:-opencloudregistry/}oc-discovery_3:latest'
ports:
- 4003:4003
container_name: oc-discovery_3
networks:
2026-04-14 10:17:07 +02:00
discovery:
ipv4_address: 172.40.0.3
oc:
2026-04-13 16:35:42 +02:00
oc-schedulerd:
image: '${REGISTRY:-opencloudregistry/}oc-schedulerd:latest'
ports:
- 9006:8080
environment:
2026-04-14 10:54:31 +02:00
- OC_MONGO_DATABASE=DC_myDC
- OC_KUBE_CA=${KUBE_CA:-}
- OC_KUBE_CERT=${KUBE_CERT:-}
- OC_KUBE_DATA=${KUBE_DATA:-}
2026-04-13 16:35:42 +02:00
container_name: oc-schedulerd
networks:
- oc
oc-front:
image: '${REGISTRY:-opencloudregistry/}oc-front:latest'
container_name: oc-front
ports:
- 8001:80
networks:
- oc
labels:
- "traefik.stack=peer1"
- "traefik.enable=true"
- "traefik.http.routers.front.entrypoints=web"
- "traefik.http.routers.front.rule=PathPrefix(`/`)"
- "traefik.http.services.front.loadbalancer.server.port=80"
- "traefik.http.middlewares.front-stripprefix.stripprefix.prefixes=/"
- "traefik.http.routers.front.middlewares=front-stripprefix"
oc-static:
image: '${REGISTRY:-opencloudregistry/}oc-static:latest'
ports:
- 8098:80
labels:
- "traefik.stack=peer1"
- "traefik.enable=true"
- "traefik.http.routers.static.entrypoints=web"
- "traefik.http.routers.static.rule=PathPrefix(`/static`)"
2026-04-14 10:17:07 +02:00
- "traefik.http.routers.static.middlewares=static-stripprefix"
- "traefik.http.middlewares.static-stripprefix.stripprefix.prefixes=/static"
2026-04-13 16:35:42 +02:00
- "traefik.http.services.static.loadbalancer.server.port=80"
container_name: oc-static
networks:
- oc
volumes:
oc-data:
networks:
oc:
external: true
2026-04-14 10:17:07 +02:00
discovery:
external: true
2026-04-13 16:35:42 +02:00