headscale-tailscale-replace.../Multi-Proxmox-Management-System.md
시골약사 ac620a0e15 VNC WebSocket 연결 문제 - 브라우저 보안 정책으로 인한 미해결 상태
WebSocket 1006 오류로 인해 브라우저에서 VNC 연결 실패
- 서버 환경에서는 연결 가능하나 브라우저 보안 정책으로 차단
- 역방향 프록시 솔루션 문서화 완료
- 추후 nginx 프록시 구현 필요

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-09-12 01:44:47 +09:00

14 KiB

다중 Proxmox 호스트 관리 시스템 기획서

🎯 프로젝트 개요

약국별 독립적인 Proxmox 서버를 중앙에서 통합 관리하는 시스템 구축. Headscale 네트워크를 통해 여러 Proxmox 호스트에 접속하여 VM을 관리하고 VNC 원격 접속을 제공.

📋 현재 상황 분석

기존 구현 현황

  • 단일 Proxmox 서버 (pve7.0bin.in) 연동 완료
  • VNC WebSocket 직접 연결 구현
  • VNC 인증 실패 자동 해결 시스템
  • VM 목록 조회 및 상태 확인
  • VM 시작/정지 기능

확장 요구사항

  • 약국 수: 100개 (예상)
  • Proxmox 호스트: 약국별 1개씩 (총 100대)
  • 네트워크: Headscale VPN으로 연결된 사설 IP (예: 100.64.0.x)
  • 인증: 모든 Proxmox에서 동일한 root@pam 계정 사용

🏗️ 시스템 아키텍처

┌─────────────────────────────────────────┐
│        Central Management Web UI        │
│          (farmq-admin)                  │
└─────────────────┬───────────────────────┘
                  │
        ┌─────────┴─────────┐
        │   Headscale VPN   │
        │     Network       │
        └─────────┬─────────┘
                  │
    ┌─────────────┼─────────────┐
    │             │             │
┌───▼───┐    ┌───▼───┐    ┌───▼───┐
│약국 A │    │약국 B │    │약국 C │
│Proxmox│    │Proxmox│    │Proxmox│
│100.64.│    │100.64.│    │100.64.│
│0.10   │    │0.11   │    │0.12   │
└───┬───┘    └───┬───┘    └───┬───┘
    │            │            │
┌───▼───┐    ┌───▼───┐    ┌───▼───┐
│VM들   │    │VM들   │    │VM들   │
│- 키오스│    │- POS  │    │- 서버 │
│- POS  │    │- 키오스│    │- 백업 │
└───────┘    └───────┘    └───────┘

📊 데이터베이스 설계

1. Proxmox 호스트 관리 테이블

CREATE TABLE proxmox_hosts (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    pharmacy_id INTEGER NOT NULL,
    pharmacy_name VARCHAR(255) NOT NULL,
    host_ip VARCHAR(15) NOT NULL,           -- 100.64.0.x
    host_port INTEGER DEFAULT 443,
    username VARCHAR(50) DEFAULT 'root@pam',
    password VARCHAR(255) NOT NULL,
    status ENUM('online', 'offline', 'maintenance') DEFAULT 'offline',
    last_check TIMESTAMP,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (pharmacy_id) REFERENCES pharmacies(pharmacy_id)
);

2. VM 인벤토리 테이블

CREATE TABLE vm_inventory (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    proxmox_host_id INTEGER NOT NULL,
    vmid INTEGER NOT NULL,
    vm_name VARCHAR(255) NOT NULL,
    vm_type ENUM('kiosk', 'pos', 'server', 'backup', 'other') DEFAULT 'other',
    node_name VARCHAR(100) NOT NULL,
    status ENUM('running', 'stopped', 'suspended') DEFAULT 'stopped',
    cpu_cores INTEGER,
    memory_mb INTEGER,
    disk_gb INTEGER,
    ip_address VARCHAR(15),
    description TEXT,
    last_sync TIMESTAMP,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (proxmox_host_id) REFERENCES proxmox_hosts(id)
);

3. VNC 세션 확장 테이블

CREATE TABLE vnc_sessions_extended (
    session_id VARCHAR(36) PRIMARY KEY,
    proxmox_host_id INTEGER NOT NULL,
    vmid INTEGER NOT NULL,
    vm_name VARCHAR(255) NOT NULL,
    websocket_url TEXT NOT NULL,
    password VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    expires_at TIMESTAMP,
    last_refresh TIMESTAMP,
    FOREIGN KEY (proxmox_host_id) REFERENCES proxmox_hosts(id)
);

🔧 주요 기능 구현 계획

