services: postgres: image: postgres:18-alpine environment: POSTGRES_USER: readur POSTGRES_PASSWORD: readur POSTGRES_DB: readur volumes: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U readur"] interval: 10s timeout: 5s retries: 5 readur: build: . environment: # Database configuration - choose one of these methods: # Method 1: Use DATABASE_URL (takes priority if set) DATABASE_URL: postgresql://readur:readur@postgres/readur # Method 2: Use individual PostgreSQL variables # (Only used if DATABASE_URL is not set or commented out) # POSTGRES_HOST: postgres # POSTGRES_PORT: 5432 # POSTGRES_DB: readur # POSTGRES_USER: readur # POSTGRES_PASSWORD: readur # Server configuration - choose one of these methods: # Method 1: Use SERVER_ADDRESS for full control # SERVER_ADDRESS: 0.0.0.0:8080 # Method 2: Use SERVER_HOST and SERVER_PORT separately SERVER_HOST: 0.0.0.0 SERVER_PORT: 8000 # Security JWT_SECRET: your-secret-key-change-this-in-production # File paths UPLOAD_PATH: /app/uploads WATCH_FOLDER: /app/watch # OCR configuration OCR_LANGUAGE: eng CONCURRENT_OCR_JOBS: 4 OCR_TIMEOUT_SECONDS: 300 MAX_FILE_SIZE_MB: 50 # Performance MEMORY_LIMIT_MB: 512 CPU_PRIORITY: normal # File watching ALLOWED_FILE_TYPES: pdf,txt,doc,docx,png,jpg,jpeg WATCH_INTERVAL_SECONDS: 30 FILE_STABILITY_CHECK_MS: 1000 MAX_FILE_AGE_HOURS: 24 ports: # Map container port to host port # Format: "host_port:container_port" - "8000:8000" volumes: # Persistent storage for uploads - ./readur_uploads:/app/uploads # Watch folder - can be mapped to a host directory - ./readur_watch:/app/watch # Or use a named volume for watch folder # - readur_watch:/app/watch depends_on: postgres: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/api/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s # Optional: Nginx reverse proxy example nginx: image: nginx:alpine ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - ./ssl:/etc/nginx/ssl:ro depends_on: - readur profiles: - with-proxy volumes: postgres_data: readur_uploads: readur_watch: