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

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

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

ابدأ الدورة

مقدمة: لماذا TypeScript و Kubernetes زوج مثالي

\n

تتطلب تطوير الويب الحديث ليس فقط كودًا عالي الجودة، ولكن أيضًا بنية تحتية موثوقة. TypeScript، كطبقة علوية ثابتة الكتابة فوق JavaScript، يسمح بإنشاء تطبيقات خادم قابلة للتوسع مع الحد الأدنى من الأخطاء في مرحلة التجميع. Kubernetes (K8s) هو المعيار الفعلي لتنسيق الحاويات، مما يوفر النشر التلقائي والتوسع وإدارة التطبيقات.

\n

في هذا الدليل، سنشرح عمليًا كيفية إنشاء تطبيق TypeScript بسيط (Express API)، وتعبئته في صورة Docker ونشره في كتلة Kubernetes. ستحصل على أوامر جاهزة وملفات تكوين وشرح لكل خطوة. المادة موجهة للمطورين الذين هم على دراية بأساسيات TypeScript ويريدون إتقان عمليات devops.

\n

بنهاية المقال، ستكون قادرًا على نشر مشاريع TypeScript بنفسك في بيئة إنتاج باستخدام Kubernetes.

\n\n

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

\n

1.1. إنشاء خادم Express أساسي على TypeScript

\n

للتظاهر، سننشئ API بسيطًا على TypeScript. تأكد من تثبيت Node.js و npm لديك.

\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

أنشئ 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

الآن لنكتب الخادم نفسه. أنشئ ملف 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('Hello from TypeScript on Kubernetes!');\n});\n\napp.listen(PORT, () => {\n  console.log(`Server running on port ${PORT}`);\n});
\n

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

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

تحقق من البناء: npm run build && npm start. يجب أن يبدأ الخادم على المنفذ 3000.

\n\n

1.2. التحسين للإنتاج

\n

للإنتاج، من المهم تقليل حجم الصورة. أضف .dockerignore:

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

تأكد من أن جميع التبعيات مدرجة في dependencies (وليس في devDependencies) إذا كانت مطلوبة في وقت التشغيل.

\n\n

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

\n

2.1. كتابة Dockerfile

\n

نستخدم البناء متعدد المراحل (multi-stage build) لتقليل حجم الصورة النهائية.

\n
# Stage 1: Build\nFROM node:18-alpine AS builder\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci --only=production\nCOPY . .\nRUN npm run build\n\n# Stage 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

النقاط الرئيسية:

\n
    \n
  • npm ci — تثبيت سريع وحتمي للتبعيات.
  • \n
  • الطبقة الثانية تحتوي فقط على JS المترجم والوحدات الضرورية.
  • \n
  • الصورة الأساسية node:18-alpine تزن حوالي 120 ميجابايت فقط.
  • \n
\n\n

2.2. بناء الصورة والتحقق منها

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

افتح http://localhost:3000/health — يجب أن ترى استجابة JSON. إذا كان في

المدونات

توصيات الكتب