docker-compose.dev.yml
Rama dev · réplica de lectura del repositorio original.
version: '3.8'
services:
gatekeeper:
image: timelines-gatekeeper:dev
stop_grace_period: 0s
ports:
- "80:80"
build:
context: ./app/gatekeeper-proxy
dockerfile: ./Dockerfile
networks:
dev-minio:
dev-playwright:
aliases:
- app.gatekeeper
styx:
image: timelines-styx:dev
build:
context: ./
args:
DOCKER_UID: ${DOCKER_UID}
DOCKER_GID: ${DOCKER_GID}
dockerfile: ./app/styx-frontend/Dockerfile
user: "${DOCKER_UID}:${DOCKER_GID}"
environment:
NODE_ENV: development
DANGEROUSLY_DISABLE_HOST_CHECK: "true" # For React dev server to work behind Gatekeeper
# Fake docker secrets
environment: development
volumes:
- ./app/styx-frontend/src:/app/styx/src:cached
- ./app/styx-frontend/public:/app/styx/public:cached
- ./app/ts-shared/src:/app/ts-shared/src:cached
- ./library:/library:cached
- type: bind
source: ./app/styx-frontend/rsbuild.config.ts
target: /app/styx/rsbuild.config.ts
- type: bind
source: ./app/styx-frontend/tsconfig.json
target: /app/styx/tsconfig.json
- type: bind
source: ./app/styx-frontend/index.html
target: /app/styx/index.html
- type: bind
source: ./.prettierrc.js
target: /app/styx/.prettierrc.js
- type: bind
source: ./eslint.config.mjs
target: /app/styx/eslint.config.mjs
ports:
- 8080:8080
command: npm run start
tty: true
restart: unless-stopped
rhea:
image: timelines-rhea:dev
build:
context: ./
dockerfile: ./app/rhea-backend/Dockerfile
environment:
NODE_ENV: development
DATABASE_URL: postgresql://docker:docker@rhea-postgres:5432/db?schema=public
# Fake docker secrets
environment: development
jwt-secret: secretkey
s3_endpoint: http://s3-minio:9000
s3_bucket_id: bucket
s3_access_key_id: devuser
s3_access_key_secret: devsecret
volumes:
- rhea-db:/mnt/volume_rhea_postgres:ro
- ./app/rhea-backend/src:/app/rhea/src:cached
- ./app/rhea-backend/prisma:/app/rhea/prisma:cached
- ./app/ts-shared/src:/app/ts-shared/src:cached
- ./library:/library:cached
- ./scripts:/scripts:ro
- type: bind
source: ./eslint.config.mjs
target: /app/rhea/eslint.config.mjs
- type: bind
source: ./app/rhea-backend/prisma.config.ts
target: /app/rhea/prisma.config.ts
- type: bind
source: ./app/rhea-backend/tsconfig.json
target: /app/rhea/tsconfig.json
ports:
- 3000:3000
command: npm run start
healthcheck:
start_interval: 1s
tty: true
restart: unless-stopped
networks:
- dev-minio
calliope:
image: timelines-calliope:dev
build:
context: ./
dockerfile: ./app/calliope-websockets/Dockerfile
environment:
NODE_ENV: development
# Fake docker secrets
environment: development
jwt_secret: secretkey
volumes:
- ./app/calliope-websockets/src:/app/calliope/src:cached
- ./app/ts-shared/src:/app/ts-shared/src:cached
- ./library:/library:cached
- ./scripts:/scripts:ro
- type: bind
source: ./eslint.config.mjs
target: /app/calliope/eslint.config.mjs
- type: bind
source: ./app/calliope-websockets/tsconfig.json
target: /app/calliope/tsconfig.json
ports:
- 3001:3001
command: npm run start
tty: true
restart: unless-stopped
orpheus:
image: timelines-orpheus:dev
build:
context: ./
dockerfile: ./app/orpheus-mcp/Dockerfile
environment:
NODE_ENV: development
# Fake docker secrets
environment: development
jwt_secret: secretkey
REQUIRE_OAUTH: "false"
volumes:
- ./app/orpheus-mcp/src:/app/orpheus/src:cached
- ./app/ts-shared/src:/app/ts-shared/src:cached
- ./library:/library:cached
- ./scripts:/scripts:ro
- type: bind
source: ./eslint.config.mjs
target: /app/orpheus/eslint.config.mjs
- type: bind
source: ./app/orpheus-mcp/tsconfig.json
target: /app/orpheus/tsconfig.json
ports:
- 3002:3002
command: npm run start
tty: true
restart: unless-stopped
thetis:
image: timelines-thetis:dev
build:
context: ./
dockerfile: ./app/thetis-landing/Dockerfile
environment:
NODE_ENV: development
volumes:
- ./app/thetis-landing/src:/app/thetis/src:cached
- ./app/thetis-landing/public:/app/thetis/public:cached
- ./app/thetis-landing/vendor:/app/thetis/vendor:cached
- type: bind
source: ./app/thetis-landing/astro.config.ts
target: /app/thetis/astro.config.ts
- type: bind
source: ./app/thetis-landing/tailwind.config.js
target: /app/thetis/tailwind.config.js
- type: bind
source: ./app/thetis-landing/tsconfig.json
target: /app/thetis/tsconfig.json
ports:
- 8081:8081
command: npm run dev
tty: true
restart: unless-stopped
rhea-postgres:
environment:
POSTGRES_USER: docker
POSTGRES_PASSWORD: docker
POSTGRES_DB: db
ports:
- 5432:5432
volumes:
- rhea-db:/var/lib/postgresql/data/:cached
healthcheck:
start_interval: 1s
restart: unless-stopped
rhea-migrate:
image: timelines-rhea:dev
pull_policy: never
environment:
DATABASE_URL: postgresql://docker:docker@rhea-postgres:5432/db?schema=public
volumes:
- ./app/rhea-backend/prisma:/app/rhea/prisma:cached
- ./app/ts-shared/src:/app/ts-shared/src:cached
- type: bind
source: ./app/rhea-backend/prisma.config.ts
target: /app/rhea/prisma.config.ts
depends_on:
rhea:
condition: service_started
rhea-postgres:
condition: service_healthy
command: sh -c "npx prisma migrate deploy && npx prisma db seed"
networks:
- backend-rhea-db
library-build:
image: node:26-alpine
user: "${DOCKER_UID}:${DOCKER_GID}"
volumes:
- ./library:/library:cached
command: node /library/build.mjs
restart: unless-stopped
stop_grace_period: 0s
redis:
ports:
- "6379:6379"
healthcheck:
start_period: 10s
start_interval: 1s
s3-minio:
image: pgsty/minio:RELEASE.2026-08-04T00-00-00Z
ports:
- "9000:9000" # API
- "9001:9001" # Console
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: adminpassword
MINIO_BROWSER_LOG_LEVEL: debug
MINIO_API_LOG_LEVEL: debug
volumes:
- minio_data:/data
command: server /data --console-address ":9001"
healthcheck:
test: [ "CMD", "curl", "-f", "http://s3-minio:9000/minio/health/live" ]
interval: 5s
timeout: 5s
retries: 3
start_period: 10s
start_interval: 1s
networks:
- dev-minio
s3-minio-setup:
image: pgsty/mc:RELEASE.2026-09-16T00-00-00Z
depends_on:
s3-minio:
condition: service_healthy
entrypoint: >
/bin/sh -c "
mc alias set minio-dev http://s3-minio:9000 admin adminpassword;
mc mb --ignore-existing minio-dev/bucket;
mc admin user add minio-dev devuser devsecret;
mc admin policy attach minio-dev readwrite --user devuser;
echo 'MinIO setup completed successfully';
"
networks:
- dev-minio
chronos:
image: timelines-chronos:dev
build:
context: ./app/chronos-backups
dockerfile: ./Dockerfile
environment:
# S3 connection (MinIO)
S3_ENDPOINT: http://s3-minio:9000
S3_BUCKET: bucket
S3_ACCESS_KEY_ID: devuser
S3_ACCESS_KEY_SECRET: devsecret
# Backrest config
BACKREST_DATA: /data
BACKREST_CONFIG: /config/config.json
BACKREST_PORT: 0.0.0.0:9898
XDG_CACHE_HOME: /cache
ports:
- "9898:9898"
volumes:
- backrest_data:/data:cached
- backrest_config:/config:cached
- backrest_cache:/cache:cached
depends_on:
rhea-postgres:
condition: service_healthy
s3-minio:
condition: service_healthy
networks:
- dev-minio
restart: unless-stopped
volumes:
redis:
rhea-db:
minio_data:
backrest_data:
backrest_config:
backrest_cache:
networks:
dev-minio:
dev-playwright:
name: neverkin-playwright