Files
Munich-news/docker-compose.yml
2025-11-11 17:20:56 +01:00

168 lines
4.4 KiB
YAML

# Munich News Daily - Docker Compose Configuration
#
# GPU Support:
# To enable GPU acceleration for Ollama (5-10x faster):
# 1. Check GPU availability: ./check-gpu.sh
# 2. Start with GPU: ./start-with-gpu.sh
# Or manually: docker-compose -f docker-compose.yml -f docker-compose.gpu.yml up -d
#
# See docs/OLLAMA_SETUP.md for detailed setup instructions
services:
# Ollama AI Service
ollama:
image: ollama/ollama:latest
container_name: munich-news-ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
networks:
- munich-news-network
# GPU support (uncomment if you have NVIDIA GPU)
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: all
# capabilities: [gpu]
healthcheck:
test: ["CMD-SHELL", "ollama list || exit 1"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
# Ollama Model Loader - Pulls phi3:latest on startup
ollama-setup:
image: curlimages/curl:latest
container_name: munich-news-ollama-setup
depends_on:
ollama:
condition: service_healthy
networks:
- munich-news-network
entrypoint: /bin/sh
command: >
-c "
echo 'Waiting for Ollama service to be ready...' &&
sleep 5 &&
echo 'Pulling phi3:latest model via API...' &&
curl -X POST http://ollama:11434/api/pull -d '{\"name\":\"phi3:latest\"}' &&
echo '' &&
echo 'Model phi3:latest pull initiated!'
"
restart: "no"
# 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
- ollama
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
ollama_data:
driver: local
networks:
munich-news-network:
driver: bridge