Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
- Config, docs, scripts, and backup manifests - Submodule refs unchanged (m = modified content in submodules) Made-with: Cursor
180 lines
6.8 KiB
Bash
Executable File
180 lines
6.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
set -euo pipefail
|
||
|
||
# Load IP configuration
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||
source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true
|
||
|
||
|
||
# Complete NPMplus migration - runs all steps automatically
|
||
# This script orchestrates the entire migration process
|
||
|
||
set -e
|
||
|
||
PROXMOX_HOST="${PROXMOX_HOST_R630_01}"
|
||
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 ""
|