# Local Development Setup This guide helps you run Munich News Daily locally for development and testing. ## Quick Start ```bash # 1. Copy local environment files cp .env.local .env cp backend/.env.local backend/.env # 2. Start services with local configuration docker-compose -f docker-compose.local.yml up -d # 3. Check logs docker-compose -f docker-compose.local.yml logs -f # 4. Access services # - Frontend: http://localhost:3000 # - Backend API: http://localhost:5001 # - MongoDB: localhost:27017 # - Ollama: http://localhost:11434 ``` ## Differences from Production | Feature | Production | Local Development | |---------|-----------|-------------------| | Ollama Model | `gemma3:12b` (large) | `phi3:latest` (small, fast) | | MongoDB Port | Internal only | Exposed on 27017 | | Ollama Port | Internal only | Exposed on 11434 | | Container Names | `munich-news-*` | `munich-news-local-*` | | Volumes | `*_data` | `*_data_local` | | Email | Production SMTP | Test/disabled | ## Useful Commands ### Start/Stop Services ```bash # Start all services docker-compose -f docker-compose.local.yml up -d # Stop all services docker-compose -f docker-compose.local.yml down # Restart a specific service docker-compose -f docker-compose.local.yml restart backend # View logs docker-compose -f docker-compose.local.yml logs -f crawler ``` ### Testing ```bash # Trigger a news crawl (2 articles for quick testing) curl -X POST http://localhost:5001/api/admin/trigger-crawl \ -H "Content-Type: application/json" \ -d '{"max_articles": 2}' # Trigger transport crawl curl -X POST http://localhost:5001/api/transport/crawl # Check articles in MongoDB docker exec munich-news-local-mongodb mongosh munich_news \ --eval "db.articles.find({}, {title: 1, keywords: 1, category: 1}).limit(3)" # Check transport disruptions curl http://localhost:5001/api/transport/disruptions ``` ### Database Access ```bash # Connect to MongoDB docker exec -it munich-news-local-mongodb mongosh munich_news # Or from host (if you have mongosh installed) mongosh "mongodb://admin:local123@localhost:27017/munich_news" # Useful queries db.articles.countDocuments() db.articles.find({keywords: {$exists: true}}).limit(5) db.subscribers.find() db.transport_alerts.find() ``` ### Ollama Testing ```bash # List models curl http://localhost:11434/api/tags # Test generation curl http://localhost:11434/api/generate -d '{ "model": "phi3:latest", "prompt": "Summarize: Munich opens new U-Bahn line", "stream": false }' ``` ## Cleanup ```bash # Stop and remove containers docker-compose -f docker-compose.local.yml down # Remove volumes (WARNING: deletes all data) docker-compose -f docker-compose.local.yml down -v # Remove local volumes specifically docker volume rm munich-news_mongodb_data_local docker volume rm munich-news_mongodb_config_local docker volume rm munich-news_ollama_data_local ``` ## Switching Between Local and Production ```bash # Switch to local cp .env.local .env cp backend/.env.local backend/.env docker-compose -f docker-compose.local.yml up -d # Switch to production cp .env.production .env # (if you have one) cp backend/.env.production backend/.env docker-compose up -d ``` ## Troubleshooting ### Ollama model not downloading ```bash # Pull model manually docker exec munich-news-local-ollama ollama pull phi3:latest ``` ### MongoDB connection refused ```bash # Check if MongoDB is running docker-compose -f docker-compose.local.yml ps mongodb # Check logs docker-compose -f docker-compose.local.yml logs mongodb ``` ### Port already in use ```bash # Check what's using the port lsof -i :5001 # or :3000, :27017, etc. # Stop the conflicting service or change port in docker-compose.local.yml ``` ## Tips 1. **Use phi3 for speed** - It's much faster than gemma3 for local testing 2. **Limit articles** - Use `max_articles: 2` for quick crawl tests 3. **Watch logs** - Keep logs open to see what's happening 4. **Separate volumes** - Local and production use different volumes, so they don't interfere ## Next Steps - See `docs/PERSONALIZATION.md` for personalization feature development - See `docs/OLLAMA_SETUP.md` for AI configuration - See main `README.md` for general documentation