Documentation Index
Fetch the complete documentation index at: https://mintlify.com/mario1027/offlinetube/llms.txt
Use this file to discover all available pages before exploring further.
Overview
OfflineTube uses Next.js standalone output mode for optimized production builds and Bun as the production server runtime. The backend runs as a standalone FastAPI service.Production Architecture
Prerequisites
System Requirements
- Node.js 20+ (for building)
- Bun (for production server)
- Python 3.10+
- ffmpeg and ffprobe
- Sufficient disk space for downloads
Install Bun
Building for Production
next build to create optimized production bundle.next/static → .next/standalone/.next/public → .next/standalone/Route (app) Size First Load JS
┌ ○ / ... ...
├ ○ /library ... ...
└ ○ /search ... ...
○ (Static) prerendered as static content
Backend Production Setup
Running in Production
You need to run both services. Use a process manager like systemd, PM2, or supervisord.Option 1: Manual Start (Development/Testing)
Option 2: Using PM2 (Recommended)
PM2 manages processes, auto-restarts on failure, and handles logs.module.exports = {
apps: [
{
name: 'offlinetube-frontend',
script: 'bun',
args: '.next/standalone/server.js',
env: {
NODE_ENV: 'production',
PORT: 3000
},
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '1G',
error_file: 'logs/frontend-error.log',
out_file: 'logs/frontend-out.log'
},
{
name: 'offlinetube-backend',
script: 'mini-services/offlinetube-api/.venv/bin/python',
args: 'mini-services/offlinetube-api/main.py',
cwd: 'mini-services/offlinetube-api',
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '1G',
error_file: 'logs/backend-error.log',
out_file: 'logs/backend-out.log'
}
]
};
# Create logs directory
mkdir -p logs
# Start both services
pm2 start ecosystem.config.js
# View status
pm2 status
# View logs
pm2 logs
# Save PM2 configuration
pm2 save
# Set up PM2 to start on boot
pm2 startup
Option 3: Systemd Services (Linux)
[Unit]
Description=OfflineTube Frontend (Next.js)
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/path/to/offlinetube
Environment="NODE_ENV=production"
ExecStart=/usr/local/bin/bun .next/standalone/server.js
Restart=on-failure
RestartSec=10
StandardOutput=append:/var/log/offlinetube/frontend.log
StandardError=append:/var/log/offlinetube/frontend-error.log
[Install]
WantedBy=multi-user.target
[Unit]
Description=OfflineTube Backend (FastAPI)
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/path/to/offlinetube/mini-services/offlinetube-api
ExecStart=/path/to/offlinetube/mini-services/offlinetube-api/.venv/bin/python main.py
Restart=on-failure
RestartSec=10
StandardOutput=append:/var/log/offlinetube/backend.log
StandardError=append:/var/log/offlinetube/backend-error.log
[Install]
WantedBy=multi-user.target
# Create log directory
sudo mkdir -p /var/log/offlinetube
sudo chown www-data:www-data /var/log/offlinetube
# Reload systemd
sudo systemctl daemon-reload
# Enable services to start on boot
sudo systemctl enable offlinetube-frontend
sudo systemctl enable offlinetube-backend
# Start services
sudo systemctl start offlinetube-frontend
sudo systemctl start offlinetube-backend
# Check status
sudo systemctl status offlinetube-frontend
sudo systemctl status offlinetube-backend
# View logs
sudo journalctl -u offlinetube-frontend -f
sudo journalctl -u offlinetube-backend -f
Environment Configuration
Frontend Environment Variables
Create.env.production in project root:
Rebuild After Configuration Changes
If you modify environment variables:Reverse Proxy Setup (Optional)
For production, use Nginx or Apache as a reverse proxy.Nginx Configuration
Create/etc/nginx/sites-available/offlinetube:
Directory Structure for Production
Performance Considerations
Disk Space Management
Downloads can consume significant disk space:Memory Usage
- Frontend: ~100-200 MB per instance
- Backend: ~200-400 MB (increases during active downloads)
Concurrent Downloads
The backend handles downloads in background tasks. Monitor memory usage if multiple large downloads run simultaneously.FFmpeg Performance
FFmpeg uses significant CPU during video processing. Consider:- Limiting concurrent downloads
- Running on a machine with adequate CPU cores
Caching and CDN
For static assets, consider:- Using a CDN for
_next/static/files - Configuring appropriate cache headers in Nginx
Security Best Practices
Update CORS Settings
Editmini-services/offlinetube-api/main.py:
Firewall Configuration
File Permissions
Monitoring and Logs
Log Locations
- PM2:
logs/frontend-*.log,logs/backend-*.log - Systemd:
/var/log/offlinetube/ - Manual:
server.log,dev.log
Monitor Resource Usage
Health Checks
Troubleshooting
Build Failures
Issue:npm run build fails
Solutions:
- Check TypeScript errors (note:
ignoreBuildErrors: truein config) - Ensure all dependencies are installed
- Clear build cache:
rm -rf .next && npm run build
Server Won’t Start
Issue: Bun server fails to start Solutions:Backend Crashes
Issue: Python process crashes during downloads Solutions:- Check memory usage (downloads are memory-intensive)
- Verify ffmpeg is working:
ffmpeg -version - Check Python logs for stack traces
- Update yt-dlp:
pip install -U yt-dlp
High Disk Usage
Issue: Disk space running out Solutions:Next Steps
- See Docker Deployment for containerized production deployment
- Set up SSL/TLS with Let’s Encrypt for HTTPS
- Configure automated backups for important data
- Set up monitoring with tools like Prometheus or DataDog