Ctrl K
ComunidadGuías…

docker-compose.dev.yml

Rama dev · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
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