services: postgres: image: pgvector/pgvector:pg17 volumes: - postgres:/var/lib/postgresql/data environment: - POSTGRES_DB=postgres - POSTGRES_USER=postgres - POSTGRES_PASSWORD=postgres ports: - 5432:5432 mailhog: image: arjenz/mailhog ports: - 8025:8025 - 1025:1025 valkey: image: valkey/valkey@sha256:12ba4f45a7c3e1d0f076acd616cb230834e75a77e8516dde382720af32832d6d command: "valkey-server" ports: - 6379:6379 volumes: - valkey-data:/data minio: image: minio/minio:RELEASE.2025-09-07T16-13-09Z command: server /data --console-address ":9001" environment: - MINIO_ROOT_USER=devminio - MINIO_ROOT_PASSWORD=devminio123 ports: - "9000:9000" # S3 API direct access - "9001:9001" # Web console volumes: - minio-data:/data # Cube connects to the Hub DB Postgres which owns the feedback_records table. # Uses the superset_formbricks_hub network to reach formbricks_hub_postgres directly. # Ensure the Formbricks Hub stack is running (docker compose -p superset up, or similar). # # SECURITY: CUBEJS_API_SECRET has no default and must be set explicitly (e.g. in .env). # Never use a weak secret in production/staging. Generate with: openssl rand -hex 32 cube: image: cubejs/cube:v1.6.6 env_file: - apps/web/.env ports: - 4000:4000 - 4001:4001 # Cube Playground UI (dev only) environment: CUBEJS_DB_TYPE: postgres CUBEJS_DB_HOST: ${CUBEJS_DB_HOST:-formbricks_hub_postgres} CUBEJS_DB_NAME: ${CUBEJS_DB_NAME:-hub} CUBEJS_DB_USER: ${CUBEJS_DB_USER:-formbricks} CUBEJS_DB_PASS: ${CUBEJS_DB_PASS:-formbricks_dev} CUBEJS_DB_PORT: ${CUBEJS_DB_PORT:-5432} CUBEJS_DEV_MODE: "true" CUBEJS_API_SECRET: ${CUBEJS_API_SECRET} CUBEJS_CACHE_AND_QUEUE_DRIVER: memory volumes: - ./cube/cube.js:/cube/conf/cube.js - ./cube/schema:/cube/conf/model restart: on-failure networks: - default - hub networks: hub: external: true name: superset_formbricks_hub volumes: postgres: driver: local valkey-data: driver: local minio-data: driver: local