1. Proxmox 호스트 관리

  • 호스트 등록/수정/삭제

    • 약국 정보와 연동하여 Proxmox 호스트 정보 관리
    • IP, 포트, 인증 정보 저장
  • 호스트 상태 모니터링

    • 주기적 헬스체크 (ping, API 연결 확인)
    • 오프라인 호스트 알림 및 상태 표시
  • 보안 관리

    • 패스워드 암호화 저장
    • API 토큰 관리 옵션 제공

2. 통합 VM 관리 대시보드

  • 멀티 호스트 VM 목록

    약국A (100.64.0.10) - 온라인
    ├── VM 101: Kiosk-1 (실행중)
    ├── VM 102: POS-System (정지됨)
    └── VM 103: Backup-Server (실행중)
    
    약국B (100.64.0.11) - 오프라인
    ├── 연결 불가
    
    약국C (100.64.0.12) - 온라인
    ├── VM 201: Main-Server (실행중)
    └── VM 202: Kiosk-Terminal (실행중)
    
  • 통합 검색 및 필터링

    • 약국별, VM 타입별, 상태별 필터링
    • VM 이름 및 IP 주소 검색
    • 상태별 대시보드 (전체 실행중/정지됨 VM 수)
  • 배치 작업

    • 여러 VM 동시 시작/정지
    • 약국별 전체 VM 관리
    • 예약 작업 (특정 시간에 VM 시작/정지)

3. 동적 VNC 접속 시스템

  • 호스트 자동 선택

    def connect_to_vm(pharmacy_id, vmid):
        # 1. pharmacy_id로 Proxmox 호스트 정보 조회
        host_info = get_proxmox_host_by_pharmacy(pharmacy_id)
    
        # 2. 해당 호스트에서 VM 정보 확인
        vm_info = get_vm_info(host_info, vmid)
    
        # 3. VNC 티켓 생성 및 연결
        vnc_ticket = create_vnc_ticket(host_info, vm_info)
        return vnc_ticket
    
  • 다중 세션 관리

    • 서로 다른 Proxmox 호스트의 여러 VM에 동시 VNC 접속
    • 세션별 독립적인 티켓 관리
    • 탭 기반 다중 VNC 창 지원

4. 모니터링 및 알림

  • 리소스 모니터링

    • 모든 Proxmox 호스트의 CPU, 메모리, 스토리지 사용량
    • VM별 리소스 사용 현황
    • 임계치 초과 시 알림
  • 이벤트 로그

    • VM 시작/정지 이력
    • VNC 접속 이력
    • 시스템 오류 및 복구 이력

🛠️ API 설계

Proxmox 호스트 관리 API

GET    /api/proxmox/hosts              # 호스트 목록 조회
POST   /api/proxmox/hosts              # 호스트 등록
PUT    /api/proxmox/hosts/{host_id}    # 호스트 정보 수정
DELETE /api/proxmox/hosts/{host_id}    # 호스트 삭제
GET    /api/proxmox/hosts/{host_id}/health # 호스트 상태 확인

통합 VM 관리 API

GET    /api/vms                        # 모든 호스트의 VM 목록
GET    /api/vms/pharmacy/{pharmacy_id} # 특정 약국의 VM 목록
GET    /api/vms/sync                   # VM 정보 동기화
POST   /api/vms/batch/start            # 여러 VM 일괄 시작
POST   /api/vms/batch/stop             # 여러 VM 일괄 정지

동적 VNC 접속 API

POST   /api/vnc/connect               # 동적 VNC 연결 생성
# Request Body:
{
    "pharmacy_id": 1,
    "vmid": 101,
    "vm_type": "kiosk"
}

GET    /api/vnc/sessions              # 활성 VNC 세션 목록
POST   /api/vnc/refresh/{session_id}  # VNC 티켓 새로고침 (기존)

🎨 UI/UX 설계

1. 대시보드 개선

┌─────────────────────────────────────────────────────────────┐
│ 🏥 PharmQ - 다중 Proxmox 관리 시스템                       │
├─────────────────────────────────────────────────────────────┤
│ 📊 전체 현황                                                │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐             │
│ │호스트수 │ │총VM수   │ │실행중   │ │오프라인 │             │
│ │  100    │ │  450    │ │  380    │ │   15    │             │
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘             │
├─────────────────────────────────────────────────────────────┤
│ 🔍 검색 및 필터                                             │
│ [약국명/IP 검색____] [호스트상태▼] [VM타입▼] [VM상태▼]     │
└─────────────────────────────────────────────────────────────┘

2. 호스트 목록 페이지

