EU AI Act Article 50 β€” 20 days to seal | Get passport
πŸ‰

Deployment Runbook

DEFONEOS β€” 90-day deployment on MOD Cloud or on-premise β€” v1.0

90 DAYS DOCKER

πŸ“‹ Prerequisites

RequirementSpecificationStatus
Cloud AccountMOD Cloud, AWS London, Azure UK South, or GCP London☐ Provision
Compute (Minimum)4 VMs: 8 vCPU, 32GB RAM each + 1 GPU (T4/A10G) for YOLOv8☐ Provision
Storage500GB SSD per VM + 2TB object storage for ISR data☐ Provision
NetworkVPC with public subnet (API) + private subnet (data) + NAT gateway☐ Configure
DNSdefoneos.your-domain (A record β†’ load balancer)☐ Configure
TLS CertificateLet's Encrypt or MOD PKI certificate☐ Provision
Cyber EssentialsValid certificate (required for MOD deployment)HUMAN GATE
SC ClearanceFor at least 1 team member (for classified work)HUMAN GATE

πŸ—οΈ Architecture β€” What We're Deploying

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ LOAD BALANCER (443) β”‚ β”‚ (NGINX / AWS ALB / Azure App GW) β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ API GW β”‚ Cesium COP β”‚ SIGIL Chain β”‚ Admin β”‚ β”‚ :8080 β”‚ :3000 β”‚ :9091 β”‚ :4000 β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”Œβ”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ ISR β”‚ β”‚ β”‚ Fusion β”‚ β”‚ β”‚ SIGIL β”‚ β”‚ β”‚ Auth β”‚ β”‚ β”‚ β”‚ Engine β”‚ β”‚ β”‚ Engine β”‚ β”‚ β”‚ Ledger β”‚ β”‚ β”‚ OIDC β”‚ β”‚ β”‚ β”‚ :9090 β”‚ β”‚ β”‚ :3001 β”‚ β”‚ β”‚ :9091 β”‚ β”‚ β”‚:4000 β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β””β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β” β”‚ β”Œβ”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β” β”‚ β”‚ β”‚ 30 MCP β”‚ β”‚ β”‚ C2 FTS β”‚ β”‚ BFT β”‚ β”‚ β”‚ β”‚ Serversβ”‚ β”‚ β”‚ :8087 β”‚ β”‚ Council β”‚ β”‚ β”‚ β”‚ :5001- β”‚ β”‚ β”‚ β”‚ β”‚ :9092 β”‚ β”‚ β”‚ β”‚ :5030 β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ GPU NODE β”‚ β”‚ β”‚ β”‚ Swarm β”‚ β”‚ β”‚ YOLOv8 :8500 β”‚ β”‚ β”‚ β”‚ Engine β”‚ β”‚ β”‚ (T4 / A10G) β”‚ β”‚ β”‚ β”‚ :3002 β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚ POSTGRESQL (SIGIL + Missions) β”‚ β”‚ REDIS (Cache + Pub/Sub) β”‚ β”‚ MINIO / S3 (ISR Data Lake) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸš€ Phase 1: Infrastructure (Days 1-14)

1

Provision Cloud Resources

Create 4 VMs + 1 GPU instance via Terraform.

# Clone DEFONEOS infra repo git clone https://github.com/csoai-org/defoneos-infra.git cd defoneos-infra/terraform # Configure variables cp terraform.tfvars.example terraform.tfvars # Edit terraform.tfvars: set cloud_provider, region, domain, certs # Deploy terraform init terraform plan -out defoneos.plan terraform apply defoneos.plan # Output: 4 VM IPs + GPU IP + LB DNS
2

Configure Network Security

Set up VPC, security groups, mTLS certificates.

# Generate SPIFFE certificates for each service ./scripts/gen-spiffe-certs.sh # Configure firewall rules # Allow: 443 (LB), 8080-8090 (internal API), 9090-9092 (gRPC) # Deny: All external except 443 # Internal: mTLS only (SPIFFE verified) # Verify ./scripts/verify-network.sh
3

Deploy Database Layer

PostgreSQL for SIGIL chain + mission data. Redis for cache. MinIO for ISR data lake.

# Deploy via Docker Compose (Phase 1) cd defoneos-infra/docker docker compose -f docker-compose.db.yml up -d # Verify docker compose -f docker-compose.db.yml ps # Expected: postgres (healthy), redis (healthy), minio (healthy) # Initialize SIGIL chain ./scripts/init-sigil-chain.sh # Output: SIGIL genesis entry created. Chain ID: defoneos-001

