From 774788c614c841ce57bb856a1e1867950ad6b150 Mon Sep 17 00:00:00 2001 From: Nandor Magyar Date: Wed, 5 Nov 2025 15:39:28 +0100 Subject: [PATCH 1/3] refactor: add local development compose file --- distribution/compose/docker-compose.dev.yaml | 80 +++++++++++++++++++ .../compose/traefik/dynamic/dynamic.yaml | 34 ++++++++ 2 files changed, 114 insertions(+) create mode 100644 distribution/compose/docker-compose.dev.yaml create mode 100644 distribution/compose/traefik/dynamic/dynamic.yaml diff --git a/distribution/compose/docker-compose.dev.yaml b/distribution/compose/docker-compose.dev.yaml new file mode 100644 index 0000000000..f11a117c8e --- /dev/null +++ b/distribution/compose/docker-compose.dev.yaml @@ -0,0 +1,80 @@ +# This is meant to be used for local development +services: + traefik: + container_name: traefik + image: docker.io/library/traefik:2.9 + command: + - --providers.docker=true + - --providers.docker.exposedbydefault=false + - --entrypoints.web.address=:80 + - --providers.file.directory=/etc/traefik/dynamic + ports: + - "${EXTERNAL_PORT:-80}:80" + volumes: + - ${DOCKER_SOCKET:-/var/run/docker.sock}:/var/run/docker.sock:ro + - ${PWD}/distribution/compose/traefik/dynamic:/etc/traefik/dynamic:ro + restart: unless-stopped + labels: + - org.dyrectorio.service-category=_internal + + database: + container_name: database + image: ghcr.io/dyrector-io/dyrectorio/multi-database:1.0.4 + environment: + - POSTGRES_PASSWORD=${ROOT_POSTGRES_PASSWORD} + - CRUX_POSTGRES_PASSWORD=${CRUX_POSTGRES_PASSWORD} + - KRATOS_POSTGRES_PASSWORD=${KRATOS_POSTGRES_PASSWORD} + restart: unless-stopped + volumes: ['database:/var/lib/postgresql/data'] + ports: + - 127.0.0.1:5432:5432 + healthcheck: + # testing the healtheck with a specific database and users + test: [CMD-SHELL, pg_isready -d crux -U crux_user] + interval: 5s + timeout: 5s + retries: 5 + labels: + - org.dyrectorio.service-category=_internal + kratos: + container_name: kratos + image: ghcr.io/dyrector-io/dyrectorio/web/kratos:${DYO_VERSION:-stable} + environment: + - SQA_OPT_OUT=true + - DSN=postgres://kratos_user:${KRATOS_POSTGRES_PASSWORD}@database:5432/kratos?sslmode=disable&max_conns=20&max_idle_conns=4&connect_timeout=5 + - KRATOS_URL=${EXTERNAL_PROTO}://${DOMAIN}:${EXTERNAL_PORT}/kratos + - KRATOS_ADMIN_URL=http://kratos:4434 + - AUTH_URL=${EXTERNAL_PROTO}://${DOMAIN}:${EXTERNAL_PORT}/auth + - CRUX_UI_URL=${EXTERNAL_PROTO}://${DOMAIN}:${EXTERNAL_PORT} + - LOG_LEVEL=info + - LOG_LEAK_SENSITIVE_VALUES=false + - SECRETS_COOKIE=${KRATOS_SECRET} + - COURIER_SMTP_CONNECTION_URI=${SMTP_URI} + - FROM_EMAIL=${FROM_EMAIL} + - FROM_NAME=${FROM_NAME} + ports: + - 4433:4433 + - 4434:4434 + depends_on: + database: + condition: service_healthy + kratos-migrate: + condition: service_completed_successfully + restart: unless-stopped + labels: + - org.dyrectorio.service-category=_internal + kratos-migrate: + container_name: kratos-migrate + image: ghcr.io/dyrector-io/dyrectorio/web/kratos:${DYO_VERSION:-stable} + command: -c /etc/config/kratos/kratos.yaml migrate sql -e --yes + environment: + - SQA_OPT_OUT=true + - DSN=postgres://kratos_user:${KRATOS_POSTGRES_PASSWORD}@database:5432/kratos?sslmode=disable&max_conns=20&max_idle_conns=4 + depends_on: + database: + condition: service_healthy + restart: 'no' + labels: + - org.dyrectorio.service-category=_internal +volumes: + database: diff --git a/distribution/compose/traefik/dynamic/dynamic.yaml b/distribution/compose/traefik/dynamic/dynamic.yaml new file mode 100644 index 0000000000..1624bd5d8a --- /dev/null +++ b/distribution/compose/traefik/dynamic/dynamic.yaml @@ -0,0 +1,34 @@ +http: + routers: + kratos: + rule: Host(`localhost`) && PathPrefix(`/kratos`)) + entrypoints: web + service: "kratos" + + crux-http: + rule: "Host(`localhost`) && PathPrefix(`/api`) && !PathPrefix(`/api/auth`) && !PathPrefix(`/api/status`)" + entryPoints: ["web"] + service: "crux-api" + priority: 20 + + crux-ui: + rule: "Host(`localhost`)" + entryPoints: ["web"] + service: "crux-ui" + priority: 10 + + services: + crux-api: + loadBalancer: + servers: + - url: "http://172.17.0.1:1848" + + crux-ui: + loadBalancer: + servers: + - url: "http://172.17.0.1:3000" + + kratos: + loadBalancer: + servers: + - url: "http://172.17.0.1:4433" \ No newline at end of file From 4580e466dd3bcf6fedd399f97a3340b862536c6b Mon Sep 17 00:00:00 2001 From: Mate Vago Date: Mon, 26 Jan 2026 11:56:04 +0100 Subject: [PATCH 2/3] fix: yaml formatting --- distribution/compose/docker-compose.dev.yaml | 1 - distribution/compose/traefik/dynamic/dynamic.yaml | 7 +------ 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/distribution/compose/docker-compose.dev.yaml b/distribution/compose/docker-compose.dev.yaml index f11a117c8e..37bbdf7222 100644 --- a/distribution/compose/docker-compose.dev.yaml +++ b/distribution/compose/docker-compose.dev.yaml @@ -16,7 +16,6 @@ services: restart: unless-stopped labels: - org.dyrectorio.service-category=_internal - database: container_name: database image: ghcr.io/dyrector-io/dyrectorio/multi-database:1.0.4 diff --git a/distribution/compose/traefik/dynamic/dynamic.yaml b/distribution/compose/traefik/dynamic/dynamic.yaml index 1624bd5d8a..5363aa0697 100644 --- a/distribution/compose/traefik/dynamic/dynamic.yaml +++ b/distribution/compose/traefik/dynamic/dynamic.yaml @@ -4,31 +4,26 @@ http: rule: Host(`localhost`) && PathPrefix(`/kratos`)) entrypoints: web service: "kratos" - crux-http: rule: "Host(`localhost`) && PathPrefix(`/api`) && !PathPrefix(`/api/auth`) && !PathPrefix(`/api/status`)" entryPoints: ["web"] service: "crux-api" priority: 20 - crux-ui: rule: "Host(`localhost`)" entryPoints: ["web"] service: "crux-ui" priority: 10 - services: crux-api: loadBalancer: servers: - url: "http://172.17.0.1:1848" - crux-ui: loadBalancer: servers: - url: "http://172.17.0.1:3000" - kratos: loadBalancer: servers: - - url: "http://172.17.0.1:4433" \ No newline at end of file + - url: "http://172.17.0.1:4433" From 62341c244105a3d2d0b2bedc508506b87d646107 Mon Sep 17 00:00:00 2001 From: Mate Vago Date: Mon, 26 Jan 2026 13:03:10 +0100 Subject: [PATCH 3/3] fix: container versions --- distribution/compose/docker-compose.dev.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/distribution/compose/docker-compose.dev.yaml b/distribution/compose/docker-compose.dev.yaml index 37bbdf7222..82cb21d8fc 100644 --- a/distribution/compose/docker-compose.dev.yaml +++ b/distribution/compose/docker-compose.dev.yaml @@ -2,7 +2,7 @@ services: traefik: container_name: traefik - image: docker.io/library/traefik:2.9 + image: docker.io/library/traefik:2.11 command: - --providers.docker=true - --providers.docker.exposedbydefault=false @@ -37,7 +37,7 @@ services: - org.dyrectorio.service-category=_internal kratos: container_name: kratos - image: ghcr.io/dyrector-io/dyrectorio/web/kratos:${DYO_VERSION:-stable} + image: ghcr.io/dyrector-io/dyrectorio/web/kratos:${DYO_VERSION:-latest} environment: - SQA_OPT_OUT=true - DSN=postgres://kratos_user:${KRATOS_POSTGRES_PASSWORD}@database:5432/kratos?sslmode=disable&max_conns=20&max_idle_conns=4&connect_timeout=5 @@ -64,7 +64,7 @@ services: - org.dyrectorio.service-category=_internal kratos-migrate: container_name: kratos-migrate - image: ghcr.io/dyrector-io/dyrectorio/web/kratos:${DYO_VERSION:-stable} + image: ghcr.io/dyrector-io/dyrectorio/web/kratos:${DYO_VERSION:-latest} command: -c /etc/config/kratos/kratos.yaml migrate sql -e --yes environment: - SQA_OPT_OUT=true