# 04 — Choix des serveurs Hetzner --- ## Types de serveurs Hetzner (post 1er avril 2026) ### Série CX — Intel/AMD partagé (usage général) | Type | vCPU | RAM | SSD | Bande passante | Prix/mois | |---|---|---|---|---|---| | CX22 | 2 | 4 GB | 40 GB | 20 TB | **€5.11** | | CX32 | 4 | 8 GB | 80 GB | 20 TB | **€9.19** | | CX42 | 8 | 16 GB | 160 GB | 20 TB | **€21.49** | | CX52 | 16 | 32 GB | 320 GB | 20 TB | **€43.49** | ### Série CAX — ARM64 Ampere (meilleur rapport prix/perfs) | Type | vCPU | RAM | SSD | Prix/mois | |---|---|---|---|---| | CAX11 | 2 | 4 GB | 40 GB | **€3.79** | | CAX21 | 4 | 8 GB | 80 GB | **€6.49** | | CAX31 | 8 | 16 GB | 80 GB | **€12.49** | | CAX41 | 16 | 32 GB | 160 GB | **€24.49** | > **Note ARM64 :** NestJS (Node.js) et Next.js fonctionnent parfaitement sur ARM64. Les images Docker `node:20-alpine` sont multi-arch. Les carrier APIs (Maersk, MSC...) appellent des APIs externes → architecture du serveur sans impact. **Les CAX sont 35-40% moins chères que les CX pour des perfs équivalentes.** ### Série CCX — vCPU dédiés (pour la base de données) | Type | vCPU dédiés | RAM | SSD NVMe | Prix/mois | |---|---|---|---|---| | CCX13 | 2 | 8 GB | 80 GB | **€12.49** | | CCX23 | 4 | 16 GB | 160 GB | **€23.99** | | CCX33 | 8 | 32 GB | 240 GB | **€51.99** | | CCX43 | 16 | 64 GB | 360 GB | **€103.99** | > Les CCX sont recommandés pour PostgreSQL self-hosted car les vCPUs dédiés évitent la contention avec d'autres clients. I/O NVMe plus rapide. --- ## Recommandations par palier ### Palier MVP — 100 utilisateurs **Objectif :** Démarrer avec un coût minimal, tout peut tenir sur peu de nœuds. ``` Control Plane : 1× CX22 (2 vCPU, 4 GB) — €5.11/mois Workers : 2× CX32 (4 vCPU, 8 GB) — €9.19/mois × 2 = €18.38/mois Load Balancer : LB11 — €7.49/mois ────────────────────────────────────────────────────── Sous-total cluster : €30.98/mois + Neon.tech Pro : $19/mois + Upstash Redis : $0 (free tier) + Object Storage : €4.99/mois (inclut 1 TB) ────────────────────────────────────────────────────── TOTAL : ~€55/mois ``` **Pods qui tiennent sur cette config :** - 2× NestJS backend (500m CPU / 512Mi RAM chacun) - 1× Next.js frontend (250m CPU / 256Mi RAM) - Traefik ingress (built-in) - cert-manager **Alternative ARM64 encore moins chère :** ``` Control Plane : 1× CAX11 (2 vCPU, 4 GB) — €3.79/mois Workers : 2× CAX21 (4 vCPU, 8 GB) — €6.49/mois × 2 = €12.98/mois ────────────────────────────────────────────────────── Sous-total (ARM64) : €16.77/mois (vs €23.49 en CX) ``` > ⚠️ **Si vous utilisez CAX (ARM64)**, vérifiez que vos Dockerfiles sont buildés en `linux/arm64` ou utilisez des images `linux/amd64` avec émulation QEMU. Le plus simple : build multi-arch avec `docker buildx` (voir doc 11). --- ### Palier Croissance — 1 000 utilisateurs **Objectif :** Performance correcte, HA partielle, autoscaling activé. ``` Control Plane : 1× CX22 (2 vCPU, 4 GB) — €5.11/mois Workers : 3× CX42 (8 vCPU, 16 GB) — €21.49/mois × 3 = €64.47/mois (autoscaling jusqu'à 6 nodes) Load Balancer : LB21 (75 targets, 2 TB) — €22.14/mois PostgreSQL : CCX13 dédié (4 vCPU dédiés) — €23.99/mois ← self-hosted + 100 GB Volume — €5.70/mois Redis : CX22 dédié — €5.11/mois Object Storage: €4.99/mois ────────────────────────────────────────────────────── TOTAL : ~€131/mois ``` **Pods sur cette config :** - 4× NestJS backend (750m CPU / 768Mi RAM) - 2× Next.js frontend (500m CPU / 512Mi RAM) - HPA actif : scale jusqu'à 8 pods NestJS --- ### Palier Scale — 10 000 utilisateurs **Objectif :** Haute disponibilité, performances sous charge. ``` Control Plane : 3× CX22 (cluster etcd HA) — €5.11/mois × 3 = €15.33/mois Workers : 6× CX52 (16 vCPU, 32 GB) — €43.49/mois × 6 = €260.94/mois (autoscaling jusqu'à 12 nodes) Load Balancer : LB31 (150 targets, 3 TB) — €39.15/mois PostgreSQL : CCX33 primary (8 vCPU dédié) — €51.99/mois + CCX23 replica (4 vCPU dédié) — €23.99/mois + 500 GB Volume NVMe — €28.50/mois Redis : CX42 dédié — €21.49/mois Object Storage: ~€15/mois (extra 3 TB) ────────────────────────────────────────────────────── TOTAL : ~€457/mois ``` --- ## Localisation des serveurs (datacenter) Hetzner a des datacenters en : - `fsn1` — Falkenstein, Allemagne (recommandé) - `nbg1` — Nuremberg, Allemagne - `hel1` — Helsinki, Finlande (bon pour RGPD nordique) - `ash` — Ashburn, USA (si clients américains prioritaires) - `hil` — Hillsboro, USA **Recommandation :** `fsn1` (Falkenstein) pour les clients européens. Même région pour tous les nœuds pour minimiser la latence réseau interne. ```bash # Vérifier les datacenters disponibles dans une région hcloud datacenter list # ID NAME DESCRIPTION LOCATION # 1 fsn1-dc3 Falkenstein 1 virtual DC 3 fsn1 # 2 nbg1-dc3 Nuremberg 1 virtual DC 3 nbg1 # 3 hel1-dc2 Helsinki 1 virtual DC 2 hel1 # 4 ash-dc1 Ashburn, Virginia 1 virtual DC 1 ash # 5 hil-dc1 Hillsboro, Oregon 1 virtual DC 1 hil ``` --- ## Load Balancer — Choix du plan | Plan | Targets | Trafic inclus | Connexions | Prix/mois | |---|---|---|---|---| | **LB11** | 25 | 1 TB | 1 000 simultanées | €7.49 | | **LB21** | 75 | 2 TB | 10 000 simultanées | €22.14 | | **LB31** | 150 | 3 TB | 100 000 simultanées | ~€39 | - **100 users :** LB11 largement suffisant - **1 000 users :** LB21 recommandé (WebSocket = connexions persistantes) - **10 000 users :** LB31 nécessaire (10 000 connexions simultanées pour WS + HTTP) **Configuration WebSocket sur le LB :** ```yaml # Dans hetzner-k3s config (géré automatiquement) # Le LB Hetzner supporte les WebSockets nativement # Sticky sessions : cookie_name=SERVERID ``` --- ## Décision finale : ARM64 ou x86 ? | Critère | x86 (CX) | ARM64 (CAX) | |---|---|---| | Coût | Référence | **-35%** | | Performances Node.js | Bonne | **Équivalente ou meilleure** | | Docker images officielles | ✅ linux/amd64 | ✅ linux/arm64 (Node.js 20, Alpine, etc.) | | Build CI/CD | Simple | Nécessite `linux/arm64` ou multi-arch | | Dépendances natives | Toutes supportées | 99% supportées (vérifier pdfkit, argon2) | | Maturité | Très mature | Mature (2023+) | **Verdict pour Xpeditis :** Les CAX sont recommandées si vous acceptez la légère complexité de build multi-arch. Sinon, CX pour la simplicité. Ce guide utilise CX par défaut. > **Vérification des dépendances natives pour ARM64 :** > - `argon2` → ✅ binaires précompilés ARM64 via `@node-rs/argon2` > - `pdfkit` → ✅ pur JavaScript, pas de binaires natifs > - `sharp` (si utilisé pour images) → ✅ binaires ARM64 disponibles > - `better-sqlite3` → Non utilisé (TypeORM PG)