# Playlist Monitor Service - Comprehensive Build Guide ## 📋 Table of Contents 1. [Prerequisites](#prerequisites) 2. [Build Options](#build-options) 3. [Development Setup](#development-setup) 4. [Production Build](#production-build) 5. [UI Integration Options](#ui-integration-options) 6. [Docker Build](#docker-build) 7. [Troubleshooting](#troubleshooting) 8. [Advanced Build Options](#advanced-build-options) ## 🔧 Prerequisites ### System Requirements - **Python**: 3.13+ (3.14 recommended) - **Operating System**: Linux/macOS/Windows WSL2 - **Memory**: Minimum 512MB RAM, 1GB recommended - **Storage**: 100MB for application + space for downloads - **Network**: Access to YouTube and MeTube instance ### Software Dependencies ```bash # Ubuntu/Debian sudo apt update sudo apt install python3.13 python3.13-dev python3.13-venv build-essential curl git # macOS (using Homebrew) brew install python@3.13 curl git # CentOS/RHEL/Fedora sudo dnf install python3.13 python3.13-devel gcc curl git ``` ### MeTube Requirements - MeTube instance running (locally or remotely) - MeTube version that supports playlist downloads - Network connectivity between services ## 🏗️ Build Options ### Option 1: Modern Python with uv (Recommended) **Fastest, most reliable method** ```bash # Install uv package manager curl -LsSf https://astral.sh/uv/install.sh | sh source ~/.cargo/env # Clone and setup cd /root/workspace/tubewatch/playlist-monitor uv sync # Run uv run python -m app.main ``` ### Option 2: Traditional pip/venv **Standard Python approach** ```bash # Create virtual environment python3.13 -m venv venv source venv/bin/activate # Linux/macOS # or venv\Scripts\activate # Windows # Install dependencies pip install --upgrade pip pip install -e . # Run python -m app.main ``` ### Option 3: Poetry (Alternative) **For Poetry users** ```bash # Install Poetry curl -sSL https://install.python-poetry.org | python3 - # Setup project poetry install poetry run python -m app.main ``` ## 🛠️ Development Setup ### 1. Environment Configuration ```bash # Copy environment template cp .env.example .env # Edit configuration nano .env ``` **Essential settings:** ```env # MeTube Integration METUBE_URL=http://localhost:8081 # Database DATABASE_URL=sqlite:///data/playlists.db # Server HOST=0.0.0.0 PORT=8082 # Scheduler DEFAULT_CHECK_INTERVAL=60 MAX_CONCURRENT_DOWNLOADS=3 # Logging LOG_LEVEL=INFO ``` ### 2. Development Dependencies ```bash # Install development dependencies uv sync --extra dev # Or with pip pip install -e ".[dev]" ``` ### 3. Development Tools Setup ```bash # Code formatting uv run black app/ tests/ uv run isort app/ tests/ # Type checking uv run mypy app/ # Linting uv run flake8 app/ tests/ ``` ### 4. Database Setup ```bash # Create data directory mkdir -p data logs # Initialize database (automatic on first run) uv run python -c "from app.core.database import engine, Base; Base.metadata.create_all(bind=engine)" ``` ## 🚀 Production Build ### Step 1: Production Dependencies ```bash # Install only production dependencies uv sync --no-dev # Or with pip pip install -r requirements.txt ``` ### Step 2: Production Configuration ```bash # Create production environment cp .env.example .env.production # Edit production settings nano .env.production ``` **Production recommendations:** ```env # Security DEBUG=false LOG_LEVEL=WARNING CORS_ORIGINS=["https://yourdomain.com"] # Performance MAX_CONCURRENT_DOWNLOADS=5 DEFAULT_CHECK_INTERVAL=30 # Database (PostgreSQL recommended) DATABASE_URL=postgresql://user:pass@localhost/metube_playlists ``` ### Step 3: Production Server ```bash # Use production ASGI server uv run gunicorn app.main:app \ --workers 4 \ --worker-class uvicorn.workers.UvicornWorker \ --bind 0.0.0.0:8082 \ --log-level info # Or with uvicorn directly uv run uvicorn app.main:app \ --host 0.0.0.0 \ --port 8082 \ --workers 4 \ --log-level info ``` ## 🎨 UI Integration Options ### Option 1: Standalone Web UI (Recommended) Create a separate frontend application that communicates with the API. **Technologies:** - **React** with TypeScript - **Vue.js 3** with Composition API - **SvelteKit** for modern approach **Example React setup:** ```bash # Create React app cd /root/workspace/tubewatch npx create-react-app playlist-monitor-ui --template typescript cd playlist-monitor-ui # Install UI libraries npm install @mui/material @emotion/react @emotion/styled axios react-query npm install @mui/icons-material @mui/x-data-grid date-fns # Start development npm start ``` ### Option 2: Extend MeTube Angular UI Modify the existing MeTube Angular frontend to include playlist monitoring. **Approach:** 1. Add new Angular components to MeTube's UI 2. Integrate with existing MeTube routing 3. Use MeTube's existing styling and components **Integration points:** - Add playlist tab to main navigation - Extend existing download interface - Reuse MeTube's component library ### Option 3: Simple HTML Dashboard For minimal UI requirements. ```bash # Create simple dashboard mkdir ui cd ui # Create index.html with vanilla JS cat > index.html << 'EOF' Playlist Monitor

