Introduction : pourquoi TypeScript et Kubernetes forment un duo idéal
\nLe développement web moderne nécessite non seulement un code de qualité, mais aussi une infrastructure fiable. TypeScript, en tant que surcouche typée statiquement de JavaScript, permet de créer des applications serveur évolutives avec un minimum d'erreurs à la compilation. Kubernetes (K8s) est le standard de facto pour l'orchestration de conteneurs, assurant le déploiement, la mise à l'échelle et la gestion automatiques des applications.
\nDans ce guide, nous allons voir concrètement comment créer une application TypeScript simple (API Express), l'empaqueter dans une image Docker et la déployer dans un cluster Kubernetes. Vous obtiendrez des commandes prêtes à l'emploi, des fichiers de configuration et une explication de chaque étape. Ce contenu est destiné aux développeurs qui connaissent déjà les bases de TypeScript et souhaitent maîtriser les processus devops.
\nÀ la fin de cet article, vous serez capable de déployer vos projets TypeScript dans un environnement de production avec Kubernetes.
\n\n1. Préparation de l'application TypeScript pour la conteneurisation
\n1.1. Création d'un serveur Express de base en TypeScript
\nPour la démonstration, créons une API minimale en TypeScript. Assurez-vous d'avoir Node.js et npm installés.
\nmkdir ts-k8s-app\ncd ts-k8s-app\nnpm init -y\nnpm install express\nnpm install -D typescript @types/node @types/express ts-node nodemon\nCréez le fichier tsconfig.json :
{\n "compilerOptions": {\n "target": "ES2020",\n "module": "commonjs",\n "outDir": "./dist",\n "rootDir": "./src",\n "strict": true,\n "esModuleInterop": true\n },\n "include": ["src/**/*"]\n}\nÉcrivons maintenant le serveur lui-même. Créez le fichier src/index.ts :
import express, { Request, Response } from 'express';\n\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/health', (_req: Request, res: Response) => {\n res.json({ status: 'ok', timestamp: new Date().toISOString() });\n});\n\napp.get('/', (_req: Request, res: Response) => {\n res.send('Bonjour depuis TypeScript sur Kubernetes !');\n});\n\napp.listen(PORT, () => {\n console.log(`Serveur en cours d'exécution sur le port ${PORT}`);\n});\nAjoutez les scripts dans package.json :
"scripts": {\n "build": "tsc",\n "start": "node dist/index.js",\n "dev": "nodemon src/index.ts"\n}\nVérifiez la compilation : npm run build && npm start. Le serveur devrait démarrer sur le port 3000.
1.2. Optimisation pour la production
\nPour la production, il est important de minimiser la taille de l'image. Ajoutez un fichier .dockerignore :
node_modules\ndist\n.git\n*.md\n.env\nAssurez-vous que toutes les dépendances sont listées dans dependencies (pas dans devDependencies) si elles sont nécessaires à l'exécution.
2. Construction de l'image Docker pour l'application TypeScript
\n2.1. Rédaction du Dockerfile
\nUtilisons une construction multi-étapes (multi-stage build) pour réduire la taille de l'image finale.
\n# Étape 1 : Construction\nFROM node:18-alpine AS builder\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci --only=production\nCOPY . .\nRUN npm run build\n\n# Étape 2 : Production\nFROM node:18-alpine\nWORKDIR /app\nCOPY --from=builder /app/dist ./dist\nCOPY --from=builder /app/node_modules ./node_modules\nCOPY --from=builder /app/package.json ./\nEXPOSE 3000\nCMD ["node", "dist/index.js"]\nPoints clés :
\n- \n
npm ci— installation rapide et déterministe des dépendances. \n - La deuxième couche contient uniquement le JS compilé et les modules nécessaires. \n
- L'image de base
node:18-alpinene pèse qu'environ 120 Mo. \n
2.2. Construction et vérification de l'image
\ndocker build -t ts-k8s-app:latest .\ndocker run -p 3000:3000 ts-k8s-app:latest\nOuvrez http://localhost:3000/health — vous devriez voir une réponse JSON. Si dans