نشر TypeScript على Kubernetes: دليل أساسي للمبتدئين
\n\nتطوير الويب الحديث لا يمكن تصوره بدون الحاويات والتنسيق. إذا كنت تكتب بلغة TypeScript وتريد أن يعمل تطبيقك بثبات، ويتوسع تلقائيًا، ويكون مقاومًا للأعطال — فإن Kubernetes (K8s) سيكون أفضل صديق لك. في هذا الدليل، سنشرح خطوة بخطوة كيفية حزم تطبيق TypeScript في Docker ونشره في مجموعة Kubernetes. المادة موجهة للمبتدئين: لا سحر، فقط أمثلة وشروحات واضحة.
\n\n1. تحضير تطبيق TypeScript
\n\nقبل التفكير في Kubernetes، يجب التأكد من أن تطبيقك جاهز للعمل في حاوية. سننشئ خادم HTTP بسيط باستخدام Express مع TypeScript.
\n\n1.1. تهيئة المشروع
\nأنشئ مجلد المشروع وقم بالتهيئة:
\nmkdir my-ts-app && cd my-ts-app\nnpm init -y\nnpm install express\nnpm install -D typescript @types/node @types/express ts-node nodemon\n\n1.2. إعداد TypeScript
\nأنشئ ملف tsconfig.json:
{\n "compilerOptions": {\n "target": "ES2020",\n "module": "commonjs",\n "outDir": "./dist",\n "rootDir": "./src",\n "strict": true,\n "esModuleInterop": true,\n "skipLibCheck": true\n },\n "include": ["src/**/*"],\n "exclude": ["node_modules", "dist"]\n}\n\n1.3. كود التطبيق
\nأنشئ مجلد src وملف index.ts:
import express, { Request, Response } from 'express';\n\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/', (req: Request, res: Response) => {\n res.json({ message: 'Hello from TypeScript on Kubernetes!' });\n});\n\napp.listen(PORT, () => {\n console.log(`Server running on port ${PORT}`);\n});\n\n1.4. البناء والتشغيل
\nأضف البرامج النصية في package.json:
"scripts": {\n "build": "tsc",\n "start": "node dist/index.js",\n "dev": "ts-node src/index.ts"\n}\nتحقق من التشغيل المحلي: npm run dev وافتح http://localhost:3000.
2. الحاويات باستخدام Docker
\n\nيعمل Kubernetes مع الحاويات. نحتاج إلى إنشاء صورة Docker لتطبيق TypeScript الخاص بنا.
\n\n2.1. ملف Dockerfile
\nأنشئ ملف Dockerfile في جذر المشروع:
FROM node:18-alpine AS builder\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci\nCOPY . .\nRUN npm run build\n\nFROM node:18-alpine AS production\nWORKDIR /app\nCOPY --from=builder /app/dist ./dist\nCOPY --from=builder /app/package*.json ./\nRUN npm ci --only=production\nEXPOSE 3000\nCMD ["node", "dist/index.js"]\nنستخدم بناء متعدد المراحل: أولاً نترجم TypeScript، ثم ننشئ صورة نهائية خفيفة الوزن.
\n\n2.2. بناء الصورة
\ndocker build -t my-ts-app:latest .\nتحقق محليًا:
\ndocker run -p 3000:3000 my-ts-app:latest\n\n2.3. ملف .dockerignore
\nلتجنب نسخ الملفات غير الضرورية، أنشئ .dockerignore:
node_modules\ndist\n.git\n*.md\n\n3. النشر في Kubernetes
\n\nالآن بعد أن أصبح لدينا صورة Docker، يمكننا الانتقال إلى Kubernetes. للاختبار المحلي، أوصي باستخدام Minikube أو Kind.
\n\n3.1. تشغيل Minikube
\nminikube start --driver=docker\nminikube status\n\n3.2. تحميل الصورة إلى Minikube
\nلكي يتمكن Kubernetes من العثور على صورتنا، سنقوم بتحميلها إلى بيئة Minikube:
\nminikube image load my-ts-app:latest\n\n3.3. إنشاء Deployment
\nأنشئ ملف deployment.yaml:
apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: my-ts-app-deployment\nspec:\n replicas: 2\n selector:\n matchLabels:\n app: my-ts