πŸ”§ Phase 2: Core Services (Days 15-45)

4

Deploy API Gateway + Auth

cd defoneos-infra/docker # Configure OAuth2 / OIDC export OIDC_ISSUER=https://auth.your-domain export OIDC_CLIENT_ID=defoneos-api export OIDC_CLIENT_SECRET= # Deploy API gateway docker compose -f docker-compose.api.yml up -d # Verify curl -k https://localhost/api/v1/health # Expected: {"status":"healthy","version":"1.0","sigil_chain":"valid"}
5

Deploy 30 MCP Sensor Servers

# Deploy all 30 MCPs via federation script ./scripts/deploy-mcp-fleet.sh # Output: # [1/30] sentinel-hub-mcp..... βœ“ deployed on :5001 # [2/30] os-opendata-mcp...... βœ“ deployed on :5002 # [3/30] data-gov-uk-mcp...... βœ“ deployed on :5003 # ... # [30/30] mqtt-bridge-mcp..... βœ“ deployed on :5030 # All 30 MCPs online. Federation healthy. # Verify each MCP ./scripts/verify-mcp-fleet.sh # Expected: 30/30 ONLINE, 0/30 OFFLINE
6

Deploy Fusion Engine + Cesium COP

# Deploy fusion engine docker compose -f docker-compose.fusion.yml up -d # Deploy Cesium 3D globe frontend docker compose -f docker-compose.cesium.yml up -d # Verify fusion curl -k https://localhost/api/v1/isr/fusion/cop?bbox=53.8,-1.5,53.9,-1.4 # Expected: JSON with satellite, maritime, air_quality, osint, iot layers # Open COP in browser echo "COP available at: https://cop.your-domain"
7

Deploy C2 Backbone (FreeTAKServer)

# Deploy FreeTAKServer docker compose -f docker-compose.c2.yml up -d # Configure CoT endpoints ./scripts/configure-c2.sh # Verify C2 curl -k https://localhost/api/v1/c2/cot # Expected: {"events":[],"status":"online","protocol":"CoT v1.0"}
8

Deploy BFT Council + SIGIL

# Deploy 33 BFT agents ./scripts/deploy-bft-council.sh # Output: # [1/33] Agent council-001....... βœ“ online # [2/33] Agent council-002....... βœ“ online # ... # [33/33] Agent council-033...... βœ“ online # Quorum: 23/33. Council ready. # Verify BFT curl -k https://localhost/api/v1/govern/bft/status # Expected: {"agents_online":33,"quorum":23,"pending_votes":0}

πŸ€– Phase 3: AI/ML Layer (Days 46-70)

9

Deploy YOLOv8 ISR Pipeline

# Deploy on GPU node cd defoneos-infra/docker docker compose -f docker-compose.gpu.yml up -d # Load DEFONEOS-trained YOLOv8 model docker exec defoneos-gpu python3 -c " from ultralytics import YOLO model = YOLO('models/yolov8-defoneos-v3.pt') print(f'Model loaded: {model.info()}') print(f'Classes: vehicle, person, structure, vessel, aircraft, animal') " # Verify inference curl -k -X POST -F "image=@test_recon.jpg" \ https://localhost/api/v1/isr/anomaly/detect # Expected: {"detections":[...],"inference_ms":132}
10

Deploy Swarm Engine (Mava + PX4)

# Deploy PX4 SITL (simulation) first docker compose -f docker-compose.swarm-sim.yml up -d # Load Mava RL-trained policy docker exec defoneos-swarm python3 -c " from mava import SwarmPolicy policy = SwarmPolicy.load('models/swarm-isr-v3.xml') print(f'Policy loaded. Drones: {policy.num_drones}') print(f'Scenario: {policy.scenario}') " # Verify simulation curl -k -X POST -d '{"mission_type":"isr_recon","num_drones":4}' \ https://localhost/api/v1/swarm/launch # Expected: {"mission_id":"msn-test-001","status":"bft_pending"}
11

Deploy JSP 936 Compliance Generator

# Deploy compliance service docker compose -f docker-compose.compliance.yml up -d # Generate first compliance report curl -k -X POST -d '{"model_id":"yolov8-defoneos-v3"}' \ https://localhost/api/v1/govern/jsp936/report/generate # Expected: {"report_id":"jsp936-001","model":"yolov8-defoneos-v3", # "status":"compliant","frameworks":["jsp936","uk_ai_bill","eu_ai_act","iso42001"]}

