# 🐳 Podcastic - Unraid Installation Guide Complete guide to install Podcastic on Unraid as a **single all-in-one container**. ## 📋 What's Included This single Docker container includes: - ✅ **Backend**: Node.js + Express.js API - ✅ **Frontend**: React web interface - ✅ **Database**: MongoDB (embedded) - ✅ **Cache**: Redis (embedded) - ✅ **Web Server**: Nginx reverse proxy - ✅ **Process Manager**: Supervisor (manages all 5 services) All in **ONE container** on port **3579** ## Prerequisites - Unraid server with Docker support - ~2GB RAM available - ~20GB storage for database/media - Internet connection ## Installation Steps ### Step 1: Clone Repository ```bash # Via terminal on Unraid cd /mnt/user/appdata # or your preferred path git clone https://github.com/R0m1k3/podcastic.git cd podcastic ``` Or download as ZIP from GitHub and extract. ### Step 2: Configure Environment ```bash # Copy template cp .env.example .env # Edit with your settings nano .env ``` **Key settings**: ```env NODE_ENV=production # JWT Secret - CHANGE THIS! JWT_SECRET=your-super-secret-key-change-me-in-production # Optional: PodcastIndex API for podcast search PODCAST_INDEX_API_KEY= PODCAST_INDEX_API_SECRET= ``` ### Step 3: Build Docker Image Option A: Build locally (takes ~5-10 minutes) ```bash docker-compose -f docker-compose.unraid.yml build --no-cache ``` Option B: Use pre-built image (faster) ```bash # Will be available after first push to Docker Hub # docker pull r0m1k3/podcastic:latest ``` ### Step 4: Start Container ```bash # Start docker-compose -f docker-compose.unraid.yml up -d # View logs docker-compose -f docker-compose.unraid.yml logs -f podcastic # Check status docker ps | grep podcastic ``` ### Step 5: Access Application Open browser: ``` http://your-unraid-ip:3579 ``` **First Time Setup**: 1. Click "Create Account" 2. Register with email/password 3. Log in 4. Go to "Discover" to search podcasts 5. Subscribe and listen! --- ## 📊 Container Architecture ``` Single Container (podcastic) ├── Nginx (port 3579) │ ├── Serves static frontend │ └── Proxies /api to backend ├── Node.js Backend (internal port 5000) │ ├── API routes │ ├── Authentication │ └── Database management ├── MongoDB (internal port 27017) │ └── Podcast data storage └── Redis (internal port 6379) └── Cache & sessions ``` All services communicate **internally** - only port 3579 exposed. --- ## 🛠️ Unraid Integration ### Add to Unraid via WebUI 1. **Settings → Docker** → Enable Docker 2. **Docker** tab 3. Add custom template: ```xml podcastic r0m1k3/podcastic:latest https://hub.docker.com/ bridge sh false http://[IP]:[PORT:3579] false Podcastic - Multi-user podcast streaming application bridge 3579 3579 tcp /mnt/user/appdata/podcastic/db /data/db rw /mnt/user/appdata/podcastic/redis /data/redis rw /mnt/user/appdata/podcastic/logs /var/log/supervisor rw JWT_SECRET change-me-in-production PODCAST_INDEX_API_KEY PODCAST_INDEX_API_SECRET ``` Or use Docker Compose tab with `docker-compose.unraid.yml` --- ## 📂 Data Persistence Data is saved to Unraid shares: ``` /mnt/user/appdata/podcastic/ ├── db/ # MongoDB data (podcasts, users, episodes) ├── redis/ # Redis cache data └── logs/ # Application logs ``` ### Backup ```bash # Backup database docker exec podcastic mongodump --out /backup/mongodb # Copy to safe location cp -r /mnt/user/appdata/podcastic /mnt/backup/podcastic-backup ``` ### Restore ```bash docker exec podcastic mongorestore /backup/mongodb ``` --- ## 🔧 Management Commands ### View Logs ```bash # All logs docker logs -f podcastic # Specific service docker exec podcastic tail -f /var/log/supervisor/backend.out.log docker exec podcastic tail -f /var/log/supervisor/mongodb.out.log docker exec podcastic tail -f /var/log/supervisor/redis.out.log docker exec podcastic tail -f /var/log/supervisor/nginx.out.log ``` ### Restart Container ```bash docker-compose -f docker-compose.unraid.yml restart podcastic ``` ### Stop Container ```bash docker-compose -f docker-compose.unraid.yml down # Keep volumes (data persists) # Data in /mnt/user/appdata/podcastic/ is preserved ``` ### Update to Latest ```bash # Pull latest code cd /path/to/podcastic git pull # Rebuild and restart docker-compose -f docker-compose.unraid.yml build --no-cache docker-compose -f docker-compose.unraid.yml up -d ``` --- ## 🐛 Troubleshooting ### Container won't start ```bash # Check logs docker logs podcastic # Common issues: # - Port 3579 in use: Change in docker-compose.unraid.yml # - Insufficient RAM: Free up memory # - Permission issues: Check volume permissions ``` ### MongoDB not starting ```bash # Check mongo logs docker exec podcastic tail -f /var/log/supervisor/mongodb.out.log # Repair database docker exec podcastic mongod --repair --dbpath /data/db ``` ### Can't access on port 3579 ```bash # Check if container is running docker ps | grep podcastic # Check if port is open netstat -tulpn | grep 3579 # Test connection curl http://localhost:3579/health ``` ### Out of disk space MongoDB can grow large. Check: ```bash docker exec podcastic du -sh /data/db # Clean old data (backup first!) ``` --- ## 📈 Performance Optimization ### For Limited Resources Edit `docker-compose.unraid.yml`: ```yaml # Limit memory usage mem_limit: 1g cpus: '0.5' ``` ### For High Performance Increase limits: ```yaml mem_limit: 4g cpus: '2' ``` ### Disable Unneeded Features If only streaming (no search): ```env PODCAST_INDEX_API_KEY= # Leave empty ``` --- ## 🔒 Security Notes ### Change Default Secrets ```env # MUST change in production! JWT_SECRET=your-unique-secret-key-here # Use strong password for first admin account ``` ### Firewall Rules Allow only trusted IPs: ```bash # On Unraid, set firewall rules in UI # Or use nginx config to restrict access ``` ### SSL/HTTPS Setup If exposing to internet, use reverse proxy with SSL: - Nginx Proxy Manager (separate container) - Traefik (with Let's Encrypt) - Unraid built-in reverse proxy --- ## 📊 Monitoring ### Check Container Health ```bash # Real-time stats docker stats podcastic # Service status docker exec podcastic supervisorctl status # Expected output: # mongodb RUNNING pid 123, uptime 0:00:45 # redis RUNNING pid 124, uptime 0:00:45 # backend RUNNING pid 125, uptime 0:00:45 # nginx RUNNING pid 126, uptime 0:00:45 ``` ### Resource Usage ```bash # Disk usage du -sh /mnt/user/appdata/podcastic/ # Memory usage docker exec podcastic free -h # CPU usage docker stats --no-stream podcastic ``` --- ## 🆘 Support If issues occur: 1. **Check logs**: ```bash docker logs podcastic ``` 2. **Check service status**: ```bash docker exec podcastic supervisorctl status ``` 3. **Rebuild container**: ```bash docker-compose -f docker-compose.unraid.yml build --no-cache docker-compose -f docker-compose.unraid.yml up -d ``` 4. **Factory reset** (loses all data!): ```bash docker-compose -f docker-compose.unraid.yml down -v rm -rf /mnt/user/appdata/podcastic # Start fresh ``` --- ## 🎯 Next Steps 1. **First Run**: Create account, set JWT_SECRET properly 2. **Configure PodcastIndex**: Optional, enables podcast search 3. **Add Podcasts**: Via Discover or RSS URLs 4. **Enjoy**: Start listening! --- ## 📚 Additional Resources - **Main README**: See README.md - **Getting Started**: See GETTING_STARTED.md - **PodcastIndex Setup**: See PODCAST_INDEX_SETUP.md - **GitHub**: https://github.com/R0m1k3/podcastic --- **Last Updated**: 2026-04-16 **Tested on**: Unraid 6.12+