Déploiement de TypeScript sur Kubernetes : guide pratique de base

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : pourquoi TypeScript et Kubernetes forment un duo idéal

\n

Le 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.

\n

Dans 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\n

1. Préparation de l'application TypeScript pour la conteneurisation

\n

1.1. Création d'un serveur Express de base en TypeScript

\n

Pour la démonstration, créons une API minimale en TypeScript. Assurez-vous d'avoir Node.js et npm installés.

\n
mkdir ts-k8s-app\ncd ts-k8s-app\nnpm init -y\nnpm install express\nnpm install -D typescript @types/node @types/express ts-node nodemon
\n

Créez le fichier tsconfig.json :

\n
{\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 :

\n
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});
\n

Ajoutez les scripts dans package.json :

\n
"scripts": {\n  "build": "tsc",\n  "start": "node dist/index.js",\n  "dev": "nodemon src/index.ts"\n}
\n

Vérifiez la compilation : npm run build && npm start. Le serveur devrait démarrer sur le port 3000.

\n\n

1.2. Optimisation pour la production

\n

Pour la production, il est important de minimiser la taille de l'image. Ajoutez un fichier .dockerignore :

\n
node_modules\ndist\n.git\n*.md\n.env
\n

Assurez-vous que toutes les dépendances sont listées dans dependencies (pas dans devDependencies) si elles sont nécessaires à l'exécution.

\n\n

2. Construction de l'image Docker pour l'application TypeScript

\n

2.1. Rédaction du Dockerfile

\n

Utilisons 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"]
\n

Points 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-alpine ne pèse qu'environ 120 Mo.
  • \n
\n\n

2.2. Construction et vérification de l'image

\n
docker build -t ts-k8s-app:latest .\ndocker run -p 3000:3000 ts-k8s-app:latest
\n

Ouvrez http://localhost:3000/health — vous devriez voir une réponse JSON. Si dans

Blogs

Book Recommendations