# Local Development Stack - NO MinIO # # Usage: # docker-compose -f docker-compose.local.yml up # # Or use the convenience script: # ./start-local.sh # # This runs: # - PostgreSQL database # - Redis (job queues, caching, rate limiting) # - Backend API server # - Local filesystem storage (./storage) # # NO MinIO, NO remote connections, NO Kubernetes services: postgres: image: postgres:15-alpine container_name: cannaiq-postgres environment: POSTGRES_DB: dutchie_legacy POSTGRES_USER: dutchie POSTGRES_PASSWORD: dutchie_local_pass ports: - "54320:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U dutchie"] interval: 10s timeout: 5s retries: 5 redis: image: redis:7-alpine container_name: cannaiq-redis ports: - "6379:6379" volumes: - redis_data:/data command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 backend: build: context: ./backend dockerfile: Dockerfile.dev container_name: cannaiq-backend environment: NODE_ENV: development PORT: 3000 # CannaiQ database connection - individual env vars # These match what postgres service uses (POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD) CANNAIQ_DB_HOST: postgres CANNAIQ_DB_PORT: "5432" CANNAIQ_DB_NAME: dutchie_legacy CANNAIQ_DB_USER: dutchie CANNAIQ_DB_PASS: dutchie_local_pass # Local storage - NO MinIO STORAGE_DRIVER: local STORAGE_BASE_PATH: /app/storage STORAGE_PUBLIC_URL: /storage # No MinIO env vars - forces local storage # MINIO_ENDPOINT is intentionally NOT set JWT_SECRET: local_dev_jwt_secret_change_in_production ADMIN_EMAIL: admin@example.com ADMIN_PASSWORD: password # Redis connection REDIS_URL: redis://redis:6379 ports: - "3010:3000" volumes: - ./backend:/app - /app/node_modules - ./storage:/app/storage depends_on: postgres: condition: service_healthy redis: condition: service_healthy command: npm run dev volumes: postgres_data: redis_data: