Déploiement de TypeScript sur Kubernetes : guide 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

Déploiement de TypeScript sur Kubernetes : guide de base



Le développement web moderne nécessite de plus en plus non seulement l'écriture de code de qualité, mais aussi un déploiement compétent des applications. TypeScript, grâce à son typage strict et ses outils puissants, est devenu un choix populaire pour les services backend sur Node.js. Cependant, sans un déploiement approprié, même un code parfait reste sur la machine locale. Kubernetes — le standard d'orchestration de conteneurs — permet d'automatiser le déploiement, la mise à l'échelle et la gestion des applications. Dans ce guide, nous allons parcourir étape par étape le processus de déploiement d'une application TypeScript sur Kubernetes.



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

Avant d'envoyer le code dans le cluster, il faut s'assurer que l'application est prête à fonctionner dans un conteneur. Examinons un projet typique avec Express.js et TypeScript.



Structure du projet

my-ts-app/├── src/│   ├── index.ts│   └── routes/├── dist/├── package.json├── tsconfig.json└── Dockerfile


Configuration de tsconfig.json

Assurez-vous que le compilateur TypeScript compile le projet dans le dossier dist :

{  "compilerOptions": {    "target": "ES2020",    "module": "commonjs",    "outDir": "./dist",    "rootDir": "./src",    "strict": true,    "esModuleInterop": true  },  "include": ["src/**/*"]}


Serveur simple (src/index.ts)

import express, { Request, Response } from 'express';

const app = express();const PORT = process.env.PORT || 3000;

app.get('/health', (_req: Request, res: Response) => { res.json({ status: 'ok', timestamp: new Date().toISOString() });});

app.listen(PORT, () => { console.log(`Server running on port ${PORT}`);});


Ajoutez les scripts dans package.json :

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


2. Construction de l'image Docker pour TypeScript

La conteneurisation est une étape clé avant le déploiement sur Kubernetes. Utilisons une construction multi-étapes (multi-stage build) pour réduire la taille de l'image.



Dockerfile

# Stage 1: BuildFROM node:18-alpine AS builderWORKDIR /appCOPY package*.json ./RUN npm ciCOPY tsconfig.json ./COPY src/ ./src/RUN npm run build

# Stage 2: ProductionFROM node:18-alpine AS productionWORKDIR /appCOPY --from=builder /app/dist ./distCOPY --from=builder /app/package*.json ./RUN npm ci --only=productionEXPOSE 3000CMD ["node", "dist/index.js"]


Construisez l'image et envoyez-la dans un registre (par exemple, Docker Hub) :

docker build -t yourusername/my-ts-app:v1 .docker push yourusername/my-ts-app:v1


3. Rédaction des manifestes Kubernetes

Pour le déploiement sur Kubernetes, vous aurez besoin d'au moins deux ressources : un Deployment (gestion des pods) et un Service (accès à l'application).



deployment.yaml

apiVersion: apps/v1kind: Deploymentmetadata:  name: my-ts-app  labels:    app: my-ts-appspec:  replicas: 2  selector:    matchLabels:      app: my-ts-app  template:    metadata:      labels:        app: my-ts-app    spec:      containers:      - name: app        image: yourusername/my-ts-app:v1        ports:        - containerPort: 3000        env:        - name: PORT          value: "3000"        livenessProbe:          httpGet:            path: /health            port: 3000          initialDelaySeconds: 5          periodSeconds: 10        readinessProbe:          httpGet:            path: /health            port: 3000          initialDelaySeconds: 3          periodSeconds: 5


service.yaml

apiVersion: v1kind: Servicemetadata:  name: my-ts-app-servicespec:  selector:    app: my-ts-app  ports:  - protocol: T                

Blogs

Book Recommendations