184 lines
7.5 KiB
Markdown
184 lines
7.5 KiB
Markdown
# 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)
|