version: "3.8" services: db: image: postgres:16-alpine container_name: jobsboard_db restart: always environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: jobsboard ports: - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d jobsboard"] interval: 5s timeout: 5s retries: 5 web: build: context: ./web dockerfile: Dockerfile container_name: jobsboard_web restart: always ports: - "3000:3000" environment: DATABASE_URL: "postgresql://postgres:postgres@db:5432/jobsboard?schema=public" NEXTAUTH_SECRET: "jobsboard-secret-key-for-auth-sessions" NEXTAUTH_URL: "http://localhost:3000" NODE_ENV: "production" depends_on: db: condition: service_healthy scraper: build: context: ./scraper dockerfile: Dockerfile container_name: jobsboard_scraper restart: always environment: DATABASE_URL: "postgresql://postgres:postgres@db:5432/jobsboard?schema=public" SCRAPE_INTERVAL_MINUTES: "30" depends_on: db: condition: service_healthy volumes: postgres_data: