services: postgres: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-tradarr} POSTGRES_USER: ${POSTGRES_USER:-tradarr} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required} volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-tradarr}"] interval: 10s timeout: 5s retries: 5 scraper: build: context: ./scraper-service dockerfile: Dockerfile restart: unless-stopped expose: - "3001" backend: build: context: ./backend dockerfile: Dockerfile restart: unless-stopped depends_on: postgres: condition: service_healthy scraper: condition: service_started environment: DATABASE_URL: "host=postgres port=5432 user=${POSTGRES_USER:-tradarr} password=${POSTGRES_PASSWORD} dbname=${POSTGRES_DB:-tradarr} sslmode=disable" JWT_SECRET: ${JWT_SECRET:?JWT_SECRET is required} ENCRYPTION_KEY: ${ENCRYPTION_KEY:?ENCRYPTION_KEY must be 32 bytes hex} PORT: "8080" SCRAPER_URL: "http://scraper:3001" ADMIN_EMAIL: ${ADMIN_EMAIL:-admin@tradarr.local} ADMIN_PASSWORD: ${ADMIN_PASSWORD:-changeme} volumes: - /home/anthony/.claude:/root/.claude expose: - "8080" ollama: image: ollama/ollama restart: unless-stopped volumes: - ollama_data:/root/.ollama frontend: build: context: ./frontend dockerfile: Dockerfile restart: unless-stopped depends_on: - backend ports: - "${FRONTEND_PORT:-80}:80" volumes: pgdata: ollama_data: