تطبيق Node.js صغير لا يحتاج Kubernetes أو عشر خدمات لكي يكون Production-ready. يمكنك بناء نشر قوي من خطوات قليلة: Artifact واضحة، Environment variables، Process manager أو systemd، Reverse proxy مع HTTPS، Health checks، Logs و Backup للبيانات. التعقيد يجب أن يزيد فقط عندما يظهر احتياج حقيقي مثل عدة خدمات أو autoscaling أو عزل فرق.
اجعل Build قابلة للتكرار
حدد نسخة Node.js و lockfile واستخدم npm ci أو ما يعادلها. Artifact التي تنتقل للإنتاج يجب أن تكون معروفة، لا install عشوائي من branch قد تتغير أثناء النشر. سجل commit/version داخل التطبيق إن أمكن.
شغّل التطبيق تحت Process Manager
PM2 أو systemd يمكنهما إعادة التشغيل عند crash وإدارة env و logs. لا تعتمد على terminal مفتوحة أو nohup بلا مراقبة. حدد memory limits وسياسة restart مناسبة حتى لا تدخل في loop سريع يخفي المشكلة.
ضع Reverse Proxy أمام Node
Nginx أو proxy مماثلة تتعامل مع TLS و HTTP/2/3 حسب البيئة و headers و static files و timeouts. التطبيق يستمع غالبًا على loopback/private port ولا يحتاج exposure مباشر للإنترنت.
خطوات عملية
- ابنِ artifact.
- انقلها أو اسحب release معروفة.
- ثبت dependencies production.
- اضبط env.
- شغل process manager.
- تحقق health endpoint.
- حول traffic.
- راقب logs.
Health check يجب أن تكون صادقة
/health التي ترجع 200 دائمًا لا تكشف Database ميتة. افصل liveness عن readiness عند الحاجة: process حية، وهل تستطيع خدمة requests؟ لا تجعل health نفسها استعلامًا مكلفًا في كل ثانية.
Logs و metrics قبل أول Incident
احفظ structured logs مع request ID، واستخدم log rotation. راقب error rate و latency و memory و restart count. لا تنتظر أول عطل لتعرف أن logs تختفي بعد restart.
Rollback جزء من عملية النشر
احتفظ ب release سابقة أو artifact يمكن إعادة تشغيلها بسرعة. Database migrations تحتاج backward compatibility أو خطة rollback؛ الرجوع للكود وحده لا يصلح schema مكسورة.
قائمة مراجعة
- نسخة التطبيق معروفة.
- Process manager تعمل.
- HTTPS شغالة.
- Readiness حقيقية.
- Logs محفوظة.
- Rollback مجرب.
- Backup البيانات مستقل عن deploy.
تحقق من Environment قبل فتح المنفذ
افحص المتغيرات المطلوبة عند startup باستخدام schema واضحة: database URL، secrets، ports، origins، وغيرها. إذا كانت قيمة ناقصة أو غير صالحة، اجعل التطبيق يفشل مبكرًا برسالة واضحة بدل تشغيل process نصف مهيأة تظهر مشكلتها عند أول request.
Database migrations تحتاج ترتيبًا مع النشر
إذا أضاف الإصدار الجديد column تستخدمها فورًا، تأكد أن migration تعمل قبل الكود الذي يعتمد عليها. في الأنظمة التي تحتاج zero-downtime، اجعل التغيير backward-compatible: أضف الحقل أولًا، انشر الكود، ثم احذف القديم في إصدار لاحق. لا تجمع breaking schema change مع rollback غير ممكن.
Zero-downtime لا يعني بلا مراقبة
PM2 cluster أو reverse proxy يمكن أن يعيد تشغيل workers تدريجيًا، لكن يجب اختبار readiness قبل إدخال worker في traffic. عند release راقب error rate و latency و restart count لعدة دقائق، ولا تعتبر نجاح deploy command دليلًا أن التطبيق سليم.
شارك في تقييم ونقاش المقال
رأيك يضيف قيمة للمقال ويساعدنا على تحسين المحتوى والنقاش حوله.
النقاش
جارٍ تحميل التعليقات…