βœ… Phase 4: Integration Testing & Demo (Days 71-90)

12

End-to-End System Test

# Run full E2E test suite ./scripts/e2e-test.sh # Expected output: # [PASS] MCP Federation: 30/30 servers responding # [PASS] ISR Fusion: COP generation < 5 sec # [PASS] YOLOv8: Detection latency < 150 ms # [PASS] Swarm: 4-drone sim launch + RTL # [PASS] C2: CoT publish/receive # [PASS] BFT Council: Quorum reached in < 10 sec # [PASS] SIGIL Chain: Integrity verified (15432 entries) # [PASS] JSP 936: Report generated for all deployed models # [PASS] Auth: OAuth2 token issuance + validation # [PASS] Rate Limits: Throttling active # Result: 10/10 PASS
13

Live Demo Scenario β€” Yorkshire Flood Response

# Trigger flood scenario ./scripts/demo-flood-scenario.sh # This will: # 1. Load Yorkshire Digital Twin on Cesium COP # 2. Simulate flood water rise (River Aire, Leeds) # 3. Launch 4-drone swarm for ISR coverage # 4. Fuse satellite imagery + drone feeds + IoT sensors # 5. Detect stranded vehicles/persons via YOLOv8 # 6. Publish CoT events to C2 for emergency services # 7. Log everything to SIGIL chain # 8. Generate JSP 936 compliance report # Duration: ~8 minutes # Output: Live COP + mission replay + audit trail
14

Generate Deployment Audit Package

# Generate full audit package ./scripts/gen-audit-package.sh # Output: /opt/defoneos/audit-package/ # β”œβ”€β”€ sigil-chain-export.jsonl (Full SIGIL chain export) # β”œβ”€β”€ jsp936-reports/ (Compliance reports for all models) # β”œβ”€β”€ sbom/ (Software Bill of Materials per container) # β”œβ”€β”€ pentest-report.pdf (Security scan results) # β”œβ”€β”€ network-topology.pdf (Architecture diagram) # └── deployment-manifest.yaml (Full deployment config)
15

Handover to MOD Operator

# Create operator accounts ./scripts/create-operators.sh --role=c2_operator --count=3 ./scripts/create-operators.sh --role=analyst --count=5 ./scripts/create-operators.sh --role=swarm_commander --count=2 ./scripts/create-operators.sh --role=auditor --count=2 # Print deployment summary ./scripts/deployment-summary.sh # ========================================== # DEFONEOS DEPLOYMENT COMPLETE # ========================================== # Platform: https://cop.your-domain # API: https://api.your-domain # SIGIL Chain: 15432+ entries (verified) # MCP Servers: 30/30 ONLINE # BFT Council: 33/33 ONLINE (quorum 23) # YOLOv8: mAP50 0.9234, 132ms inference # Swarm: Mava RL v3, PX4 SITL ready # C2: FreeTAKServer online (CoT) # Compliance: JSP 936 compliant # Deploy time: 90 days # ==========================================

πŸ”„ Operational Maintenance

TaskFrequencyAutomated
SIGIL chain backupDaily (02:00)βœ… Cron
MCP health checkEvery 5 minβœ… Auto
Container vulnerability scanDaily (03:00)βœ… Trivy
Key rotation (Ed25519 + PQC)Every 90 daysβœ… Auto
BFT agent healthEvery 1 minβœ… Auto
JSP 936 report refreshPer model deployβœ… Auto
Database backupDaily (01:00)βœ… Auto
ISR data archivalWeeklyβœ… Auto
Security patch reviewWeekly❌ Manual
MOD compliance reviewQuarterly❌ Manual

🚨 Troubleshooting

SymptomCauseFix
MCP server offlineUpstream API down or rate limited./scripts/restart-mcp.sh sentinel-hub-mcp
BFT quorum not reachedToo many agents offline (>10)./scripts/check-bft-agents.sh + restart failed agents
YOLOv8 latency > 200msGPU memory contentionnvidia-smi β†’ kill stale processes β†’ restart inference server
Cesium COP blankFusion engine down or tile server offlinedocker logs defoneos-fusion + check Redis
SIGIL chain invalidTampering or storage corruptionCRITICAL β†’ halt all ops β†’ restore from backup β†’ investigate
Swarm won't launchBFT veto or geofence misconfigurationCheck /api/v1/govern/bft/status + verify geofence polygon
Drone not respondingDTLS handshake failure or EM interferenceCheck CoT connectivity β†’ verify pre-shared key β†’ switch to MQTT fallback