#!/bin/bash # Sync NPMplus configuration from primary to secondary (API-based) # Note: Full automated sync requires shared database or manual replication set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" if [ -f "$PROJECT_ROOT/.env" ]; then set +euo pipefail source "$PROJECT_ROOT/.env" 2>/dev/null || true set -euo pipefail fi PRIMARY_HOST="${PRIMARY_HOST:-192.168.11.11}" PRIMARY_VMID="${PRIMARY_VMID:-10233}" SECONDARY_HOST="${SECONDARY_HOST:-192.168.11.12}" SECONDARY_VMID="${SECONDARY_VMID:-10234}" NPM_URL="${NPM_URL:-https://192.168.11.166:81}" SECONDARY_URL="${SECONDARY_URL:-https://192.168.11.167:81}" NPM_EMAIL="${NPM_EMAIL:-nsatoshi2007@hotmail.com}" NPM_PASSWORD="${NPM_PASSWORD:-}" # 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 "🔄 NPMplus Configuration Sync" echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" echo "" if [ -z "$NPM_PASSWORD" ]; then log_error "NPM_PASSWORD not set in .env" log_info "Please set NPM_PASSWORD in .env file" exit 1 fi # Authenticate to primary log_info "Authenticating to primary NPMplus..." TOKEN_RESPONSE=$(curl -s -k -X POST "$NPM_URL/api/tokens" \ -H "Content-Type: application/json" \ -d "{\"identity\":\"$NPM_EMAIL\",\"secret\":\"$NPM_PASSWORD\"}" 2>/dev/null || echo "{}") TOKEN=$(echo "$TOKEN_RESPONSE" | jq -r '.token // empty' 2>/dev/null || echo "") if [ -z "$TOKEN" ] || [ "$TOKEN" = "null" ]; then ERROR_MSG=$(echo "$TOKEN_RESPONSE" | jq -r '.error.message // "Unknown error"' 2>/dev/null || echo "$TOKEN_RESPONSE") log_error "Authentication failed: $ERROR_MSG" exit 1 fi log_success "Authenticated to primary NPMplus" # Export from primary log_info "Exporting configuration from primary..." PROXY_HOSTS_JSON=$(curl -s -k -X GET "$NPM_URL/api/nginx/proxy-hosts" \ -H "Authorization: Bearer $TOKEN" 2>/dev/null || echo "[]") PROXY_COUNT=$(echo "$PROXY_HOSTS_JSON" | jq '. | length' 2>/dev/null || echo "0") log_success "Exported $PROXY_COUNT proxy hosts from primary" # Note: Full automated sync would require: # 1. Shared database (PostgreSQL/MariaDB migration from SQLite) # 2. Or complex API-based replication script # 3. Or manual replication via UI log_warn "Full automated configuration sync is not yet implemented" log_info "Current options:" log_info " 1. Use shared database (requires database migration)" log_info " 2. Manual replication via UI when configuration changes" log_info " 3. Use export-primary-config.sh and import-secondary-config.sh for initial setup" log_info "" log_info "Primary URL: $NPM_URL" log_info "Secondary URL: $SECONDARY_URL" log_info "" log_info "To manually sync:" log_info " 1. Make changes on primary NPMplus" log_info " 2. Export configuration: bash scripts/npmplus/export-primary-config.sh" log_info " 3. Import to secondary: bash scripts/npmplus/import-secondary-config.sh "