6.9 KiB
6.9 KiB
02 — Prérequis
Tout ce dont vous avez besoin avant de commencer le déploiement.
Comptes à créer
Obligatoires
| Service | URL | Usage | Coût |
|---|---|---|---|
| Hetzner Cloud | https://console.hetzner.cloud | Serveurs, LB, Object Storage | Pay-as-you-go |
| GitHub | https://github.com | Code + GitHub Actions + GHCR (images Docker) | Gratuit |
| Cloudflare | https://cloudflare.com | DNS + WAF + CDN | Gratuit (plan Free) |
| Neon.tech | https://neon.tech | PostgreSQL managé | Free → $19/mois Pro |
Recommandés (peuvent être substitués)
| Service | URL | Usage | Coût |
|---|---|---|---|
| Upstash | https://upstash.com | Redis serverless | Free → $10/mois |
| Brevo | https://brevo.com | Email SMTP (remplace SendGrid) | Gratuit jusqu'à 300/j |
| Sentry | https://sentry.io | Error tracking | Gratuit (5K events/mois) |
Outils locaux à installer
Outils essentiels
# macOS (avec Homebrew)
brew install kubectl helm hcloud vitobotta/tap/hetzner-k3s
# Vérification versions minimales requises
kubectl version --client # >= 1.28
helm version # >= 3.12
hcloud version # >= 1.40
hetzner-k3s version # >= 3.0
# Ubuntu/Debian
# kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl && sudo mv kubectl /usr/local/bin/
# helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# hcloud CLI
curl -Lo hcloud.tar.gz https://github.com/hetznercloud/cli/releases/latest/download/hcloud-linux-amd64.tar.gz
tar -xzf hcloud.tar.gz && sudo mv hcloud /usr/local/bin/
# hetzner-k3s
curl -Lo hetzner-k3s https://github.com/vitobotta/hetzner-k3s/releases/latest/download/hetzner-k3s-linux-amd64
chmod +x hetzner-k3s && sudo mv hetzner-k3s /usr/local/bin/
Outils optionnels mais recommandés
# kubectx + kubens — changer de contexte/namespace facilement
brew install kubectx
# k9s — interface terminal pour Kubernetes (très utile)
brew install k9s
# stern — logs multi-pods en temps réel
brew install stern
# AWS CLI v2 — pour interagir avec Hetzner Object Storage
brew install awscli
# Docker — pour build et test des images en local
brew install --cask docker
Clés SSH
Générez une paire de clés SSH dédiée pour Hetzner (ne réutilisez pas votre clé perso) :
# Générer une clé ED25519 (plus sécurisée et performante que RSA)
ssh-keygen -t ed25519 -C "xpeditis-hetzner-deploy" -f ~/.ssh/xpeditis_hetzner
# Résultat :
# ~/.ssh/xpeditis_hetzner (clé privée — ne JAMAIS partager)
# ~/.ssh/xpeditis_hetzner.pub (clé publique — à ajouter sur Hetzner)
# Vérification
cat ~/.ssh/xpeditis_hetzner.pub
# ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI... xpeditis-hetzner-deploy
Ajoutez la clé publique dans ~/.ssh/config pour faciliter la connexion :
cat >> ~/.ssh/config << 'EOF'
Host hetzner-xpeditis-*
IdentityFile ~/.ssh/xpeditis_hetzner
User root
StrictHostKeyChecking no
EOF
Nom de domaine
Vous avez besoin d'un domaine avec accès à la gestion DNS. Ce guide suppose :
| Domaine | Usage |
|---|---|
xpeditis.com (ou votre domaine) |
Site principal |
api.xpeditis.com |
API NestJS backend |
app.xpeditis.com |
Frontend Next.js |
monitoring.xpeditis.com |
Grafana (optionnel, accès restreint) |
Si vous n'avez pas encore de domaine : Namecheap (~$10/an) ou OVHcloud (~€7/an). Une fois acheté, déléguez les DNS à Cloudflare (gratuit, meilleur outil DNS).
Déléguer le DNS à Cloudflare
- Créez un compte sur https://cloudflare.com
- "Add a Site" → entrez votre domaine
- Cloudflare scanne vos DNS existants
- Copiez les 2 nameservers Cloudflare (ex:
carl.ns.cloudflare.com) - Chez votre registrar, remplacez les nameservers par ceux de Cloudflare
- Attendez 5-30 min pour la propagation
Variables d'environnement de travail
Créez un fichier .env.deploy (ne pas committer) pour centraliser vos variables de déploiement :
# Fichier : ~/.xpeditis-deploy.env
# Source ce fichier avant de travailler : source ~/.xpeditis-deploy.env
# Hetzner
export HCLOUD_TOKEN="<votre_token_hetzner>"
export HETZNER_SSH_KEY_PATH="$HOME/.ssh/xpeditis_hetzner"
# Kubernetes
export KUBECONFIG="$HOME/.kube/kubeconfig-xpeditis-prod"
# Domaine
export DOMAIN="xpeditis.com"
export API_DOMAIN="api.xpeditis.com"
export APP_DOMAIN="app.xpeditis.com"
# Registry Docker (GitHub Container Registry)
export GHCR_REGISTRY="ghcr.io"
export GHCR_ORG="<votre_org_github>"
export BACKEND_IMAGE="$GHCR_REGISTRY/$GHCR_ORG/xpeditis-backend"
export FRONTEND_IMAGE="$GHCR_REGISTRY/$GHCR_ORG/xpeditis-frontend"
# PostgreSQL (Neon.tech)
export DATABASE_URL="postgresql://user:pass@host/dbname?sslmode=require"
# Redis (Upstash)
export REDIS_HOST="your-redis.upstash.io"
export REDIS_PORT="6379"
export REDIS_PASSWORD="<upstash_redis_password>"
# Hetzner Object Storage
export HETZNER_S3_BUCKET="xpeditis-prod"
export HETZNER_S3_ENDPOINT="https://fsn1.your-objectstorage.com"
export HETZNER_S3_ACCESS_KEY="<access_key>"
export HETZNER_S3_SECRET_KEY="<secret_key>"
Checklist avant de démarrer
□ Compte Hetzner Cloud créé et vérifié (CB enregistrée)
□ Compte GitHub avec repo xpeditis2.0 (ou fork)
□ Compte Cloudflare avec domaine délégué
□ Compte Neon.tech créé
□ Compte Upstash créé (optionnel)
□ kubectl installé (>= 1.28)
□ helm installé (>= 3.12)
□ hcloud CLI installé et configuré
□ hetzner-k3s installé
□ Paire de clés SSH ED25519 générée pour Hetzner
□ Docker installé (pour build local)
□ Domaine + sous-domaines api. et app. planifiés
Configuration hcloud CLI
# Configurer le token Hetzner
hcloud context create xpeditis-prod
# Entrez votre token quand demandé
# Vérifier la configuration
hcloud context list
hcloud server list # Doit retourner une liste vide (ou vos serveurs)
# Lister les types de serveurs disponibles
hcloud server-type list
# Lister les images disponibles
hcloud image list --type system | grep ubuntu
Vérification finale
# Tous ces checks doivent passer avant de continuer
echo "=== Vérification des outils ==="
kubectl version --client --short 2>/dev/null && echo "✅ kubectl OK" || echo "❌ kubectl manquant"
helm version --short 2>/dev/null && echo "✅ helm OK" || echo "❌ helm manquant"
hcloud version 2>/dev/null && echo "✅ hcloud OK" || echo "❌ hcloud manquant"
hetzner-k3s version 2>/dev/null && echo "✅ hetzner-k3s OK" || echo "❌ hetzner-k3s manquant"
docker --version 2>/dev/null && echo "✅ docker OK" || echo "❌ docker manquant"
ssh-keygen -l -f ~/.ssh/xpeditis_hetzner.pub 2>/dev/null && echo "✅ SSH key OK" || echo "❌ Clé SSH manquante"
echo ""
echo "=== Vérification des tokens ==="
hcloud context list 2>/dev/null | grep xpeditis && echo "✅ hcloud context OK" || echo "❌ hcloud context non configuré"