# Vector — single-instance production deployment. # # Quick start: # 1. Create a .env file next to this compose file containing at minimum: # JWT_SECRET=<64+ char random hex> # CLIENT_ORIGIN=http://your-host:8080 # WEB_PORT=8080 # For registry-pushed images (optional): # REGISTRY_URL=registry.example.com/josh # TAG=latest # # 2. Bring up the stack: # docker compose up -d --build # or pull pre-built images from the registry: # docker compose pull && docker compose up -d # # Data lives in the `vector-data` volume (SQLite db). Redis is included # in anticipation of the BullMQ worker follow-up; the API does not yet # depend on it. x-restart: &restart restart: unless-stopped services: api: <<: *restart image: ${REGISTRY_URL:-vector}/vector-api:${TAG:-latest} build: context: . dockerfile: apps/api/Dockerfile environment: NODE_ENV: production PORT: 3001 DATABASE_URL: file:/data/vector.db JWT_SECRET: ${JWT_SECRET:?JWT_SECRET is required — see .env.example} CLIENT_ORIGIN: ${CLIENT_ORIGIN:-http://localhost:8080} volumes: - vector-data:/data healthcheck: test: ["CMD-SHELL", "wget -qO- http://localhost:3001/healthz || exit 1"] interval: 30s timeout: 5s retries: 3 start_period: 20s depends_on: redis: condition: service_healthy web: <<: *restart image: ${REGISTRY_URL:-vector}/vector-web:${TAG:-latest} build: context: . dockerfile: apps/web/Dockerfile ports: - "${WEB_PORT:-8080}:80" depends_on: api: condition: service_healthy redis: <<: *restart image: redis:7-alpine volumes: - vector-redisdata:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 10 volumes: vector-data: vector-redisdata: