174 lines
6.6 KiB
Bash
174 lines
6.6 KiB
Bash
|
|
#!/bin/bash
|
|||
|
|
set -euo pipefail
|
|||
|
|
|
|||
|
|
# Complete NPMplus migration - runs all steps automatically
|
|||
|
|
# This script orchestrates the entire migration process
|
|||
|
|
|
|||
|
|
set -e
|
|||
|
|
|
|||
|
|
PROXMOX_HOST="192.168.11.11"
|
|||
|
|
TZ="America/New_York"
|
|||
|
|
ACME_EMAIL="nsatoshi2007@hotmail.com"
|
|||
|
|
|
|||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|||
|
|
echo "🔄 Complete NPMplus Migration"
|
|||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# Step 1: Backup current NPM
|
|||
|
|
echo "📦 Step 1: Backing up current NPM..."
|
|||
|
|
BACKUP_DIR="/tmp/npm-migration-$(date +%Y%m%d_%H%M%S)"
|
|||
|
|
mkdir -p "$BACKUP_DIR"
|
|||
|
|
|
|||
|
|
echo " 📋 Exporting current configurations..."
|
|||
|
|
ssh root@"$PROXMOX_HOST" "pct exec 105 -- bash -c '
|
|||
|
|
cd /app
|
|||
|
|
if [ -f /data/database.sqlite ]; then
|
|||
|
|
sqlite3 /data/database.sqlite \".dump\" > /tmp/npm-database.sql 2>/dev/null || echo \"Database export may have issues\"
|
|||
|
|
fi
|
|||
|
|
'" > "$BACKUP_DIR/backup.log" 2>&1 || echo " ⚠️ Backup may have issues, continuing..."
|
|||
|
|
|
|||
|
|
ssh root@"$PROXMOX_HOST" "pct exec 105 -- cat /tmp/npm-database.sql" > "$BACKUP_DIR/database.sql" 2>&1 || echo "" > "$BACKUP_DIR/database.sql"
|
|||
|
|
|
|||
|
|
echo " ✅ Backup saved to: $BACKUP_DIR"
|
|||
|
|
echo ""
|
|||
|
|
|
|||
|
|
# Step 2: Check if NPMplus is already installed
|
|||
|
|
echo "📦 Step 2: Checking for existing NPMplus installation..."
|
|||
|
|
EXISTING_CT=$(ssh root@"$PROXMOX_HOST" "pct list | grep -i npmplus | awk '{print \$1}' | head -1" || echo "")
|
|||
|
|
|
|||
|
|
if [ -n "$EXISTING_CT" ]; then
|
|||
|
|
echo " ℹ️ Found existing NPMplus container: $EXISTING_CT"
|
|||
|
|
read -p " Use existing container? (y/n): " -n 1 -r
|
|||
|
|
echo
|
|||
|
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|||
|
|
NEW_CONTAINER_ID="$EXISTING_CT"
|
|||
|
|
echo " ✅ Using existing container: $NEW_CONTAINER_ID"
|
|||
|
|
else
|
|||
|
|
NEW_CONTAINER_ID=""
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
NEW_CONTAINER_ID=""
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Step 3: Install NPMplus if needed
|
|||
|
|
if [ -z "$NEW_CONTAINER_ID" ]; then
|
|||
|
|
echo "📦 Step 3: Installing NPMplus..."
|
|||
|
|
echo " ⚠️ The Proxmox helper script requires interactive input."
|
|||
|
|
echo " 📋 Please run this command on the Proxmox host:"
|
|||
|
|
echo ""
|
|||
|
|
echo " ssh root@$PROXMOX_HOST"
|
|||
|
|
echo " bash -c \"\$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/npmplus.sh)\""
|
|||
|
|
echo ""
|
|||
|
|
echo " When prompted:"
|
|||
|
|
echo " - Timezone: $TZ"
|
|||
|
|
echo " - ACME Email: $ACME_EMAIL"
|
|||
|
|
echo ""
|
|||
|
|
read -p " Press Enter after NPMplus is installed and you have the container ID..."
|
|||
|
|
|
|||
|
|
read -p " Enter the new NPMplus container ID (VMID): " NEW_CONTAINER_ID
|
|||
|
|
if [ -z "$NEW_CONTAINER_ID" ]; then
|
|||
|
|
echo " ❌ Container ID is required"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
else
|
|||
|
|
echo "📦 Step 3: Using existing NPMplus container"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Step 4: Get container information
|
|||
|
|
echo ""
|
|||
|
|
echo "📦 Step 4: Getting container information..."
|
|||
|
|
CONTAINER_IP=$(ssh root@"$PROXMOX_HOST" "pct exec $NEW_CONTAINER_ID -- hostname -I | awk '{print \$1}'" || echo "")
|
|||
|
|
if [ -z "$CONTAINER_IP" ]; then
|
|||
|
|
echo " ❌ Could not get container IP. Is the container running?"
|
|||
|
|
exit 1
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo " ✅ Container IP: $CONTAINER_IP"
|
|||
|
|
|
|||
|
|
# Get admin password
|
|||
|
|
ADMIN_PASSWORD=$(ssh root@"$PROXMOX_HOST" "pct exec $NEW_CONTAINER_ID -- bash -c '
|
|||
|
|
if [ -f /opt/.npm_pwd ]; then
|
|||
|
|
grep -i password /opt/.npm_pwd | cut -d: -f2 | tr -d \" \"
|
|||
|
|
else
|
|||
|
|
docker logs npmplus 2>/dev/null | grep -i \"Creating a new user\" | tail -1 | grep -oP \"password: \K[^\s]+\" || echo \"\"
|
|||
|
|
fi
|
|||
|
|
'" || echo "")
|
|||
|
|
|
|||
|
|
if [ -z "$ADMIN_PASSWORD" ]; then
|
|||
|
|
echo " ⚠️ Could not retrieve password automatically"
|
|||
|
|
read -sp " Enter NPMplus admin password: " ADMIN_PASSWORD
|
|||
|
|
echo ""
|
|||
|
|
else
|
|||
|
|
echo " ✅ Admin password retrieved"
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
# Wait for NPMplus to be ready
|
|||
|
|
echo ""
|
|||
|
|
echo " ⏳ Waiting for NPMplus to be ready..."
|
|||
|
|
for i in {1..30}; do
|
|||
|
|
if ssh root@"$PROXMOX_HOST" "pct exec $NEW_CONTAINER_ID -- docker ps --filter 'name=npmplus' --format '{{.Status}}' 2>/dev/null" | grep -q "Up"; then
|
|||
|
|
echo " ✅ NPMplus is running"
|
|||
|
|
break
|
|||
|
|
fi
|
|||
|
|
echo " ⏳ Waiting... ($i/30)"
|
|||
|
|
sleep 2
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
# Step 5: Migrate configurations
|
|||
|
|
echo ""
|
|||
|
|
echo "📦 Step 5: Migrating configurations..."
|
|||
|
|
bash scripts/nginx-proxy-manager/migrate-configs-to-npmplus.sh \
|
|||
|
|
"$PROXMOX_HOST" \
|
|||
|
|
"$NEW_CONTAINER_ID" \
|
|||
|
|
"https://$CONTAINER_IP:81" <<< "$ADMIN_PASSWORD" || {
|
|||
|
|
echo " ⚠️ Migration script had issues. Check output above."
|
|||
|
|
echo " 💡 You can run it manually:"
|
|||
|
|
echo " bash scripts/nginx-proxy-manager/migrate-configs-to-npmplus.sh $PROXMOX_HOST $NEW_CONTAINER_ID https://$CONTAINER_IP:81"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
# Step 6: Update network configuration info
|
|||
|
|
echo ""
|
|||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|||
|
|
echo "📋 Step 6: Network Configuration Update Required"
|
|||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|||
|
|
echo ""
|
|||
|
|
echo "⚠️ Manual Step Required: Update UDM Pro Port Forwarding"
|
|||
|
|
echo ""
|
|||
|
|
echo "1. Log into UDM Pro"
|
|||
|
|
echo "2. Go to: Settings → Networks → Port Forwarding"
|
|||
|
|
echo "3. Update both rules:"
|
|||
|
|
echo " • HTTP (Port 80): 76.53.10.36:80 → $CONTAINER_IP:80"
|
|||
|
|
echo " • HTTPS (Port 443): 76.53.10.36:443 → $CONTAINER_IP:443"
|
|||
|
|
echo ""
|
|||
|
|
read -p "Press Enter after updating port forwarding..."
|
|||
|
|
|
|||
|
|
# Step 7: Test migration
|
|||
|
|
echo ""
|
|||
|
|
echo "📦 Step 7: Testing migration..."
|
|||
|
|
echo " ⏳ Waiting 30 seconds for SSL certificates to process..."
|
|||
|
|
sleep 30
|
|||
|
|
|
|||
|
|
echo " 🔍 Testing SSL certificates..."
|
|||
|
|
bash scripts/check-east-west-ssl-status.sh || echo " ⚠️ Some tests may have failed. Check manually."
|
|||
|
|
|
|||
|
|
echo ""
|
|||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|||
|
|
echo "✅ Migration Complete!"
|
|||
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|||
|
|
echo ""
|
|||
|
|
echo "📋 Summary:"
|
|||
|
|
echo " • Old NPM Container: 105"
|
|||
|
|
echo " • New NPMplus Container: $NEW_CONTAINER_ID"
|
|||
|
|
echo " • NPMplus IP: $CONTAINER_IP"
|
|||
|
|
echo " • Access URL: https://$CONTAINER_IP:81"
|
|||
|
|
echo " • Admin Email: admin@example.org"
|
|||
|
|
echo " • Backup Location: $BACKUP_DIR"
|
|||
|
|
echo ""
|
|||
|
|
echo "🔍 Next Steps:"
|
|||
|
|
echo " 1. Verify all domains are accessible"
|
|||
|
|
echo " 2. Test SSL certificates: bash scripts/check-east-west-ssl-status.sh"
|
|||
|
|
echo " 3. Monitor for 24-48 hours"
|
|||
|
|
echo " 4. (Optional) Stop old NPM container after verification"
|
|||
|
|
echo ""
|