Files
smoa/docs/infrastructure/PROXMOX-VE-TEMPLATE-REQUIREMENTS.md
defiQUG 5a8c26cf5d Backend, sync, infra, docs: ETag, API versioning, k8s, web scaffold, Android 16, domain stubs
- Backend: ShallowEtagHeaderFilter for /api/v1/*, API-VERSIONING.md, README (tenant, CORS, Flyway, ETag)
- k8s: backend-deployment.yaml (Deployment, Service, Secret/ConfigMap)
- Web: scaffold with directory pull, 304 handling, touch-friendly UI
- Android 16: ANDROID-16-TARGET.md; BuildConfig STUN/signaling, SMOAApplication configures InfrastructureManager
- Domain: CertificateManager revocation stub, ReportService signReports, ZeroTrust/ThreatDetection minimal docs
- TODO.md and IMPLEMENTATION_STATUS.md updated; communications README for endpoint config

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-10 20:37:01 -08:00

168 lines
9.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Proxmox VE template hardware requirements for SMOA backend and supporting infra
This document lists **hardware requirements** for building a **Proxmox VE template** used to run the SMOA backend and supporting infrastructure (database, optional reverse proxy, optional TURN/signaling).
---
## Required target (mandatory minimum)
The **minimum viable target** for a single Proxmox VE template running the SMOA backend is:
| Aspect | Required minimum |
|--------|-------------------|
| **Backend VM** | 2 vCPU, 1 GiB RAM, 8 GiB disk, 1 Gbps network |
| **OS** | Linux (e.g. Debian 12 or Ubuntu 22.04 LTS) |
| **Java** | OpenJDK 17 (Eclipse Temurin or equivalent) |
| **Backend** | `smoa-backend` JAR on port 8080; H2 file DB or PostgreSQL |
| **Data** | Persistent storage for `./data/smoa` (H2) or PostgreSQL data directory |
| **Proxmox host** | 4 physical cores, 8 GiB RAM, 128 GiB SSD, 1 Gbps NIC |
Below this, the backend may run but is not supported for production (no headroom for spikes, logs, or audit growth). All other dimensions (RAM, disk, vCPU, separate DB/proxy/TURN) are **scaling aspects** described in the next section.
---
## 1. Backend service (smoa-backend)
| Resource | Minimum (dev/small) | Recommended (production) | Notes |
|----------|----------------------|---------------------------|--------|
| **vCPU** | 2 | 4 | Spring Boot + JPA; sync and pull endpoints can spike briefly. |
| **RAM** | 1 GiB | 24 GiB | JVM heap ~512 MiB1 GiB; leave headroom for OS and buffers. |
| **Disk** | 8 GiB | 2040 GiB | OS + JAR + H2 data (or PostgreSQL data dir if DB on same VM). Logs and audit table growth. |
| **Network** | 1 Gbps (shared) | 1 Gbps | API traffic; rate limit 120 req/min per client by default. |
- **Stack:** OpenJDK 17 (Eclipse Temurin), Spring Boot 3, Kotlin; H2 (file) or PostgreSQL.
- **Ports:** 8080 (HTTP); optionally 8443 if TLS is terminated on the VM.
- **Storage:** Persistent volume for `./data/smoa` (H2) or PostgreSQL data directory; consider separate disk for logs/audit.
---
## 2. Supporting infrastructure (same or separate VMs)
### 2.1 Database (if not H2 on backend VM)
When moving off H2 to **PostgreSQL** (recommended for production):
| Resource | Minimum | Recommended |
|----------|---------|-------------|
| **vCPU** | 2 | 24 |
| **RAM** | 1 GiB | 24 GiB |
| **Disk** | 20 GiB | 50100 GiB (SSD preferred) |
| **Network** | 1 Gbps | 1 Gbps |
- Can run on the **same Proxmox VM** as the backend (small deployments) or a **dedicated VM** (better isolation and scaling).
### 2.2 Reverse proxy (optional)
If you run **Nginx**, **Traefik**, or **Caddy** in front of the backend (TLS, load balancing, rate limiting):
| Resource | Minimum | Notes |
|----------|---------|--------|
| **vCPU** | 1 | Light. |
| **RAM** | 512 MiB | |
| **Disk** | 4 GiB | Config + certs + logs. |
- Can share a VM with the backend (e.g. Nginx in same template, backend as systemd service) or run as a separate small VM.
### 2.3 TURN / signaling (optional)
If you host **TURN** and/or **signaling** for WebRTC (meetings) instead of using external services:
| Resource | Minimum | Recommended |
|----------|---------|-------------|
| **vCPU** | 2 | 4 |
| **RAM** | 1 GiB | 2 GiB |
| **Disk** | 10 GiB | 20 GiB |
| **Network** | 1 Gbps | 1 Gbps+, low latency |
- Media traffic can be CPU- and bandwidth-heavy; size for peak concurrent sessions.
---
## 3. Combined “all-in-one” template (single VM)
A single Proxmox VE template that runs backend + PostgreSQL + optional Nginx on one VM:
| Resource | Minimum | Recommended (production) |
|----------|---------|---------------------------|
| **vCPU** | 4 | 68 |
| **RAM** | 4 GiB | 8 GiB |
| **Disk** | 40 GiB | 80120 GiB (SSD) |
| **Network** | 1 Gbps | 1 Gbps |
- **Layout:**
- OS (e.g. Debian 12 / Ubuntu 22.04 LTS), Docker or systemd.
- Backend JAR (or container), listening on 8080.
- PostgreSQL (if used) and optional Nginx on same host.
- Persistent volumes for DB data, backend H2 (if kept), and logs.
---
## 4. Proxmox VE host (physical) recommendations
To run one or more VMs built from the template:
| Resource | Small (dev / few users) | Production (dozens of devices) |
|----------|---------------------------|-------------------------------|
| **CPU** | 4 cores | 816 cores |
| **RAM** | 8 GiB | 3264 GiB |
| **Storage** | 128 GiB SSD | 256512 GiB SSD (or NVMe) |
| **Network** | 1 Gbps | 1 Gbps (low latency to mobile clients) |
- Prefer **SSD/NVMe** for database and backend data directories.
- **Backups:** Use Proxmox backup or external backup for VM disks / PostgreSQL dumps and backend audit data.
---
## 5. Template contents checklist
- **OS:** Debian 12 or Ubuntu 22.04 LTS (minimal/server).
- **Java:** OpenJDK 17 (Eclipse Temurin) or Adoptium.
- **Backend:** Install path for `smoa-backend-*.jar`; systemd unit; env file for `SERVER_PORT`, `SPRING_PROFILES_ACTIVE`, `SMOA_API_KEY`, `spring.datasource.url` (if PostgreSQL).
- **Optional:** PostgreSQL 15+ (if not using H2); Nginx/Caddy for reverse proxy and TLS.
- **Firewall:** Allow 8080 (backend) and 80/443 if reverse proxy; restrict admin/SSH.
- **Persistent:** Separate disk or volume for data (H2 `./data/smoa` or PostgreSQL data dir) and logs; exclude from “golden” template so each clone gets its own data.
---
## 6. Summary table (single backend VM, no separate DB/proxy)
| Component | vCPU | RAM | Disk | Network |
|-----------|------|-----|------|---------|
| **SMOA backend (all-in-one)** | 4 | 4 GiB | 40 GiB | 1 Gbps |
| **Production (backend + PostgreSQL on same VM)** | 6 | 8 GiB | 80 GiB SSD | 1 Gbps |
---
## 7. All aspects which scale
Every dimension below **scales** with load, retention, or features. The required target (Section above) is the floor; use this section to size for growth.
| Aspect | What it scales with | How to scale | Config / notes |
|--------|---------------------|--------------|----------------|
| **vCPU (backend)** | Concurrent requests, JPA/DB work, sync bursts | Add vCPUs (4 → 6 → 8). Consider second backend instance + load balancer for high concurrency. | Spring Boot thread pool; no app config for vCPU. |
| **RAM (backend)** | JVM heap, connection pools, cached entities, OS buffers | Increase VM RAM; set `-Xmx` (e.g. 1 GiB2 GiB) leaving headroom for OS. | `JAVA_OPTS` or systemd `Environment`. |
| **Disk (backend)** | H2/PostgreSQL data, log files, audit table (`sync_audit_log`) | Add disk or separate volume; rotate logs; archive/trim audit by date. | `spring.datasource.url`; logging config; optional audit retention job. |
| **Network (backend)** | Request volume, payload size (sync/pull), rate limit | Bigger NIC or multiple backends behind proxy. | `smoa.rate-limit.requests-per-minute` (default 120 per key/IP). |
| **Rate limit** | Number of clients and req/min per client | Increase `smoa.rate-limit.requests-per-minute` or disable for trusted LAN. | `application.yml` / env `SMOA_RATE_LIMIT_RPM`. |
| **Concurrent devices (API)** | Sync + pull traffic from many devices | More backend vCPU/RAM; optional horizontal scaling (multiple backends + Nginx/Traefik). | No hard cap in app; rate limit is per key/IP. |
| **Database size** | Directory, orders, evidence, credentials, reports, audit rows | More disk; move to dedicated PostgreSQL VM; indexes and vacuum. | `spring.datasource.*`; JPA/ddl-auto or Flyway. |
| **Audit retention** | Compliance; `sync_audit_log` row count | More disk; periodic delete/archive by date; separate audit store. | Application-level job or DB cron. |
| **vCPU (PostgreSQL)** | Query concurrency, connections, joins | Add vCPUs or move DB to dedicated VM with more cores. | `max_connections`, connection pool in backend. |
| **RAM (PostgreSQL)** | Cache, working set | Increase VM RAM; tune `shared_buffers` / `work_mem`. | PostgreSQL config. |
| **Disk (PostgreSQL)** | Tables, indexes, WAL | Add disk or volume; use SSD. | Data directory; backup size. |
| **Reverse proxy** | TLS, load balancing, rate limiting | Add vCPU/RAM if many backends or heavy TLS; scale Nginx/Caddy workers. | Nginx `worker_processes`; upstreams. |
| **TURN / signaling** | Concurrent WebRTC sessions, media bitrate | Scale vCPU (media encode/decode), RAM, and **network bandwidth**; add TURN instances for geography. | TURN/signaling server config; app `InfrastructureManager` endpoints. |
| **Proxmox host CPU** | Sum of all VMs vCPU; burst load | Add physical cores; avoid overcommit (e.g. total vCPU &lt; 2× physical for production). | VM vCPU count. |
| **Proxmox host RAM** | Sum of all VMs RAM | Add DIMMs; avoid overcommit. | VM RAM allocation. |
| **Proxmox host disk** | All VMs + backups | Add disks or NAS; use SSD for DB and backend data. | VM disk size; backup retention. |
| **Proxmox host network** | All VMs traffic; backup/restore | 1 Gbps minimum; 10 Gbps for many devices or TURN. | NIC; VLANs if needed. |
### Scaling summary
- **Backend only:** Scale **vCPU** and **RAM** for more concurrent devices and request spikes; **disk** for logs and audit.
- **Backend + PostgreSQL:** Scale **DB disk** and **DB RAM** with data size and query load; **backend vCPU/RAM** with API load.
- **With TURN/signaling:** Scale **TURN vCPU, RAM, and network** with concurrent WebRTC sessions and media bitrate.
- **Multi-node:** Add more backend or TURN VMs and scale **reverse proxy** and **Proxmox host** to support them.
These hardware requirements support the SMOA backend (sync, pull, delete, rate limiting, audit logging) and optional supporting infrastructure for a Proxmox VE template.