┌─────────────────────────────────────────────────────────────┐
│ 🖥️ Proxmox 호스트 관리                    [+ 호스트 추가]    │
├─────────────────────────────────────────────────────────────┤
│ 약국명      │ IP주소        │ 상태   │ VM수 │ 마지막확인      │
├─────────────────────────────────────────────────────────────┤
│ 🟢 약국A    │ 100.64.0.10  │ 온라인 │ 5개  │ 1분전          │
│ 🔴 약국B    │ 100.64.0.11  │ 오프라인│ -   │ 30분전         │
│ 🟢 약국C    │ 100.64.0.12  │ 온라인 │ 3개  │ 2분전          │
└─────────────────────────────────────────────────────────────┘

3. 통합 VM 관리 페이지

┌─────────────────────────────────────────────────────────────┐
│ 🔧 통합 VM 관리                                             │
├─────────────────────────────────────────────────────────────┤
│ 📍 약국A (100.64.0.10) - 온라인                             │
│   ├── 🖥️ VM101: Kiosk-1    [실행중] [VNC] [정지]           │
│   ├── 🖥️ VM102: POS-System [정지됨] [시작] [VNC]           │
│   └── 🖥️ VM103: Backup     [실행중] [VNC] [정지]           │
├─────────────────────────────────────────────────────────────┤
│ 📍 약국C (100.64.0.12) - 온라인                             │
│   ├── 🖥️ VM201: Server     [실행중] [VNC] [정지]           │
│   └── 🖥️ VM202: Kiosk      [실행중] [VNC] [정지]           │
└─────────────────────────────────────────────────────────────┘

🔧 구현 단계

Phase 1: 기반 시스템 확장 (1-2주)

  1. 데이터베이스 스키마 확장

    • 다중 호스트 테이블 생성
    • 기존 데이터 마이그레이션
  2. Proxmox 클라이언트 다중화

    • 호스트별 클라이언트 풀 관리
    • 연결 관리 및 로드밸런싱

Phase 2: 호스트 관리 시스템 (2-3주)

  1. 호스트 등록/관리 기능

    • CRUD API 구현
    • 관리 UI 개발
  2. 상태 모니터링

    • 헬스체크 시스템
    • 알림 기능

Phase 3: 통합 VM 관리 (2-3주)

  1. 다중 호스트 VM 조회

    • 통합 대시보드
    • 검색/필터링 기능
  2. 배치 작업 시스템

    • 일괄 작업 API
    • 스케줄링 기능

Phase 4: 고도화 기능 (2-3주)

  1. 성능 최적화

    • 캐싱 시스템
    • 비동기 처리
  2. 보안 강화

    • 접근 권한 관리
    • 감사 로그

🚨 고려사항

기술적 도전과제

  1. 네트워크 지연

    • Headscale VPN을 통한 다중 호스트 접근 시 지연 가능성
    • 연결 타임아웃 및 재시도 로직 필요
  2. 확장성

    • 100개 호스트 동시 관리 시 리소스 사용량
    • 동시 VNC 세션 수 제한 고려
  3. 장애 처리

    • 개별 호스트 오프라인 시 graceful degradation
    • 부분 장애 상황에서의 서비스 연속성

보안 고려사항

  1. 인증 정보 관리

    • 각 Proxmox 호스트별 패스워드 암호화 저장
    • API 토큰 순환 정책
  2. 네트워크 보안

    • Headscale 네트워크 내부 통신 암호화
    • VNC 세션 보안 강화

📈 성공 지표

기능적 지표

  • 100개 Proxmox 호스트 동시 관리
  • 1000개 이상 VM 통합 관리
  • 동시 VNC 세션 50개 이상 지원
  • 호스트 상태 확인 응답 시간 < 5초

성능 지표

  • 대시보드 로딩 시간 < 3초
  • VM 목록 조회 시간 < 5초
  • VNC 연결 설정 시간 < 10초
  • 시스템 가용성 99.5% 이상

🎯 결론

이 다중 Proxmox 호스트 관리 시스템을 통해 약국별로 분산된 IT 인프라를 중앙에서 효율적으로 관리할 수 있게 됩니다. Headscale 네트워크를 활용한 안전한 연결과 통합 관리 인터페이스를 제공하여 운영 효율성을 크게 향상시킬 수 있을 것입니다.


이 기획서는 현재 단일 Proxmox 호스트 관리 시스템을 다중 호스트 환경으로 확장하기 위한 상세 계획을 담고 있습니다. 단계적 구현을 통해 안정적이고 확장 가능한 시스템을 구축할 수 있을 것입니다.