#!/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"