كيف تتوقف عن الخوف وتبدأ في النشر: بيئة الإنتاج الأولى لك
\n\nلقد كتبت تطبيق JavaScript رائعًا. إنه يعمل محليًا، وتمر الاختبارات، ولا توجد أخطاء في وحدة التحكم. ولكن بمجرد أن يطرح السؤال "كيف يتم تشغيل هذا على خادم حقيقي؟"، يبدأ الكثيرون في الذعر. VPS وDocker والمنصات السحابية - تبدو وكأنها شيء من عالم DevOps، وليس من عالم الواجهة الأمامية أو الخلفية على Node.js.
\n\nفي الواقع، الأمر أبسط مما يبدو. في هذه المقالة، سنستعرض ثلاثة أساليب رئيسية لنشر تطبيقات JavaScript: على VPS، وفي Docker، وفي السحابة. سأعرض أمثلة حقيقية على الكود، وأشرح إيجابيات وسلبيات كل طريقة، وستتمكن من اختيار ما يناسب مشروعك.
\n\nما هو النشر ولماذا هو مطلوب أصلاً؟
\n\nالنشر (deploy) هو عملية نشر تطبيقك على خادم حيث سيكون متاحًا للمستخدمين على مدار الساعة طوال أيام الأسبوع. التطوير المحلي هو مجرد الخطوة الأولى. بدون النشر، يظل مشروعك مجرد مجموعة من الملفات على جهاز الكمبيوتر الخاص بك.
\n\nبالنسبة لمطوري JavaScript، هناك ثلاثة سيناريوهات ذات صلة خاصة:
\n\n- \n
- النشر على VPS - تحكم كامل في الخادم. \n
- النشر في Docker - عزل البيئة وإمكانية إعادة إنتاجها. \n
- النشر على المنصات السحابية - أقل قدر من المتاعب مع البنية التحتية. \n
دعنا نستعرض كل خيار بالتفصيل.
\n\nالنشر على VPS: إدارة يدوية وتحكم كامل
\n\nVPS (Virtual Private Server) هو خادم افتراضي يمكنك تثبيت أي نظام تشغيل عليه وتكوين كل شيء يدويًا. هذا هو الأسلوب الكلاسيكي الذي يوفر أقصى مرونة.
\n\nالخطوة 1: اختيار الخادم وتكوينه
\n\nفي البداية، نستأجر VPS (على سبيل المثال، من DigitalOcean أو Hetzner أو Timeweb). الحد الأدنى من التكوين لـ Node.js هو 1 vCPU و 1 GB RAM. نختار Ubuntu 22.04 LTS.
\n\nبعد الحصول على الوصول عبر SSH، نقوم بالتكوين الأساسي:
\n\nssh root@عنوان_IP_الخاص_بك\n\n# تحديث الحزم\napt update && apt upgrade -y\n\n# تثبيت Node.js 20.x\ncurl -fsSL https://deb.nodesource.com/setup_20.x | bash -\napt-get install -y nodejs\n\n# التحقق\nnode -v\nnpm -v\n\nالخطوة 2: استنساخ المستودع وتثبيت التبعيات
\n\nلنفترض أن تطبيقك موجود على GitHub. نقوم باستنساخه على الخادم:
\n\ngit clone https://github.com/اسم_المستخدم_خاصتك/اسم_المستودع_خاصتك.git\ncd اسم_المستودع_خاصتك\nnpm install --production\n\nالخطوة 3: إعداد متغيرات البيئة
\n\nلا تقم أبدًا بتخزين الأسرار في الكود. أنشئ ملف .env:
nano .env\n\n# مثال على المحتوى\nPORT=3000\nDATABASE_URL=mongodb://localhost:27017/myapp\nJWT_SECRET=مفتاحك_السري_الفائق\n\nالخطوة 4: التشغيل عبر PM2
\n\nPM2 هو مدير عمليات لـ Node.js. يقوم تلقائيًا بإعادة تشغيل التطبيق عند تعطله ويحافظ على تشغيله:
\n\nnpm install -g pm2\npm2 start app.js --name "my-app"\npm2 save\npm2 startup\n\nتم! تطبيقك يعمل على المنفذ 3000. لجعله متاحًا على المنفذ 80، استخدم Nginx كوكيل عكسي (reverse proxy).
\n\napt install nginx -y\nnano /etc/nginx/sites-available/default\n\nداخل الملف، اكتب:
\n\nserver {\n listen 80;\n server_name اسم_نطاقك.كوم;\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أعد تشغيل Nginx:
\n\nnginx -t\nsystemctl restart nginx\n\nإيجابيات VPS: تحكم كامل، يمكنك تكوين أي شيء، تكلفة منخفضة.
\nسلبيات: تحتاج إلى الاهتمام بالأمان والنسخ الاحتياطية والتحديثات بنفسك.
\n\nالنشر في Docker: الحاويات من أجل قابلية إعادة الإنتاج
\n\nD