xpeditis2.0/docs/deployment/hetzner/04-server-selection.md
2026-03-26 18:08:28 +01:00

184 lines
7.5 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.

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