369 lines
9.4 KiB
Markdown
369 lines
9.4 KiB
Markdown
# Automatic Dependency Updates
|
|
|
|
## Overview
|
|
|
|
The Dependency Updater automatically checks for and installs updates for critical components once per day when running in scheduler mode. This ensures FlareSolverr, Playwright browsers, and yt-dlp stay current without manual intervention.
|
|
|
|
## Why Auto-Updates?
|
|
|
|
**Critical dependencies that require frequent updates:**
|
|
|
|
1. **FlareSolverr** - Cloudflare bypass technology
|
|
- Cloudflare frequently updates their bot detection
|
|
- FlareSolverr updates to counter new blocks
|
|
- Outdated version = downloads fail with Cloudflare errors
|
|
|
|
2. **yt-dlp** - Video download engine (TikTok, etc.)
|
|
- TikTok/YouTube change their APIs constantly
|
|
- yt-dlp releases updates almost daily
|
|
- Outdated version = TikTok downloads fail
|
|
|
|
3. **Playwright Browsers** - Chromium/Firefox automation
|
|
- Browser updates include security fixes
|
|
- Anti-detection improvements
|
|
- Outdated browsers are easier to detect
|
|
|
|
## How It Works
|
|
|
|
### Automatic Check Schedule
|
|
|
|
- **Runs**: Once every 24 hours (configurable)
|
|
- **Mode**: Scheduler only (not manual runs)
|
|
- **Time**: Checks every minute, but internal cooldown prevents spam
|
|
- **Location**: Integrated into scheduler loop
|
|
|
|
### Update Process
|
|
|
|
```
|
|
Scheduler Running
|
|
↓
|
|
Every 60 seconds:
|
|
↓
|
|
Check if 24 hours passed since last update check
|
|
↓ Yes
|
|
Update Components:
|
|
1. FlareSolverr (docker pull + restart)
|
|
2. Playwright (chromium + firefox)
|
|
3. yt-dlp (pip upgrade)
|
|
↓
|
|
Log Results
|
|
↓
|
|
Send Notification (if updates installed)
|
|
↓
|
|
Save State with Timestamp
|
|
↓
|
|
Resume Scheduler
|
|
```
|
|
|
|
## Configuration
|
|
|
|
Located in `config/settings.json`:
|
|
|
|
```json
|
|
{
|
|
"dependency_updates": {
|
|
"enabled": true,
|
|
"check_interval_hours": 24,
|
|
"auto_install": true,
|
|
"components": {
|
|
"flaresolverr": {
|
|
"enabled": true,
|
|
"notify_on_update": true
|
|
},
|
|
"playwright": {
|
|
"enabled": true,
|
|
"notify_on_update": false
|
|
},
|
|
"yt_dlp": {
|
|
"enabled": true,
|
|
"notify_on_update": false
|
|
}
|
|
},
|
|
"pushover": {
|
|
"enabled": true,
|
|
"priority": -1,
|
|
"sound": "magic"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### Configuration Options
|
|
|
|
**Main Settings:**
|
|
- `enabled` (boolean) - Master switch for auto-updates (default: true)
|
|
- `check_interval_hours` (integer) - Hours between update checks (default: 24)
|
|
- `auto_install` (boolean) - Automatically install updates (default: true)
|
|
|
|
**Component Settings:**
|
|
- `enabled` (boolean) - Enable updates for this component
|
|
- `notify_on_update` (boolean) - Send Pushover notification when updated
|
|
|
|
**Pushover Settings:**
|
|
- `enabled` (boolean) - Enable update notifications
|
|
- `priority` (integer) - Notification priority (-2 to 2, -1 = low)
|
|
- `sound` (string) - Notification sound (default: "magic")
|
|
|
|
## Update Components
|
|
|
|
### 1. FlareSolverr (Docker Container)
|
|
|
|
**Why**: Cloudflare constantly updates bot detection; FlareSolverr must keep pace
|
|
|
|
**Update Process:**
|
|
```bash
|
|
1. docker pull ghcr.io/flaresolverr/flaresolverr:latest
|
|
2. If new image downloaded:
|
|
a. docker stop flaresolverr
|
|
b. docker rm flaresolverr
|
|
c. docker run -d --name flaresolverr -p 8191:8191 ...
|
|
3. Container running with latest version
|
|
```
|
|
|
|
**Notification**: ✅ Enabled by default (important update)
|
|
|
|
**Downtime**: ~5 seconds during container restart
|
|
|
|
### 2. Playwright Browsers (Chromium + Firefox)
|
|
|
|
**Why**: Browser updates include anti-detection improvements and security fixes
|
|
|
|
**Update Process:**
|
|
```bash
|
|
1. python3 -m playwright install chromium
|
|
2. python3 -m playwright install firefox
|
|
3. Browsers updated in /opt/media-downloader/.playwright/
|
|
```
|
|
|
|
**Notification**: ❌ Disabled by default (routine update)
|
|
|
|
**Downtime**: None (browsers updated while not in use)
|
|
|
|
### 3. yt-dlp (Python Package)
|
|
|
|
**Why**: TikTok/YouTube change APIs constantly; yt-dlp updates almost daily
|
|
|
|
**Update Process:**
|
|
```bash
|
|
1. pip3 install --upgrade yt-dlp
|
|
2. Latest version installed system-wide
|
|
```
|
|
|
|
**Notification**: ❌ Disabled by default (very frequent)
|
|
|
|
**Downtime**: None
|
|
|
|
## Notification Examples
|
|
|
|
**FlareSolverr Update:**
|
|
```
|
|
🔄 Dependencies Updated
|
|
|
|
FlareSolverr has been updated to the latest version.
|
|
|
|
Updated at: Oct 29, 3:15 AM
|
|
```
|
|
|
|
**Multiple Updates:**
|
|
```
|
|
🔄 Dependencies Updated
|
|
|
|
The following components have been updated:
|
|
|
|
• FlareSolverr
|
|
• Playwright Browsers
|
|
• yt-dlp
|
|
|
|
Updated at: Oct 29, 3:15 AM
|
|
```
|
|
|
|
## State Tracking
|
|
|
|
State stored in `/opt/media-downloader/database/dependency_updates.json`:
|
|
|
|
```json
|
|
{
|
|
"last_check": "2025-10-29T03:15:00",
|
|
"components": {
|
|
"flaresolverr": {
|
|
"last_update": "2025-10-29T03:15:00",
|
|
"last_check": "2025-10-29T03:15:00",
|
|
"status": "updated"
|
|
},
|
|
"playwright": {
|
|
"last_update": "2025-10-28T03:15:00",
|
|
"last_check": "2025-10-29T03:15:00",
|
|
"status": "current"
|
|
},
|
|
"yt_dlp": {
|
|
"last_update": "2025-10-29T03:15:00",
|
|
"last_check": "2025-10-29T03:15:00",
|
|
"status": "updated"
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Testing
|
|
|
|
### Manual Update Check
|
|
|
|
```python
|
|
from modules.dependency_updater import DependencyUpdater
|
|
from modules.pushover_notifier import create_notifier_from_config
|
|
import json
|
|
|
|
# Load config
|
|
with open('/opt/media-downloader/config/settings.json') as f:
|
|
config = json.load(f)
|
|
|
|
# Initialize updater
|
|
notifier = create_notifier_from_config(config)
|
|
updater = DependencyUpdater(
|
|
config=config.get('dependency_updates', {}),
|
|
pushover_notifier=notifier,
|
|
scheduler_mode=True
|
|
)
|
|
|
|
# Force update check (ignores 24h cooldown)
|
|
results = updater.force_update_check()
|
|
|
|
print("Update Results:")
|
|
for component, updated in results.items():
|
|
status = "✓ Updated" if updated else "Already current"
|
|
print(f" {component}: {status}")
|
|
```
|
|
|
|
### Check Last Update Time
|
|
|
|
```bash
|
|
cat /opt/media-downloader/database/dependency_updates.json | python3 -m json.tool
|
|
```
|
|
|
|
### Monitor Updates in Logs
|
|
|
|
```bash
|
|
tail -f /opt/media-downloader/logs/*.log | grep -i "dependency\|update"
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
**Updates not running:**
|
|
- Check `dependency_updates.enabled` is `true`
|
|
- Verify running in scheduler mode (not manual)
|
|
- Check last_check timestamp in state file
|
|
- Ensure 24 hours have passed since last check
|
|
|
|
**FlareSolverr update fails:**
|
|
- Check Docker is running: `docker ps`
|
|
- Check internet connection
|
|
- Check Docker Hub access: `docker pull ghcr.io/flaresolverr/flaresolverr:latest`
|
|
- Review error in logs
|
|
|
|
**Playwright update fails:**
|
|
- Check disk space: `df -h`
|
|
- Check Python environment
|
|
- Manual update: `python3 -m playwright install chromium firefox`
|
|
|
|
**yt-dlp update fails:**
|
|
- Check pip permissions
|
|
- Manual update: `pip3 install --upgrade yt-dlp`
|
|
- Check internet connection
|
|
|
|
**Too many notifications:**
|
|
- Disable per-component: `notify_on_update: false`
|
|
- Disable all notifications: `pushover.enabled: false`
|
|
- Keep enabled only for critical (FlareSolverr)
|
|
|
|
**Want to disable auto-updates:**
|
|
```json
|
|
{
|
|
"dependency_updates": {
|
|
"enabled": false
|
|
}
|
|
}
|
|
```
|
|
|
|
**Want to disable specific component:**
|
|
```json
|
|
{
|
|
"dependency_updates": {
|
|
"components": {
|
|
"yt_dlp": {
|
|
"enabled": false
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Manual Updates
|
|
|
|
If you prefer manual updates, disable auto-updates and run:
|
|
|
|
```bash
|
|
# Update FlareSolverr
|
|
docker pull ghcr.io/flaresolverr/flaresolverr:latest
|
|
docker stop flaresolverr && docker rm flaresolverr
|
|
docker run -d --name flaresolverr -p 8191:8191 -e LOG_LEVEL=info --restart unless-stopped ghcr.io/flaresolverr/flaresolverr:latest
|
|
|
|
# Update Playwright
|
|
cd /opt/media-downloader
|
|
python3 -m playwright install chromium firefox
|
|
|
|
# Update yt-dlp
|
|
pip3 install --upgrade yt-dlp
|
|
```
|
|
|
|
## Logs
|
|
|
|
Update activity logged with `[DependencyUpdater]` tag:
|
|
|
|
```
|
|
2025-10-29 03:15:00 [DependencyUpdater] [INFO] Checking for dependency updates...
|
|
2025-10-29 03:15:05 [DependencyUpdater] [INFO] Checking FlareSolverr for updates...
|
|
2025-10-29 03:15:10 [DependencyUpdater] [INFO] ✓ FlareSolverr updated and restarted successfully
|
|
2025-10-29 03:15:15 [DependencyUpdater] [INFO] Checking Playwright browsers for updates...
|
|
2025-10-29 03:15:45 [DependencyUpdater] [INFO] Playwright browsers already up to date
|
|
2025-10-29 03:15:46 [DependencyUpdater] [INFO] Checking yt-dlp for updates...
|
|
2025-10-29 03:15:50 [DependencyUpdater] [INFO] ✓ yt-dlp updated successfully
|
|
2025-10-29 03:15:51 [DependencyUpdater] [INFO] Sent update notification for: FlareSolverr, yt-dlp
|
|
```
|
|
|
|
## Benefits
|
|
|
|
✅ **Zero Maintenance** - Updates install automatically
|
|
✅ **Always Current** - Critical dependencies stay up to date
|
|
✅ **Prevents Failures** - Outdated FlareSolverr/yt-dlp cause download failures
|
|
✅ **Non-Intrusive** - Low-priority notifications, doesn't interrupt workflow
|
|
✅ **Reliable** - Handles failures gracefully, won't crash scheduler
|
|
✅ **Configurable** - Enable/disable per component or globally
|
|
|
|
## Security Considerations
|
|
|
|
**Automatic updates are safe:**
|
|
- Only updates from official sources (Docker Hub, PyPI)
|
|
- Uses official image tags (`:latest`)
|
|
- No code execution from untrusted sources
|
|
- Same update process as manual updates
|
|
|
|
**Risk Mitigation:**
|
|
- Version backups taken before major changes
|
|
- Logs all update activity
|
|
- Can disable if stability is critical
|
|
- Can rollback FlareSolverr to specific version
|
|
|
|
**Recommended for most users:**
|
|
- ✅ Enable for production (scheduler mode)
|
|
- ✅ Keeps services working when APIs change
|
|
- ✅ Minimal risk, high benefit
|
|
|
|
## Future Enhancements
|
|
|
|
- Update rollback if service fails after update
|
|
- Pinning specific versions
|
|
- Update schedule (time of day)
|
|
- Pre-update testing
|
|
- Update changelog notifications
|
|
- Critical security update alerts
|