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

7.5 KiB
Raw Permalink Blame History

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.

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

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