مقدمة: لماذا VPS هو الخيار الأفضل للإنتاج
تطوير تطبيق JavaScript على Node.js هو نصف المهمة فقط. النصف الثاني، الذي لا يقل أهمية، هو deploy على خادم production. يستخدم العديد من المطورين المبتدئين الاستضافات المجانية (Heroku, Render, Vercel)، ولكن للمشاريع الجادة ستحتاج عاجلاً أم آجلاً إلى VPS (Virtual Private Server).
يمنحك VPS تحكماً كاملاً في البيئة: أنت تختار إصدار Node.js، وتقوم بإعداد خادم الويب، وتدير العمليات والموارد. في هذه المقالة، سنشرح عملية deploy خطوة بخطوة لتطبيق JavaScript على VPS باستخدام أدوات حديثة: Nginx كـ reverse proxy، PM2 لإدارة العمليات، Let's Encrypt لـ SSL، و GitHub Actions للأتمتة.
الخطوة 1: إعداد الخادم وتثبيت البرامج الضرورية
الخطوة الأولى هي الاتصال بـ VPS الخاص بك (عادة عبر SSH) وتثبيت مجموعة الأدوات الأساسية. لنفترض أنك تستخدم Ubuntu 22.04 LTS.
# تحديث الحزم
sudo apt update && sudo apt upgrade -y
# تثبيت Node.js (يوصى به عبر NodeSource)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
# التحقق من الإصدارات
node -v
npm -v
# تثبيت Git (إذا لم يكن مثبتاً بالفعل)
sudo apt install git -y
# تثبيت Nginx
sudo apt install nginx -y
تأكد أيضاً من إعداد جدار الحماية الأساسي (UFW):
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
الخطوة 2: استنساخ المستودع وإعداد التطبيق
الآن تحتاج إلى نقل كود التطبيق إلى الخادم. أسهل طريقة هي استنساخ المستودع من GitHub/GitLab.
# الانتقال إلى الدليل /var/www (الدليل القياسي لمشاريع الويب)
cd /var/www
# استنساخ المستودع (استبدل بـ URL الخاص بك)
sudo git clone https://github.com/your-username/your-repository.git myapp
# منح الصلاحيات للمستخدم الحالي
sudo chown -R $USER:$USER /var/www/myapp
# الانتقال إلى مجلد التطبيق
cd /var/www/myapp
# تثبيت التبعيات
npm install --production
قم بإنشاء ملف .env لمتغيرات البيئة (المنفذ، مفاتيح API، سلسلة اتصال قاعدة البيانات):
# مثال .env
PORT=3000
NODE_ENV=production
DATABASE_URL=mongodb://localhost:27017/myapp
JWT_SECRET=your-secret-key
الخطوة 3: إعداد PM2 لإدارة العملية
PM2 هو مدير عمليات لـ Node.js، يقوم تلقائياً بإعادة تشغيل التطبيق عند تعطله ويحافظ على تشغيله في الخلفية.
# تثبيت PM2 بشكل عام
sudo npm install -g pm2
# تشغيل التطبيق (إذا كانت نقطة الدخول هي app.js أو server.js)
pm2 start app.js --name "myapp"
# حفظ قائمة العمليات للتشغيل التلقائي عند إعادة التشغيل
pm2 save
pm2 startup systemd
بعد تنفيذ pm2 startup، سترى أمراً يجب تنفيذه بصلاحيات root. قم بنسخه وتنفيذه.
يمكنك التحقق من الحالة باستخدام الأمر pm2 status. إذا كان التطبيق قيد التشغيل، سيكون متاحاً على العنوان http://your-ip:3000 (المنفذ من .env).
الخطوة 4: إعداد Nginx كـ reverse proxy
الوصول المباشر إلى Node.js عبر المنفذ 3000 ليس ممارسة جيدة. من الأفضل استخدام Nginx كخادم وكيل، والذي سيقبل الطلبات على المنفذ 80 (HTTP) ويعيد توجيهها إلى تطبيقك.
قم بإنشاء ملف تكوين لنطاقك (أو IP):
sudo nano /etc/nginx/sites-available/myapp
ألصق الكود التالي:
server {
listen 80;
server_name your-domain.ru www.your-domain.ru;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connectio