نشر TypeScript على Kubernetes: دليل أساسي

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

نشر TypeScript على Kubernetes: دليل أساسي



تتطلب تطوير الويب الحديث بشكل متزايد ليس فقط كتابة كود عالي الجودة، ولكن أيضًا نشر التطبيقات بشكل صحيح. أصبح TypeScript، بفضل الكتابة الصارمة (strict typing) والأدوات القوية، خيارًا شائعًا لخدمات الخلفية (backend services) على Node.js. ومع ذلك، بدون نشر صحيح، سيبقى الكود المثالي على الجهاز المحلي. Kubernetes — معيار تنسيق الحاويات (container orchestration) — يسمح بأتمتة النشر والتوسع وإدارة التطبيقات. في هذا الدليل، سنشرح عملية نشر تطبيق TypeScript على Kubernetes خطوة بخطوة.



1. تحضير تطبيق TypeScript للحاويات (Containerization)

قبل إرسال الكود إلى الكتلة (cluster)، يجب التأكد من أن التطبيق جاهز للعمل داخل حاوية. لننظر في مشروع نموذجي على Express.js مع TypeScript.



هيكل المشروع

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


إعداد tsconfig.json

تأكد من أن مترجم TypeScript يقوم ببناء المشروع في مجلد dist:

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


خادم بسيط (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}`);});


أضف السكريبتات (scripts) في package.json:

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


2. بناء صورة Docker لتطبيق TypeScript

الحاويات (Containerization) هي خطوة أساسية قبل النشر على Kubernetes. سنستخدم البناء متعدد المراحل (multi-stage build) لتقليل حجم الصورة.



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"]


قم ببناء الصورة وإرسالها إلى السجل (registry) (مثل Docker Hub):

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


3. كتابة ملفات Kubernetes (Manifests)

للنشر على Kubernetes، ستحتاج إلى موردين على الأقل: Deployment (إدارة البودات) و Service (الوصول إلى التطبيق).



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                

المدونات

توصيات الكتب