Changes: - moneyline_v11_2_indicator.pinescript: Alert format now includes SCORE:100 - parse_signal_enhanced.json: Added indicatorScore parsing (SCORE:X regex) - execute/route.ts: Added hasIndicatorScore bypass (score >= 90 bypasses quality check) - Money_Machine.json: Both Execute Trade nodes now pass indicatorScore to API Rationale: v11.2 indicator filters already optimized (2.544 PF, +51.80% return). Bot-side quality scoring was blocking proven profitable signals (e.g., quality 75). Now indicator passes SCORE:100, bot respects it and executes immediately. This completes the signal chain: Indicator (SCORE:100) → n8n parser (indicatorScore) → workflow → bot endpoint (bypass)
12 KiB
Migration from Hostinger Secondary Server
Date: December 21, 2025 Current Secondary: srvfailover01 (72.62.39.24) - Hostinger VPS Reason: Cost reduction - server too expensive for passive HA role
Current Setup Analysis
Hostinger Server (srvfailover01 - 72.62.39.24)
- Uptime: 26 days
- Disk Usage: 20GB / 99GB (21% used)
- Running Containers:
- trading-bot-v4-secondary (unhealthy - expected for passive)
- trading-bot-postgres (streaming replica)
- n8n (for webhook routing)
- trading-bot-nginx (reverse proxy)
- Role: Passive secondary with auto-failover via DNS (INWX API)
- Database: PostgreSQL streaming replication from primary (95.216.52.28)
- DNS Failover: Monitors primary every 30s, switches tradervone.v4.dedyn.io on failure
What Needs to be Preserved
Critical Data:
- ✅ Trading bot code + configuration (synced daily from primary)
- ✅ Database (replicated from primary - can restore from primary)
- ✅ .env file with wallet keys (MUST backup securely)
- ✅ n8n workflows (if different from primary)
- ✅ DNS failover scripts (/usr/local/bin/dns-failover-monitor.py)
- ✅ SSL certificates (if using Let's Encrypt)
- ✅ Docker compose configurations
- ✅ Logs for debugging (optional)
NOT Critical (can rebuild):
- node_modules (688MB)
- .next (198MB)
- .git (133MB - can clone from git)
- Python virtual envs
- Docker images (can rebuild)
Space Requirements
Minimum Backup Size (Critical Data Only)
Project files (without node_modules/.next/.git): ~500MB
Database backup: 40MB
n8n data: ~50MB
Logs (optional): ~100MB
-------------------------------------------
Total: ~700MB (compressed: ~200MB)
Recommended New Server Specs
- RAM: 4GB minimum (8GB recommended)
- CPU: 2 cores minimum
- Disk: 50GB minimum (100GB recommended for growth)
- Network: 1Gbps, low latency to primary
- Cost Target: <$10/month (vs Hostinger's premium pricing)
- Alternatives: Hetzner CX22 ($6/mo), Oracle Free Tier, Contabo VPS
Pre-Migration Checklist
1. Verify Primary is Healthy
# From anywhere
curl -s http://95.216.52.28:3001/api/health | jq .
# Check database replication status
ssh root@95.216.52.28 'docker exec trading-bot-postgres psql -U postgres -c "SELECT client_addr, state, sync_state FROM pg_stat_replication;"'
# Should show: 72.62.39.24 | streaming | async
2. Stop Auto-Failover (CRITICAL)
# Stop DNS failover monitor on Hostinger
ssh root@72.62.39.24 'systemctl stop dns-failover'
ssh root@72.62.39.24 'systemctl disable dns-failover'
# Verify stopped
ssh root@72.62.39.24 'systemctl status dns-failover'
# Should show: inactive (dead)
3. Document Current Configuration
# Save current DNS state
dig tradervone.v4.dedyn.io +short
# Should return: 95.216.52.28 (primary)
# Save database replication config
ssh root@72.62.39.24 'docker exec trading-bot-postgres cat /var/lib/postgresql/data/postgresql.auto.conf' > /tmp/secondary-pg-config.txt
# Save container status
ssh root@72.62.39.24 'docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"' > /tmp/secondary-containers.txt
Migration Procedure
Phase 1: Backup Critical Data (30 minutes)
Run this script on Hostinger server:
#!/bin/bash
# Save as: /root/backup-for-migration.sh
BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/tmp/trading-bot-migration-$BACKUP_DATE"
ARCHIVE_NAME="trading-bot-migration-$BACKUP_DATE.tar.gz"
echo "🔄 Starting backup for migration..."
mkdir -p "$BACKUP_DIR"
# 1. Project files (exclude large unnecessary directories)
echo "📦 Backing up project files..."
cd /root/traderv4-secondary
tar czf "$BACKUP_DIR/project-files.tar.gz" \
--exclude='node_modules' \
--exclude='.next' \
--exclude='.git' \
--exclude='*.log' \
--exclude='.backtester' \
--exclude='backtester/data/*.csv' \
--exclude='cluster' \
.
# 2. .env file (CRITICAL - contains wallet keys)
echo "🔐 Backing up environment variables..."
cp /root/traderv4-secondary/.env "$BACKUP_DIR/.env"
# 3. Database backup
echo "💾 Backing up database..."
docker exec trading-bot-postgres pg_dump -U postgres -Fc trading_bot_v4 > "$BACKUP_DIR/trading_bot_v4.dump"
# 4. n8n workflows and data
echo "📝 Backing up n8n data..."
docker run --rm \
--volumes-from n8n \
-v "$BACKUP_DIR":/backup \
alpine tar czf /backup/n8n-data.tar.gz -C /home/node/.n8n .
# 5. DNS failover scripts
echo "🌐 Backing up DNS failover scripts..."
mkdir -p "$BACKUP_DIR/dns-scripts"
cp /usr/local/bin/dns-failover-monitor.py "$BACKUP_DIR/dns-scripts/" 2>/dev/null || echo "dns-failover-monitor.py not found"
cp /usr/local/bin/manual-dns-switch.py "$BACKUP_DIR/dns-scripts/" 2>/dev/null || echo "manual-dns-switch.py not found"
cp /etc/systemd/system/dns-failover.service "$BACKUP_DIR/dns-scripts/" 2>/dev/null || echo "dns-failover.service not found"
# 6. Docker compose files
echo "🐳 Backing up Docker configurations..."
cp /root/traderv4-secondary/docker-compose*.yml "$BACKUP_DIR/"
# 7. SSL certificates (if using Let's Encrypt)
echo "🔒 Backing up SSL certificates..."
if [ -d "/etc/letsencrypt" ]; then
tar czf "$BACKUP_DIR/letsencrypt.tar.gz" -C /etc letsencrypt
fi
# 8. Logs (last 7 days only)
echo "📋 Backing up recent logs..."
journalctl -u dns-failover --since "7 days ago" > "$BACKUP_DIR/dns-failover-journal.log" 2>/dev/null || true
docker logs trading-bot-v4-secondary --tail 10000 > "$BACKUP_DIR/trading-bot.log" 2>/dev/null || true
cp /var/log/dns-failover.log "$BACKUP_DIR/" 2>/dev/null || true
# 9. Create manifest
echo "📄 Creating backup manifest..."
cat > "$BACKUP_DIR/MANIFEST.txt" <<EOF
Backup Date: $BACKUP_DATE
Server: srvfailover01 (72.62.39.24)
Purpose: Migration from Hostinger to new secondary server
Contents:
- project-files.tar.gz: Trading bot source code (no node_modules)
- .env: Environment variables with wallet keys (SENSITIVE)
- trading_bot_v4.dump: PostgreSQL database backup (40MB)
- n8n-data.tar.gz: n8n workflows and settings
- dns-scripts/: DNS failover automation scripts
- docker-compose*.yml: Container orchestration
- letsencrypt.tar.gz: SSL certificates (if present)
- *.log: Recent operational logs
Migration Steps:
1. Transfer this archive to new server
2. Extract and deploy on new server
3. Update IP addresses in scripts (72.62.39.24 → NEW_IP)
4. Update DNS failover on primary to point to NEW_IP
5. Test failover before decommissioning Hostinger
6. Cancel Hostinger subscription
EOF
# 10. Create final archive
echo "📦 Creating final archive..."
cd /tmp
tar czf "$ARCHIVE_NAME" "trading-bot-migration-$BACKUP_DATE"
# Calculate sizes
ARCHIVE_SIZE=$(du -h "$ARCHIVE_NAME" | cut -f1)
DIR_SIZE=$(du -sh "$BACKUP_DIR" | cut -f1)
echo ""
echo "✅ Backup complete!"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Archive: /tmp/$ARCHIVE_NAME"
echo "Size (compressed): $ARCHIVE_SIZE"
echo "Size (uncompressed): $DIR_SIZE"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "Next steps:"
echo "1. Download: scp root@72.62.39.24:/tmp/$ARCHIVE_NAME ."
echo "2. Verify: tar tzf $ARCHIVE_NAME | head -20"
echo "3. Transfer to new server when ready"
echo ""
Phase 2: Transfer to Safe Storage
# From your local machine or primary server
scp root@72.62.39.24:/tmp/trading-bot-migration-*.tar.gz /home/icke/backups/
# Or use rsync for resume capability
rsync -avz --progress root@72.62.39.24:/tmp/trading-bot-migration-*.tar.gz /home/icke/backups/
# Verify integrity
tar tzf trading-bot-migration-*.tar.gz > /dev/null && echo "✅ Archive valid" || echo "❌ Archive corrupted"
Phase 3: Deploy on New Server (when ready)
Will provide detailed deployment script after you provide new server access.
Basic steps:
- Install Docker + Docker Compose
- Extract backup archive
- Update IP addresses (72.62.39.24 → NEW_IP) in all configs
- Setup PostgreSQL streaming replication from primary
- Deploy containers
- Update DNS failover scripts on primary to monitor NEW_IP
- Test failover (stop primary, verify secondary takes over)
- Monitor for 1-2 weeks before canceling Hostinger
Decommissioning Hostinger (ONLY after new server proven)
Pre-Decommission Checklist
- New secondary running for 2+ weeks without issues
- Successful failover test completed
- DNS updates working correctly
- Database replication healthy (0 lag)
- Telegram alerts working from new secondary
- No active trades during decommission window
Safe Decommission
# 1. Stop all containers
ssh root@72.62.39.24 'cd /root/traderv4-secondary && docker compose down'
# 2. Verify primary is NOT using Hostinger as replica
ssh root@95.216.52.28 'docker exec trading-bot-postgres psql -U postgres -c "SELECT client_addr FROM pg_stat_replication;"'
# Should NOT show 72.62.39.24
# 3. Final backup (just in case)
ssh root@72.62.39.24 'docker exec trading-bot-postgres pg_dump -U postgres -Fc trading_bot_v4 > /tmp/final-backup.dump'
scp root@72.62.39.24:/tmp/final-backup.dump /home/icke/backups/hostinger-final-backup.dump
# 4. Cancel Hostinger subscription
# (via Hostinger control panel)
Cost Savings
Current Hostinger Cost (estimate)
- Hostinger VPS Premium: ~$20-40/month
- Annual cost: ~$240-480
Alternative Providers (recommendations)
-
Hetzner CX22 - €5.83/month (~$6.50)
- 2 vCPU, 4GB RAM, 40GB SSD, 20TB traffic
- Located in Germany (good latency to primary)
-
Oracle Cloud Free Tier - FREE
- 1-4 OCPU, 1-24GB RAM, 200GB storage
- Lifetime free (with minimal usage)
-
Contabo VPS S - $6.99/month
- 4 vCores, 8GB RAM, 200GB SSD
- Unlimited traffic
Estimated Savings
- Moving to Hetzner: $13-33/month saved ($156-396/year)
- Moving to Oracle Free: $20-40/month saved ($240-480/year)
Security Considerations
⚠️ CRITICAL: The .env file contains your Drift wallet private key
Secure Transfer Methods:
- Use SCP over SSH (encrypted in transit)
- Encrypt archive before transfer:
gpg -c trading-bot-migration.tar.gz - Delete from Hostinger AFTER confirming new server works
- Never transfer via unencrypted channels (FTP, HTTP, email)
After Migration:
- Rotate any API keys that were on Hostinger (if paranoid)
- Update firewall rules on primary to block old IP (72.62.39.24)
- Monitor for unauthorized access attempts
Rollback Plan
If new server fails:
-
Immediate: Re-enable DNS failover on Hostinger
ssh root@72.62.39.24 'systemctl start dns-failover' -
Restart containers:
ssh root@72.62.39.24 'cd /root/traderv4-secondary && docker compose up -d' -
Verify health:
ssh root@72.62.39.24 'curl -s http://localhost:3001/api/health' -
Keep Hostinger active until new server stable
Timeline
- Today (Dec 21): Create backup, store safely ✅ (THIS SCRIPT)
- When new server ready: Deploy and configure (1-2 hours)
- Week 1: Test new secondary, monitor health checks
- Week 2: Perform failover test (controlled)
- Week 3: If stable, decommission Hostinger
- Week 4: Confirm cost savings in billing
Questions Before Proceeding
- What's the budget for new secondary server? (<$10/mo?)
- Geographic preference? (Europe/US/Asia)
- Managed vs unmanaged? (Docker pre-installed or DIY?)
- Any specific provider requirements/restrictions?
Summary
Safe to proceed: YES Data at risk: NO (all backed up to primary + this backup) Downtime during migration: ZERO (primary stays active) Estimated savings: $156-480/year Time to complete: 2-4 hours setup + 2 weeks validation
Next step: Run backup script above, then provide new server access when ready.