Files
pipeline/docs/FLEET_COMPLETE.md
T
chpark 4c1dc4082e
Build and Push Images / build-and-push (push) Has been cancelled
feat: Fleet/Collector/엣지 배포 관련 누적 작업 일괄 커밋
이전 세션들에서 작업된 아래 범위를 모두 포함:

Fleet 서브시스템 (src/fleet/)
- fleetDeviceService / fleetCommandService / fleetDeploymentService / fleetReleaseService
- fleetMetricsService, fleetScriptService, fleetEdgeConfigService
- Edge 디바이스 관리, 커맨드 발행, 배포/릴리스, 스크립트 동기화

Collector 확장
- centralMqttForwarder / centralForwarderConfigService
- equipmentStateService, pythonHookRunner, scriptCache
- Modbus/OPC-UA/S7/XGT 프로토콜 클라이언트
- targetDbIntrospection (저장 DB 조회)

Routes / API
- automationDashboardRoutes, centralForwarderRoutes, equipmentStateRoutes

DB
- importEdgeConfig (Python cached config → Pipeline DB)
- seedDataSources (external_db_connections 초기 시드)

엣지 배포 리소스
- docker/edge/Dockerfile.backend.prod, Dockerfile.frontend.prod
- docker/edge/docker-compose.edge.yml

프론트엔드
- admin/automaticMng (centralForwarder, dashboard, equipmentState)
- admin/fleet (commands, devices, deployments, releases, scripts, alerts)
- admin/pipeline-device 개선 (저장 DB 드롭다운, 태그 매핑 등)
- ExternalDbConnectionModal, ScriptsManagerDialog 등 신규 컴포넌트
- lib/api: automationDashboard, centralForwarder, equipmentState, fleet

docs/
- EDGE_SERVER_STRUCTURE, FLEET_COMPLETE, FLEET_EDGE_INTEGRATION, FLEET_HOOK_INTEGRATION

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 20:00:06 +09:00

7.0 KiB

Fleet Management - 전체 통합 문서

vexplor_fleet의 모든 기능이 Pipeline으로 통합되었습니다.

구조

