services: # MongoDB Database mongodb: image: mongo:latest container_name: munich-news-mongodb restart: unless-stopped ports: - "27017:27017" environment: # For production, set MONGO_PASSWORD environment variable MONGO_INITDB_ROOT_USERNAME: ${MONGO_USERNAME:-admin} MONGO_INITDB_ROOT_PASSWORD: ${MONGO_PASSWORD:-changeme} MONGO_INITDB_DATABASE: munich_news volumes: - mongodb_data:/data/db - mongodb_config:/data/configdb networks: - munich-news-network command: mongod --bind_ip_all ${MONGO_AUTH:---auth} healthcheck: test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet interval: 30s timeout: 10s retries: 3 # News Crawler - Runs at 6 AM Berlin time crawler: build: context: . dockerfile: news_crawler/Dockerfile container_name: munich-news-crawler restart: unless-stopped depends_on: - mongodb environment: - MONGODB_URI=mongodb://${MONGO_USERNAME:-admin}:${MONGO_PASSWORD:-changeme}@mongodb:27017/ - TZ=Europe/Berlin volumes: - ./backend/.env:/app/.env:ro networks: - munich-news-network healthcheck: test: ["CMD", "python", "-c", "import sys; sys.exit(0)"] interval: 1m timeout: 10s retries: 3 # Backend API - Tracking and analytics backend: build: context: ./backend dockerfile: Dockerfile container_name: munich-news-backend restart: unless-stopped depends_on: - mongodb ports: - "5001:5001" environment: - MONGODB_URI=mongodb://${MONGO_USERNAME:-admin}:${MONGO_PASSWORD:-changeme}@mongodb:27017/ - FLASK_PORT=5001 - TZ=Europe/Berlin volumes: - ./backend/.env:/app/.env:ro - /var/run/docker.sock:/var/run/docker.sock:ro networks: - munich-news-network healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:5001/health')"] interval: 30s timeout: 10s retries: 3 start_period: 40s # Newsletter Sender - Runs at 7 AM Berlin time sender: build: context: . dockerfile: news_sender/Dockerfile container_name: munich-news-sender restart: unless-stopped depends_on: - mongodb - backend - crawler environment: - MONGODB_URI=mongodb://${MONGO_USERNAME:-admin}:${MONGO_PASSWORD:-changeme}@mongodb:27017/ - TZ=Europe/Berlin volumes: - ./backend/.env:/app/.env:ro networks: - munich-news-network healthcheck: test: ["CMD", "python", "-c", "import sys; sys.exit(0)"] interval: 1m timeout: 10s retries: 3 volumes: mongodb_data: driver: local mongodb_config: driver: local networks: munich-news-network: driver: bridge