كود TypeScript الخاص بك جاهز لاقتحام العالم؟ حان وقت إرساله إلى الإنتاج
\n\nلقد كتبت تطبيق TypeScript المثالي. كل شيء يعمل بسلاسة محليًا، والأنواع صارمة، والكود جميل. ولكن بمجرد طرح السؤال "كيف يمكن تشغيل هذا على الخادم؟"، يقع العديد من المطورين في حيرة. هل هذا مألوف؟
\n\nنشر تطبيقات TypeScript ليس علم الصواريخ، ولكنه أيضًا ليس مجرد "نسخ مجلد". في هذه المقالة، سنناقش ثلاثة أساليب رئيسية: VPS الكلاسيكي، وDocker الحديث، والمنصات السحابية. ستتعلم كيفية بناء مشروع TypeScript بشكل صحيح، وإعداد البيئة، وأتمتة نشر التحديثات. هيا بنا!
\n\nالخطوة 1: تحضير تطبيق TypeScript للنشر
\n\nقبل التفكير في الخوادم، يجب التأكد من أن تطبيقك جاهز للعمل خارج البيئة المحلية. TypeScript هي إضافة تُترجم (تجمّع) إلى JavaScript. على الخادم، لا يفهم Node.js ملفات .ts مباشرة (إلا إذا كنت تستخدم ts-node، وهو غير موصى به للإنتاج).
\n\nبناء المشروع
\n\nتأكد من أن ملف package.json الخاص بك يحتوي على الأوامر النصية الصحيحة:
{\n "scripts": {\n "build": "tsc",\n "start": "node dist/index.js",\n "dev": "ts-node-dev --respawn src/index.ts"\n },\n "main": "dist/index.js"\n}\n\nالأمر npm run build سينشئ مجلد dist بكود JS الجاهز. هذا هو المجلد الذي سنقوم بنشره.
نصيحة: أضف "outDir": "./dist" في ملف tsconfig.json وقم بإعداد exclude لـ node_modules:
{\n "compilerOptions": {\n "outDir": "./dist",\n "rootDir": "./src",\n "target": "ES2020",\n "module": "commonjs",\n "strict": true,\n "esModuleInterop": true\n },\n "include": ["src/**/*"],\n "exclude": ["node_modules", "dist"]\n}\n\nالطريقة 1: VPS الكلاسيكي — تحكم كامل
\n\nVPS (الخادم الخاص الافتراضي) هو خادم مستأجر، حيث أنت الملك والمتحكم. مناسب للمشاريع التي تحتاج تحكمًا كاملاً في البيئة. سننظر في النشر على Ubuntu 22.04.
\n\nإعداد الخادم
\n\n- \n
- الاتصال عبر SSH:
ssh root@عنوان_IP_الخاص_بك\n - تحديث الحزم:
apt update && apt upgrade -y\n - تثبيت Node.js 20.x: \n
curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && apt install -y nodejs\n \n - تثبيت PM2 — مدير عمليات Node.js:\n
npm install -g pm2\n \n
نشر التطبيق
\n\nأسهل طريقة هي نسخ الملفات عبر SCP أو Git. أوصي باستخدام Git:
\n\ngit clone https://github.com/مستودعك/المشروع.git /var/www/myapp\ncd /var/www/myapp\nnpm install\nnpm run build\npm2 start dist/index.js --name "myapp"\npm2 save\npm2 startup\n\nهام: قم بإعداد Nginx كوكيل عكسي (reverse proxy) ليكون التطبيق متاحًا على المنفذ 80:
\n\nserver {\n listen 80;\n server_name نطاقك.ru;\n\n location / {\n proxy_pass http://localhost:3000;\n proxy_http_version 1.1;\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection 'upgrade';\n proxy_set_header Host $host;\n proxy_cache_bypass $http_upgrade;\n }\n}\n\nلا تنسَ إعداد SSL عبر Certbot — فهو مجاني وإلزامي للويب الحديث.
\n\nالطريقة 2: Docker — الحاويات لإمكانية التكرار
\n\nيحل Docker المشكلة الرئيسية لـ VPS: "إنه يعمل على جهازي!". تحتوي الحاوية على كل ما هو ضروري — Node.js، والتبعيات، والكود المُجمّع. البيئة متطابقة على أي نظام تشغيل.
\n\nDockerfile لـ TypeScript
\n\nنقوم بإنشاء بناء متعدد المراحل (multi-stage build) — وهذا يقلل من حجم الصورة النهائية:
\n\n# المرحلة 1: بناء TypeScript\nFROM node:20-alpine AS builder\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci\nCOPY . .\nRUN npm run build\n\n# المرحلة 2: صورة الإنتاج