Pipeline (단일 배포)
├─ 백엔드 (Node.js/Express)
│   ├─ Fleet API (/api/fleet/*)
│   ├─ 내장 MQTT 브로커 (aedes, port 1883)
│   ├─ 서비스 레이어
│   │   ├─ fleetDeviceService        - 디바이스 등록/관리
│   │   ├─ fleetCommandService       - 커맨드 실행 (9종)
│   │   ├─ fleetReleaseService       - 릴리즈 관리
│   │   ├─ fleetDeploymentService    - 배포 오케스트레이션 (카나리/롤링)
│   │   ├─ fleetHarborService        - Harbor Registry 조회
│   │   ├─ fleetTagTemplateService   - 태그 템플릿 + 일괄 적용
│   │   ├─ fleetAlertRuleService     - 알림 규칙 CRUD
│   │   ├─ fleetProvisionService     - DPS 프로비저닝
│   │   ├─ fleetV1MappingService     - 레거시 PLC 매핑
│   │   ├─ fleetPlcStatusService     - PLC 연결 실시간 상태
│   │   ├─ fleetAuditService         - 감사 로그
│   │   ├─ fleetMetricsService       - Prometheus 메트릭
│   │   ├─ fleetScriptService        - Python Hook 스크립트
│   │   ├─ fleetEdgeConfigService    - 엣지 설정 제공
│   │   └─ fleetDataService          - 실시간 수집 데이터
│   └─ MQTT 핸들러
│       ├─ vexplor/devices/+/status     → 디바이스 heartbeat
│       ├─ vexplor/devices/+/metrics    → 메트릭
│       ├─ vexplor/devices/+/responses  → 커맨드 응답
│       ├─ vexplor/devices/+/data       → 태그 데이터
│       └─ vexplor/devices/+/plc-status → PLC 연결 상태
│
└─ 프론트엔드 (Next.js, 시스템 관리 메뉴)
    ├─ 엣지 디바이스     (/admin/fleet/devices)
    ├─ Fleet 커맨드     (/admin/fleet/commands)
    ├─ Fleet 알림       (/admin/fleet/alerts)
    ├─ 실시간 수집      (/admin/fleet/data)
    ├─ Python Hook     (/admin/fleet/scripts)
    ├─ 배포 관리        (/admin/fleet/deployments)
    ├─ 릴리즈 관리      (/admin/fleet/releases)
    ├─ 알림 규칙        (/admin/fleet/rules)
    └─ 감사 로그        (/admin/fleet/audit)

DB 스키마 (총 18개 Fleet 테이블)

테이블 용도
fleet_devices 엣지 디바이스 레지스트리
fleet_heartbeats 디바이스 상태 시계열 (30초마다)
fleet_commands / command_types 9종 원격 커맨드
fleet_releases 릴리즈 버전 관리
fleet_deployments / deployment_status 배포 작업 + 디바이스별 상태
fleet_alert_rules / alerts 알림 규칙 + 발생 기록
fleet_edge_raw_data 실시간 수집 데이터 (시계열)
fleet_edge_scripts / script_versions / hook_types Python Hook (5종, 버전 관리)
fleet_plc_connections PLC 연결 실시간 상태
fleet_tag_templates 회사/장비별 태그 템플릿
fleet_audit_logs 전체 이벤트 감사
fleet_users Fleet 운영자 (SSO)
fleet_v1_plc_mapping 레거시 v1 PLC 태그 매핑

API 엔드포인트 (60+)

공개 (인증 없음)

POST /api/fleet/provision              - DPS 자동 등록
GET  /api/fleet/edge/:id/config        - 엣지 설정 (ETag 캐싱)
GET  /api/fleet/v1/edges/:id/config    - 호환 alias

디바이스 (12개)

GET    /api/fleet/devices
POST   /api/fleet/devices/register
GET    /api/fleet/devices/:id
PATCH  /api/fleet/devices/:id
DELETE /api/fleet/devices/:id
GET    /api/fleet/devices/:id/metrics
GET    /api/fleet/devices/:id/latest-values
GET    /api/fleet/devices/:id/tags/:tag/timeseries
GET    /api/fleet/data/stats
GET    /api/fleet/provision/pre-registered
POST   /api/fleet/provision/pre-register
GET    /api/fleet/stats

커맨드 (4개)

GET  /api/fleet/commands
GET  /api/fleet/commands/types
POST /api/fleet/commands

Python Hook (10개)

GET    /api/fleet/scripts/hook-types
GET    /api/fleet/scripts
GET    /api/fleet/scripts/:id
POST   /api/fleet/scripts
PUT    /api/fleet/scripts/:id
DELETE /api/fleet/scripts/:id
POST   /api/fleet/scripts/dry-run
GET    /api/fleet/scripts/:id/versions
GET    /api/fleet/scripts/:id/versions/:v
POST   /api/fleet/scripts/:id/rollback/:v

릴리즈 (6개)

GET    /api/fleet/releases
GET    /api/fleet/releases/:id
POST   /api/fleet/releases
PUT    /api/fleet/releases/:id
DELETE /api/fleet/releases/:id
POST   /api/fleet/releases/:id/transition

배포 (8개)

GET  /api/fleet/deployments
GET  /api/fleet/deployments/:id
GET  /api/fleet/deployments/:id/status
POST /api/fleet/deployments
POST /api/fleet/deployments/:id/start
POST /api/fleet/deployments/:id/cancel
POST /api/fleet/deployments/:id/rollback

Harbor (4개)

GET /api/fleet/harbor/projects
GET /api/fleet/harbor/projects/:project/repos
GET /api/fleet/harbor/projects/:project/repos/:repo/tags
GET /api/fleet/harbor/ping

태그 템플릿 (6개)

GET    /api/fleet/tag-templates
GET    /api/fleet/tag-templates/:id
POST   /api/fleet/tag-templates
PUT    /api/fleet/tag-templates/:id
DELETE /api/fleet/tag-templates/:id
POST   /api/fleet/tag-templates/:id/apply/:connectionId

알림 (7개)

GET    /api/fleet/alerts
POST   /api/fleet/alerts/:id/ack
POST   /api/fleet/alerts/:id/resolve
GET    /api/fleet/alert-rules
POST   /api/fleet/alert-rules
PUT    /api/fleet/alert-rules/:id
DELETE /api/fleet/alert-rules/:id
POST   /api/fleet/alert-rules/:id/toggle

V1 PLC 매핑 (4개)

GET    /api/fleet/v1-mappings
POST   /api/fleet/v1-mappings
PUT    /api/fleet/v1-mappings/:id
DELETE /api/fleet/v1-mappings/:id

PLC 상태, Audit, Metrics

GET /api/fleet/plc-status
GET /api/fleet/plc-status/summary
GET /api/fleet/audit-logs
GET /api/fleet/audit-logs/stats
GET /api/fleet/prometheus      - Prometheus text format

Device Supervisor 포팅 (엣지 에이전트)

Python Data Collector는 그대로 유지하고, 추가로 Node.js Device Supervisor를 엣지에서 돌릴 때는 기존 vexplor_fleet/device-supervisor/src/ 코드를 그대로 사용합니다. Pipeline 중앙이 MQTT 브로커 역할을 하므로 변경할 건 환경변수만:

# device-supervisor .env
FLEET_API_URL=http://pipeline.wace.me:8080/api/fleet
MQTT_BROKER_URL=mqtt://pipeline.wace.me:1883
DEVICE_ID=edge-001
COMPANY_CODE=spifox
HEARTBEAT_INTERVAL=30

환경변수

이름 기본값 설명
MQTT_PORT 1883 내장 MQTT TCP
MQTT_WS_PORT 8083 MQTT WebSocket
HARBOR_URL https://harbor.wace.me Harbor Registry
HARBOR_USER - Harbor 사용자
HARBOR_PASSWORD - Harbor 비밀번호
FLEET_API_URL http://localhost:8080/api/fleet Provisioning 응답용
FLEET_MQTT_BROKER mqtt://localhost:1883 Provisioning 응답용

다음 단계 (선택)

  • Grafana 임베드 (Metrics 탭)
  • 프로비저닝 토큰 JWT 전환
  • 배포 롤아웃 진행률 실시간 WebSocket
  • Python 실행 RestrictedPython 적용 (보안 강화)