مقدمة: من التطوير إلى الإنتاج على VPS
\n\nنشر تطبيق TypeScript على VPS (خادم خاص افتراضي) هو مرحلة رئيسية في دورة حياة أي مشروع ويب. على عكس الاستضافة المشتركة البسيطة، يمنحك VPS تحكمًا كاملاً في البيئة، وهو أمر بالغ الأهمية لتطبيقات TypeScript الحديثة التي تعمل مع Node.js وExpress وNestJS أو Next.js.
\n\nفي هذه المقالة، سنستعرض عملية النشر المتقدمة: من تجميع TypeScript إلى إعداد بيئة الإنتاج مع إعادة التشغيل التلقائي، وموازنة التحميل، والمراقبة. ستتعلم كيفية تحويل الكود الخام إلى خدمة تعمل بثبات.
\n\n1. تحضير تطبيق TypeScript للإنتاج
\n\n1.1. إعداد البناء والتكوين
\n\nالخطوة الأولى هي التأكد من أن ملف tsconfig.json الخاص بك مُحسَّن للإنتاج. إليك التكوين الموصى به:
{\n "compilerOptions": {\n "target": "ES2020",\n "module": "commonjs",\n "lib": ["ES2020"],\n "outDir": "./dist",\n "rootDir": "./src",\n "strict": true,\n "esModuleInterop": true,\n "skipLibCheck": true,\n "forceConsistentCasingInFileNames": true,\n "resolveJsonModule": true,\n "declaration": true,\n "declarationMap": true,\n "sourceMap": true\n },\n "include": ["src/**/*"],\n "exclude": ["node_modules", "dist", "tests"]\n}\n\n\nأضف نصوصًا برمجية للبناء والتشغيل في ملف package.json:
{\n "scripts": {\n "build": "tsc",\n "start": "node dist/index.js",\n "dev": "ts-node src/index.ts",\n "clean": "rm -rf dist"\n }\n}\n\n\n1.2. إدارة متغيرات البيئة
\n\nاستخدم ملفات .env مع مكتبة dotenv. للإنتاج، أنشئ ملفًا منفصلاً .env.production:
NODE_ENV=production\nPORT=3000\nDB_HOST=localhost\nDB_PORT=5432\nDB_NAME=myapp_prod\nDB_USER=app_user\nDB_PASSWORD=secure_password_here\nREDIS_URL=redis://localhost:6379\n\n\nقم بتحميل التكوين حسب البيئة:
\n\nimport dotenv from 'dotenv';\nimport path from 'path';\n\nconst envFile = process.env.NODE_ENV === 'production' \n ? '.env.production' \n : '.env.development';\n\ndotenv.config({ path: path.resolve(__dirname, `../${envFile}`) });\n\nexport const config = {\n port: parseInt(process.env.PORT || '3000', 10),\n db: {\n host: process.env.DB_HOST || 'localhost',\n port: parseInt(process.env.DB_PORT || '5432', 10),\n name: process.env.DB_NAME || 'myapp',\n user: process.env.DB_USER || 'user',\n password: process.env.DB_PASSWORD || '',\n },\n redis: {\n url: process.env.REDIS_URL || 'redis://localhost:6379',\n },\n isProduction: process.env.NODE_ENV === 'production',\n};\n\n\n2. إعداد VPS ونشر التطبيق
\n\n2.1. الإعداد الأساسي للخادم
\n\nبعد شراء VPS (نوصي بـ Ubuntu 22.04 LTS) قم بالإعداد الأولي:
\n\n- \n
- تحديث الحزم:
sudo apt update && sudo apt upgrade -y\n - تثبيت Node.js 20 LTS:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt install -y nodejs\n - تثبيت Git:
sudo apt install git -y\n - إنشاء مستخدم:
sudo adduser deployer && sudo usermod -aG sudo deployer\n
2.2. استنساخ المشروع وبناؤه
\n\nاتصل بالخادم عبر SSH ونفذ:
\n\n# التبديل إلى المستخدم\nsudo -i -u deployer\ncd ~\n\n# استنساخ المستودع\ngit clone https://github.com/your-username/your-app.git\ncd your-app\n\n# تثبيت التبعيات\nnpm ci --only=production\n\n# بناء TypeScript\nnpm run build\n\n# إنشاء ملف .env للإنتاج\nnano .env.production\n\n\n2.3. إعداد PM2 لإدارة العمليات
\n\nPM2 هو