Files
trading_bot_v4/ha-setup/MIGRATION_FROM_HOSTINGER.md
mindesbunister ba1fe4433e feat: Indicator score bypass - v11.2 sends SCORE:100 to bypass bot quality scoring
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)
2025-12-26 11:40:12 +01:00

375 lines
12 KiB
Markdown

# 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:**
1. ✅ Trading bot code + configuration (synced daily from primary)
2. ✅ Database (replicated from primary - can restore from primary)
3. ✅ .env file with wallet keys (MUST backup securely)
4. ✅ n8n workflows (if different from primary)
5. ✅ DNS failover scripts (/usr/local/bin/dns-failover-monitor.py)
6. ✅ SSL certificates (if using Let's Encrypt)
7. ✅ Docker compose configurations
8. ✅ 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
```bash
# 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)
```bash
# 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
```bash
# 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:**
```bash
#!/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
```bash
# 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:
1. Install Docker + Docker Compose
2. Extract backup archive
3. Update IP addresses (72.62.39.24 → NEW_IP) in all configs
4. Setup PostgreSQL streaming replication from primary
5. Deploy containers
6. Update DNS failover scripts on primary to monitor NEW_IP
7. Test failover (stop primary, verify secondary takes over)
8. 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
```bash
# 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)
1. **Hetzner CX22** - €5.83/month (~$6.50)
- 2 vCPU, 4GB RAM, 40GB SSD, 20TB traffic
- Located in Germany (good latency to primary)
2. **Oracle Cloud Free Tier** - FREE
- 1-4 OCPU, 1-24GB RAM, 200GB storage
- Lifetime free (with minimal usage)
3. **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:**
1. Use SCP over SSH (encrypted in transit)
2. Encrypt archive before transfer: `gpg -c trading-bot-migration.tar.gz`
3. Delete from Hostinger AFTER confirming new server works
4. Never transfer via unencrypted channels (FTP, HTTP, email)
**After Migration:**
1. Rotate any API keys that were on Hostinger (if paranoid)
2. Update firewall rules on primary to block old IP (72.62.39.24)
3. Monitor for unauthorized access attempts
---
## Rollback Plan
If new server fails:
1. **Immediate:** Re-enable DNS failover on Hostinger
```bash
ssh root@72.62.39.24 'systemctl start dns-failover'
```
2. **Restart containers:**
```bash
ssh root@72.62.39.24 'cd /root/traderv4-secondary && docker compose up -d'
```
3. **Verify health:**
```bash
ssh root@72.62.39.24 'curl -s http://localhost:3001/api/health'
```
4. **Keep Hostinger active** until new server stable
---
## Timeline
1. **Today (Dec 21):** Create backup, store safely ✅ (THIS SCRIPT)
2. **When new server ready:** Deploy and configure (1-2 hours)
3. **Week 1:** Test new secondary, monitor health checks
4. **Week 2:** Perform failover test (controlled)
5. **Week 3:** If stable, decommission Hostinger
6. **Week 4:** Confirm cost savings in billing
---
## Questions Before Proceeding
1. What's the budget for new secondary server? (<$10/mo?)
2. Geographic preference? (Europe/US/Asia)
3. Managed vs unmanaged? (Docker pre-installed or DIY?)
4. 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.