Vue d'ensemble du déploiement¶
KanjiIQ utilise un pipeline CI/CD entièrement automatisé qui construit les images Docker, les pousse vers le Forgejo Container Registry et déploie sur le cluster k3s à chaque push vers main.
Flux du pipeline¶
graph LR
A[git push main] --> B[Forgejo Actions<br/>Triggered]
B --> C[Docker Build<br/>Multi-stage]
C --> D[Push to Registry<br/><registry>]
D --> E[kubectl set image<br/>Rolling update]
E --> F[Rollout Status<br/>Health check]
Déclenchement basé sur les chemins¶
Chaque composant dispose de son propre workflow, déclenché uniquement lorsque les fichiers pertinents changent :
| Workflow | Chemins déclencheurs | Image |
|---|---|---|
deploy-frontend.yml |
frontend/**, Dockerfile.frontend, nginx.frontend.conf |
jlpt-kanji-frontend |
deploy-backend.yml |
backend/**, Dockerfile.backend |
jlpt-kanji-backend |
deploy-docs.yml |
docs/**, mkdocs.yml, Dockerfile.docs |
jlpt-kanji-docs |
Cela signifie que la modification d'une page de documentation ne déclenche pas la reconstruction du frontend ou du backend.
Stratégie de déploiement¶
KanjiIQ utilise les rolling updates de Kubernetes :
- De nouveaux pods sont créés avec l'image mise à jour
- Les sondes de readiness doivent réussir avant que les anciens pods ne soient terminés
- Si la nouvelle version échoue aux vérifications de santé, le déploiement est automatiquement arrêté
- Déploiements sans interruption avec 2 réplicas
Environnements¶
| Environnement | Fonction | URL |
|---|---|---|
| Production | Application en ligne | kanjiiq.com |
| Staging | Tests pré-release | Namespace Kubernetes local |
| Développement | Développement local | localhost:8080 / localhost:3000 |
L'environnement de staging reproduit les manifestes de production dans un namespace Kubernetes séparé (jlpt-kanji-staging) avec sa propre instance PostgreSQL.
Tagging des images¶
Chaque build produit deux tags :
:latest— Pointe toujours vers le build le plus récent:COMMIT_SHA— Tag immuable pour la traçabilité
Les déploiements utilisent le tag SHA du commit pour garantir des déploiements déterministes :