Skip to content

Application Stack

Component Technology Deployment
Backend API Python · FastAPI Docker container on app-1 via Dokploy
Frontend React Static build served by Nginx / Caddy on Hetzner edge
Desktop client Electron (wraps React + FastAPI) Distributed as macOS / Windows installer. Runs backend locally.
Job queue Redis Docker on app-1
Real-time events SocketIO Embedded in FastAPI process
Worker runtime Python · Docker One container per worker VM, pulls from Redis
Deployment tool Dokploy Runs on app-1. Manages Docker Compose stacks with GitHub webhook deploys.
Orchestration (future) k3s Planned. Enables rolling deploys and horizontal worker scaling.

Docker Compose — backend services

version: "3.9"

services:
      api:
            image: ghcr.io/your-org/cea-api:latest
            ports: ["8000:8000"]
            environment:
                  - REDIS_URL=redis://redis:6379
                  - S3_ENDPOINT=https://<region>.your-objectstorage.com
                  - S3_BUCKET=cea-data
                  - S3_ACCESS_KEY=<key>
                  - S3_SECRET_KEY=<secret>
                  - DATABASE_URL=postgresql://cea:<pw>@postgres:5432/cea
            depends_on: [redis, postgres]

      redis:
            image: redis:7-alpine
            volumes: [redis-data:/data]

      postgres:
            image: postgres:16-alpine
            environment:
                  POSTGRES_DB: cea
                  POSTGRES_PASSWORD: <pw>
            volumes: [pg-data:/var/lib/postgresql/data]

volumes:
      redis-data:
      pg-data:

Worker Docker Compose

services:
      worker:
            image: ghcr.io/your-org/cea-worker:latest
            environment:
                  - REDIS_URL=redis://10.42.20.11:6379
                  - S3_ENDPOINT=https://<region>.your-objectstorage.com
                  - S3_BUCKET=cea-data
                  - S3_ACCESS_KEY=<key>
                  - S3_SECRET_KEY=<secret>
                  - WORKER_CONCURRENCY=4  # simulation processes in parallel
            restart: unless-stopped