services: # Tenant Database (User Data) db: image: postgres:17-alpine container_name: madbase_db restart: unless-stopped environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: postgres # Enable logical replication for Realtime POSTGRES_HOST_AUTH_METHOD: trust command: ["postgres", "-c", "wal_level=logical"] ports: - "5432:5432" volumes: - madbase_db_data:/var/lib/postgresql/data # Control Plane Database (Project Config, Secrets) control_db: image: postgres:17-alpine container_name: madbase_control_db restart: unless-stopped environment: POSTGRES_USER: admin POSTGRES_PASSWORD: admin_password POSTGRES_DB: madbase_control ports: - "5433:5432" volumes: - madbase_control_db_data:/var/lib/postgresql/data # Object Storage (S3 Compatible) minio: image: minio/minio container_name: madbase_minio restart: unless-stopped environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin command: server /data --console-address ":9001" ports: - "9000:9000" - "9001:9001" volumes: - madbase_minio_data:/data # Observability Stack victoriametrics: image: victoriametrics/victoria-metrics:v1.93.0 container_name: madbase_vm ports: - "8428:8428" volumes: - madbase_vm_data:/victoria-metrics-data - ./prometheus.yml:/etc/prometheus/prometheus.yml command: - "--storageDataPath=/victoria-metrics-data" - "--httpListenAddr=:8428" - "--promscrape.config=/etc/prometheus/prometheus.yml" extra_hosts: - "host.docker.internal:host-gateway" loki: image: grafana/loki:2.9.2 container_name: madbase_loki ports: - "3100:3100" command: -config.file=/etc/loki/local-config.yaml volumes: - madbase_loki_data:/loki grafana: image: grafana/grafana:10.2.0 container_name: madbase_grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin volumes: - madbase_grafana_data:/var/lib/grafana depends_on: - victoriametrics - loki gateway: image: localhost/madbase_gateway:latest build: . container_name: madbase_gateway restart: unless-stopped ports: - "8000:8000" environment: - DATABASE_URL=postgres://admin:admin_password@control_db:5432/madbase_control - DEFAULT_TENANT_DB_URL=postgres://postgres:postgres@db:5432/postgres - S3_ENDPOINT=http://minio:9000 - JWT_SECRET=supersecret - PORT=8000 - RUST_LOG=debug - LOG_FORMAT=json - RATE_LIMIT_PER_SECOND=1000 depends_on: - db - control_db - victoriametrics - loki volumes: madbase_db_data: madbase_control_db_data: madbase_minio_data: madbase_vm_data: madbase_loki_data: madbase_grafana_data: