140 lines
4.1 KiB
YAML
140 lines
4.1 KiB
YAML
services:
|
|
postgres:
|
|
image: postgres:16-alpine
|
|
environment:
|
|
POSTGRES_USER: rakazo
|
|
POSTGRES_PASSWORD: topology-only-password
|
|
POSTGRES_DB: rakazo
|
|
volumes:
|
|
- pgdata:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U rakazo -d rakazo"]
|
|
interval: 2s
|
|
timeout: 5s
|
|
retries: 30
|
|
|
|
computer-image:
|
|
image: ${TOPOLOGY_COMPUTER_IMAGE:-rakazo/computer:topology}
|
|
build:
|
|
context: ../sandboxes/computer
|
|
command: ["true"]
|
|
restart: "no"
|
|
|
|
app-image:
|
|
image: ${TOPOLOGY_APP_IMAGE:-rakazo/app:topology}
|
|
build:
|
|
context: ../..
|
|
dockerfile: infra/compose/Dockerfile.topology
|
|
command: ["true"]
|
|
restart: "no"
|
|
|
|
supervisor:
|
|
image: ${TOPOLOGY_APP_IMAGE:-rakazo/app:topology}
|
|
command: ["pnpm", "--filter", "@rakazo/sandbox-supervisor", "start"]
|
|
user: root
|
|
environment:
|
|
NODE_ENV: production
|
|
DATA_DIR: /data
|
|
SUPERVISOR_HOST: "0.0.0.0"
|
|
SUPERVISOR_PORT: "7091"
|
|
SANDBOX_SUPERVISOR_TOKEN: topology-only-supervisor-token-at-least-32-characters
|
|
DOCKER_SOCKET: /var/run/docker.sock
|
|
RAKAZO_COMPUTER_IMAGE: ${TOPOLOGY_COMPUTER_IMAGE:-rakazo/computer:topology}
|
|
SANDBOX_SCREEN_NETWORK: isolated
|
|
volumes:
|
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
- appdata:/data
|
|
depends_on:
|
|
app-image:
|
|
condition: service_completed_successfully
|
|
computer-image:
|
|
condition: service_completed_successfully
|
|
healthcheck:
|
|
test:
|
|
- CMD
|
|
- node
|
|
- -e
|
|
- fetch('http://127.0.0.1:7091/health').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))
|
|
interval: 2s
|
|
timeout: 5s
|
|
retries: 30
|
|
|
|
api:
|
|
image: ${TOPOLOGY_APP_IMAGE:-rakazo/app:topology}
|
|
command:
|
|
- bash
|
|
- -lc
|
|
- pnpm --filter @rakazo/db exec prisma migrate deploy && pnpm --filter @rakazo/api start
|
|
environment: &app-environment
|
|
NODE_ENV: production
|
|
DATABASE_URL: postgres://rakazo:topology-only-password@postgres:5432/rakazo
|
|
DATA_DIR: /data
|
|
BETTER_AUTH_SECRET: topology-only-auth-secret-at-least-32-characters
|
|
SCREEN_PROXY_SECRET: topology-only-screen-proxy-secret-at-least-32-characters
|
|
BETTER_AUTH_URL: http://127.0.0.1:${TOPOLOGY_API_PORT:-3199}
|
|
WEB_ORIGIN: http://127.0.0.1:${TOPOLOGY_API_PORT:-3199}
|
|
ENCRYPTION_KEY: topology-only-encryption-key-at-least-32-characters
|
|
SANDBOX_SUPERVISOR_URL: http://supervisor:7091
|
|
SANDBOX_SUPERVISOR_TOKEN: topology-only-supervisor-token-at-least-32-characters
|
|
SIGNUPS_ENABLED: "true"
|
|
WAKEUP_DRIVER: graphile
|
|
SANDBOX_PROVIDER: docker
|
|
AGENT_RUNTIME: scripted
|
|
API_PORT: "3100"
|
|
API_HOST: "0.0.0.0"
|
|
ports:
|
|
- "127.0.0.1:${TOPOLOGY_API_PORT:-3199}:3100"
|
|
volumes:
|
|
- appdata:/data
|
|
depends_on:
|
|
app-image:
|
|
condition: service_completed_successfully
|
|
postgres:
|
|
condition: service_healthy
|
|
supervisor:
|
|
condition: service_healthy
|
|
healthcheck:
|
|
test:
|
|
- CMD
|
|
- node
|
|
- -e
|
|
- fetch('http://127.0.0.1:3100/health').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))
|
|
interval: 2s
|
|
timeout: 5s
|
|
retries: 45
|
|
|
|
web:
|
|
image: ${TOPOLOGY_APP_IMAGE:-rakazo/app:topology}
|
|
command: ["pnpm", "--filter", "@rakazo/web", "preview", "--host", "0.0.0.0", "--port", "5173"]
|
|
environment:
|
|
NODE_ENV: production
|
|
API_PROXY_TARGET: http://api:3100
|
|
RAKAZO_HOST: localhost
|
|
SCREEN_PROXY_SECRET: topology-only-screen-proxy-secret-at-least-32-characters
|
|
depends_on:
|
|
api:
|
|
condition: service_healthy
|
|
healthcheck:
|
|
test:
|
|
- CMD
|
|
- node
|
|
- -e
|
|
- fetch('http://127.0.0.1:5173').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))
|
|
interval: 2s
|
|
timeout: 5s
|
|
retries: 30
|
|
|
|
worker:
|
|
image: ${TOPOLOGY_APP_IMAGE:-rakazo/app:topology}
|
|
command: ["pnpm", "--filter", "@rakazo/worker", "start"]
|
|
environment: *app-environment
|
|
volumes:
|
|
- appdata:/data
|
|
depends_on:
|
|
api:
|
|
condition: service_healthy
|
|
|
|
volumes:
|
|
pgdata:
|
|
appdata:
|