6.7 KiB
6.7 KiB
VidRip Production Deployment Guide
This guide covers deploying VidRip in a production environment.
Quick Start (Simple Deployment)
The simplest way to run VidRip in production:
# Make scripts executable (if not already)
chmod +x start-production.sh stop-production.sh
# Start the service
./start-production.sh
# Stop the service
./stop-production.sh
The start-production.sh script will:
- Check system requirements (Node.js 18+, yt-dlp)
- Install dependencies
- Build backend and frontend
- Start the backend server in the background
- Create log files in
logs/directory
Production Deployment (Recommended)
For a robust production setup, use systemd for process management:
1. Install System Requirements
# Install Node.js 18+ (if not installed)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
# Install yt-dlp
sudo apt-get install -y python3-pip
pip3 install yt-dlp
# OR
sudo wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp
sudo chmod a+rx /usr/local/bin/yt-dlp
2. Deploy Application Files
# Create application directory
sudo mkdir -p /var/www/vidrip
sudo chown $USER:$USER /var/www/vidrip
# Copy files to production location
cp -r /path/to/vidrip/* /var/www/vidrip/
# Create required directories
sudo mkdir -p /var/log/vidrip
sudo chown www-data:www-data /var/log/vidrip
3. Build the Application
cd /var/www/vidrip
# Install dependencies
npm run install:all
# Build backend
cd backend
npm run build
# Build frontend
cd ../frontend
npm run build
4. Configure Backend (Optional)
Create /var/www/vidrip/backend/.env:
NODE_ENV=production
PORT=3001
5. Setup Systemd Service
# Copy service file
sudo cp /var/www/vidrip/vidrip.service /etc/systemd/system/
# Edit the service file to match your paths and user
sudo nano /etc/systemd/system/vidrip.service
# Reload systemd
sudo systemctl daemon-reload
# Enable service to start on boot
sudo systemctl enable vidrip
# Start service
sudo systemctl start vidrip
# Check status
sudo systemctl status vidrip
6. Setup Nginx Reverse Proxy
Create /etc/nginx/sites-available/vidrip:
server {
listen 80;
server_name your-domain.com;
# Serve frontend static files
location / {
root /var/www/vidrip/frontend/dist;
try_files $uri $uri/ /index.html;
}
# Proxy API requests to backend
location /api/ {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Serve downloaded video files
location /downloads/ {
alias /var/www/vidrip/backend/downloads/;
add_header Content-Type video/mp4;
}
# Increase upload size if needed
client_max_body_size 100M;
}
Enable the site:
sudo ln -s /etc/nginx/sites-available/vidrip /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
7. Setup SSL with Let's Encrypt (Recommended)
sudo apt-get install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com
Systemd Service Management
# Start service
sudo systemctl start vidrip
# Stop service
sudo systemctl stop vidrip
# Restart service
sudo systemctl restart vidrip
# View status
sudo systemctl status vidrip
# View logs
sudo journalctl -u vidrip -f
# View application logs
tail -f /var/log/vidrip/vidrip.log
tail -f /var/log/vidrip/vidrip-error.log
PM2 Alternative (Node.js Process Manager)
If you prefer PM2 over systemd:
# Install PM2 globally
sudo npm install -g pm2
# Start application
cd /var/www/vidrip/backend
pm2 start dist/server.js --name vidrip
# Save PM2 configuration
pm2 save
# Setup PM2 to start on boot
pm2 startup
# Follow the instructions shown
# View logs
pm2 logs vidrip
# Monitor
pm2 monit
# Restart
pm2 restart vidrip
Environment Variables
Configure in /var/www/vidrip/backend/.env:
NODE_ENV=production
PORT=3001
Monitoring and Maintenance
Check Service Health
# Check if backend is running
curl http://localhost:3001/api/config
# Check disk space (downloads can fill up)
df -h /var/www/vidrip/backend/downloads
Log Rotation
Create /etc/logrotate.d/vidrip:
/var/log/vidrip/*.log {
daily
rotate 14
compress
delaycompress
notifempty
create 0640 www-data www-data
sharedscripts
postrotate
systemctl reload vidrip > /dev/null 2>&1 || true
endscript
}
Backup Strategy
# Backup database
cp /var/www/vidrip/backend/data.db /backups/vidrip-$(date +%Y%m%d).db
# Backup downloads (optional, can be large)
rsync -av /var/www/vidrip/backend/downloads/ /backups/downloads/
Firewall Configuration
# Allow HTTP/HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Backend should NOT be exposed directly
# Only accessible via nginx proxy
Troubleshooting
Service won't start
# Check logs
sudo journalctl -u vidrip -n 50
# Check if port is already in use
sudo netstat -tlnp | grep 3001
# Check file permissions
ls -la /var/www/vidrip/backend/dist/server.js
Database locked errors
# Check database permissions
ls -la /var/www/vidrip/backend/data.db
# Ensure only one process is accessing database
ps aux | grep vidrip
yt-dlp issues
# Update yt-dlp
pip3 install --upgrade yt-dlp
# Check if it's in PATH
which yt-dlp
# Test manually
yt-dlp --version
Security Checklist
- Run backend as non-root user (www-data)
- Enable firewall (ufw)
- Setup SSL/TLS certificates
- Restrict database file permissions
- Configure nginx security headers
- Enable log rotation
- Regular yt-dlp updates
- Monitor disk space for downloads
- Setup fail2ban (optional)
- Regular security updates
Performance Tuning
Download Directory Management
Monitor download directory size:
# Check total size
du -sh /var/www/vidrip/backend/downloads
# Find large files
du -h /var/www/vidrip/backend/downloads/* | sort -rh | head -20
Database Optimization
# Vacuum database periodically
sqlite3 /var/www/vidrip/backend/data.db "VACUUM;"
Updating the Application
# Pull latest code
cd /var/www/vidrip
git pull
# Install dependencies
npm run install:all
# Rebuild backend
cd backend
npm run build
# Rebuild frontend
cd ../frontend
npm run build
# Restart service
sudo systemctl restart vidrip