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
123 lines
4.0 KiB
Bash
Executable File
123 lines
4.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Fully automated HA setup for NPMplus
|
|
# Uses SSH access and .env credentials to complete all setup steps
|
|
|
|
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
|
|
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
|
|
if [ ! -f "$PROJECT_ROOT/.env" ]; then
|
|
echo "ERROR: .env file not found. Please create it from .env.example"
|
|
exit 1
|
|
fi
|
|
|
|
set +euo pipefail
|
|
source "$PROJECT_ROOT/.env" 2>/dev/null || true
|
|
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
|
|
|
|
|
|
PRIMARY_HOST="${PRIMARY_HOST:-192.168.11.11}"
|
|
SECONDARY_HOST="${SECONDARY_HOST:-192.168.11.12}"
|
|
PRIMARY_VMID="${PRIMARY_VMID:-10233}"
|
|
SECONDARY_VMID="${SECONDARY_VMID:-10234}"
|
|
SECONDARY_IP="${SECONDARY_IP:-${IP_NPMPLUS:-192.168.11.167}}"
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
|
|
log_success() { echo -e "${GREEN}[✓]${NC} $1"; }
|
|
log_warn() { echo -e "${YELLOW}[⚠]${NC} $1"; }
|
|
log_error() { echo -e "${RED}[✗]${NC} $1"; }
|
|
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "🚀 Automated NPMplus HA Setup"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
|
|
# Test SSH connectivity
|
|
log_info "Testing SSH connectivity..."
|
|
if ! ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@"$PRIMARY_HOST" "echo 'Connected'" >/dev/null 2>&1; then
|
|
log_error "Cannot connect to primary host ($PRIMARY_HOST)"
|
|
exit 1
|
|
fi
|
|
log_success "Primary host accessible"
|
|
|
|
if ! ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@"$SECONDARY_HOST" "echo 'Connected'" >/dev/null 2>&1; then
|
|
log_error "Cannot connect to secondary host ($SECONDARY_HOST)"
|
|
exit 1
|
|
fi
|
|
log_success "Secondary host accessible"
|
|
echo ""
|
|
|
|
# Phase 1: Create Secondary Container
|
|
log_info "Phase 1: Creating secondary NPMplus container..."
|
|
bash "$SCRIPT_DIR/automate-phase1-create-container.sh" || {
|
|
log_error "Phase 1 failed"
|
|
exit 1
|
|
}
|
|
log_success "Phase 1 complete"
|
|
echo ""
|
|
|
|
# Phase 2: Set up Certificate Sync
|
|
log_info "Phase 2: Setting up certificate synchronization..."
|
|
bash "$SCRIPT_DIR/automate-phase2-cert-sync.sh" || {
|
|
log_error "Phase 2 failed"
|
|
exit 1
|
|
}
|
|
log_success "Phase 2 complete"
|
|
echo ""
|
|
|
|
# Phase 3: Set up Keepalived
|
|
log_info "Phase 3: Setting up Keepalived..."
|
|
bash "$SCRIPT_DIR/automate-phase3-keepalived.sh" || {
|
|
log_error "Phase 3 failed"
|
|
exit 1
|
|
}
|
|
log_success "Phase 3 complete"
|
|
echo ""
|
|
|
|
# Phase 4: Sync Configuration
|
|
log_info "Phase 4: Syncing configuration to secondary..."
|
|
bash "$SCRIPT_DIR/automate-phase4-sync-config.sh" || {
|
|
log_error "Phase 4 failed"
|
|
exit 1
|
|
}
|
|
log_success "Phase 4 complete"
|
|
echo ""
|
|
|
|
# Phase 5: Set up Monitoring
|
|
log_info "Phase 5: Setting up monitoring..."
|
|
bash "$SCRIPT_DIR/automate-phase5-monitoring.sh" || {
|
|
log_error "Phase 5 failed"
|
|
exit 1
|
|
}
|
|
log_success "Phase 5 complete"
|
|
echo ""
|
|
|
|
log_success "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
log_success "✅ HA Setup Complete!"
|
|
log_success "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
log_info "Next steps:"
|
|
log_info " 1. Test failover: bash scripts/npmplus/test-failover.sh"
|
|
log_info " 2. Verify all domains: bash scripts/verify/verify-end-to-end-routing.sh"
|
|
log_info " 3. Monitor HA status: bash scripts/npmplus/monitor-ha-status.sh"
|