# 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)