Playlist Monitor Dashboard

EOF # Simple JavaScript API client cat > app.js << 'EOF' const API_BASE = 'http://localhost:8082/api'; async function loadPlaylists() { try { const response = await fetch(`${API_BASE}/playlists`); const data = await response.json(); displayPlaylists(data); } catch (error) { console.error('Error loading playlists:', error); } } function displayPlaylists(playlists) { const container = document.getElementById('playlists'); container.innerHTML = playlists.map(playlist => `
${playlist.title || 'Untitled'}

${playlist.url}

Status: ${playlist.enabled ? 'Enabled' : 'Disabled'}

`).join(''); } loadPlaylists(); EOF ``` ## 🐳 Docker Build ### Development Docker Build ```bash # Build development image docker build -t playlist-monitor:dev . # Run development container docker run -d \ --name playlist-monitor-dev \ -p 8082:8082 \ -e DEBUG=true \ -v $(pwd)/data:/app/data \ -v $(pwd)/logs:/app/logs \ playlist-monitor:dev ``` ### Production Docker Build ```bash # Build production image docker build -t playlist-monitor:latest . # Run production container docker run -d \ --name playlist-monitor \ -p 8082:8082 \ -e METUBE_URL=http://metube:8081 \ -v playlist-data:/app/data \ -v playlist-logs:/app/logs \ --restart unless-stopped \ --health-cmd="curl -f http://localhost:8082/health || exit 1" \ --health-interval=30s \ playlist-monitor:latest ``` ### Multi-stage Docker Build (Optimized) ```dockerfile # Build stage FROM python:3.13-slim as builder WORKDIR /build COPY pyproject.toml ./ RUN pip install uv RUN uv sync --no-dev # Runtime stage FROM python:3.13-slim RUN apt-get update && apt-get install -y --no-install-recommends \ curl && \ rm -rf /var/lib/apt/lists/* WORKDIR /app COPY --from=builder /build/.venv ./.venv COPY app/ ./app/ ENV PATH="/app/.venv/bin:$PATH" USER 1000:1000 EXPOSE 8082 CMD ["python", "-m", "app.main"] ``` ## 🔍 Troubleshooting ### Build Issues #### Python Version Mismatch ```bash # Check Python version python3 --version # Install correct version pyenv install 3.13.0 pyenv local 3.13.0 ``` #### Dependency Conflicts ```bash # Clear cache uv cache clean rm -rf .venv # Reinstall uv sync ``` #### Compilation Errors ```bash # Install build dependencies sudo apt install build-essential python3-dev # Or use pre-built wheels pip install --only-binary=all -r requirements.txt ``` ### Runtime Issues #### Port Already in Use ```bash # Find process using port 8082 lsof -i :8082 # Kill process kill -9 # Or use different port export PORT=8083 ``` #### Database Locked ```bash # Check for existing processes ps aux | grep playlist-monitor # Remove lock file rm data/*.db-journal ``` #### MeTube Connection Failed ```bash # Test MeTube connectivity curl http://localhost:8081/info # Check MeTube logs docker logs metube ``` ## 🔧 Advanced Build Options ### Custom Database Backend ```bash # PostgreSQL setup docker run -d \ --name postgres-playlist \ -e POSTGRES_DB=playlists \ -e POSTGRES_USER=playlist_user \ -e POSTGRES_PASSWORD=secure_password \ -p 5432:5432 \ postgres:15 # Update .env DATABASE_URL=postgresql://playlist_user:secure_password@localhost:5432/playlists ``` ### Redis for Caching ```bash # Redis setup docker run -d \ --name redis-playlist \ -p 6379:6379 \ redis:7-alpine # Install Redis dependencies uv add redis ``` ### HTTPS/SSL Configuration ```bash # Generate SSL certificates openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes # Update configuration HTTPS_ENABLED=true SSL_CERTFILE=cert.pem SSL_KEYFILE=key.pem ``` ### Load Balancing with Nginx ```nginx upstream playlist_monitor { server localhost:8082; server localhost:8083; server localhost:8084; } server { listen 80; server_name your-domain.com; location / { proxy_pass http://playlist_monitor; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` ## 📋 Build Checklist ### Pre-build - [ ] Python 3.13+ installed - [ ] MeTube accessible - [ ] Required ports available (8082) - [ ] Sufficient disk space ### Build Process - [ ] Dependencies installed successfully - [ ] Configuration file created - [ ] Database initialized - [ ] Tests pass - [ ] Service starts without errors ### Post-build - [ ] API accessible at http://localhost:8082 - [ ] MeTube connection established - [ ] Database operations working - [ ] Scheduler running - [ ] Logs rotating properly ## 🎯 Next Steps After successful build: 1. **Test the API** using the Quick Start Guide 2. **Set up monitoring** with health checks 3. **Configure automatic startup** with systemd or Docker 4. **Implement UI** (see UI_INTEGRATION.md) 5. **Set up logging** and monitoring ## 📚 Related Documentation - [QUICK_START_GUIDE.md](QUICK_START_GUIDE.md) - Getting started quickly - [TESTING_GUIDE.md](TESTING_GUIDE.md) - Comprehensive testing - [UI_INTEGRATION.md](UI_INTEGRATION.md) - UI implementation options - [ADVANCED_CONFIG.md](ADVANCED_CONFIG.md) - Advanced configuration options