الآخر

Cheat Sheet: PM2 في الإنتاج

fork · cluster · bin/www · reload · startup · save · logrotate
🎯 الهدف: تفتكر كل قرار وكل أمر في المذكرة بسرعة.
process واحدة على 8 coresبتشغّل كودك على core واحد بس
pm2 start app.jsfork وinstance واحدة (الـ default)
pm2 start app.js -i 4cluster تلقائي، 4 workers
عايز كذا instance بس fork-x في الـ CLI، أو exec_mode: "fork" في الـ ecosystem
في الـ ecosystemاكتب exec_mode صريح دايمًا
app مش Nodefork دايمًا
fork و port لكل instanceincrement_var: "PORT" ووراهم Nginx
cluster: مين الـ primary؟PM2 نفسه، وكودك جوه workers بس
عدد الـ workersinstances: "max"، أو -1 لو عايز تسيب core
bin/www فيه cluster.isMaster و-i 10فرع الـ master كود ميت، و10 workers بالظبط
نفس الملف في fork10 masters، والباقي بيقع بـ EADDRINUSE؛ شيل كود الـ cluster
isMasterdeprecated، والبديل isPrimary
DB connectionsworkers × pool max (Sequelize default 5)
NODE_TLS_REJECT_UNAUTHORIZED=0بيقفل التحقق للكل؛ استخدم httpsAgent لـ service واحدة
HTTPS serverحط on('error') على الفرعين
session أو cache أو rate limitRedis، مش RAM
cron جوه التطبيقبيتكرر لكل worker؛ process لوحده أو lock
Socket.io في clusterRedis adapter، وsticky لو فيه polling
request واحدة تقيلةworker_threads أو queue
Kubernetesprocess لكل container، وزوّد الـ replicas
deploy من غير downtimepm2 reload <name> في cluster
reload يقفل بأدبserver.close على SIGINT، وwait_ready لو محتاج
راقبpm2 list · pm2 logs · pm2 monit · pm2 describe
PM2 يقوم مع الـ bootpm2 startup من غير sudo، ونفّذ الأمر اللي طلع بالظبط
الـ service شغالة؟systemctl is-active pm2-$(whoami) وبعد reboot تبقى active
أكتر من يوزركل واحد pm2-<username> وdump.pm2 في الهوم بتاعه
احفظ الـ appspm2 save وبتتكتب في ~/.pm2/dump.pm2
غيّرت أي حاجةpm2 save تاني
غيّرت Node بـ nvmpm2 unstartup ثم pm2 startup ثم pm2 save
حدّثت PM2pm2 update
env variablesecosystem أو .env، مش export في الـ shell
الـ service منفصلة؟لأ، بتشغّل نفس الـ daemon اللي pm2 list بيكلمه
systemctl stop pm2-ubuntuبيعمل pm2 kill ويقفل كل الـ apps
pm2 وsudo pm2daemons مختلفين؛ يوزر واحد في كل حاجة
inactive أول مرة بعد startupطبيعي؛ بعد أول reboot هتبقى active
الـ apps مرجعتشenabled؟ نفس اليوزر؟ dump حديث؟ مسار node؟ journalctl -b
مفيش systemd@reboot /full/path/pm2 resurrect في crontab نفس اليوزر
الغي الـ startuppm2 unstartup (ممكن يقفل الـ apps)
logs بتكبرpm2 install pm2-logrotate
retain 77 قديمة + الحالي
compress falseالضغط مقفول
امسح logspm2 flush، مش rm

خلّصت المذكرة لما

🧠 اختبر نفسك
١) VPS بـ 8 cores عليها API stateless. تبدأ بإيه؟
cluster مع instances max، وتراجع الـ DB pool.
٢) pm2 start ./bin/www -i 10 والملف فيه cluster.fork. كام worker؟
10 بس، لأن فرع الـ master مش بيتنفذ تحت PM2 cluster.
٣) بعد الـ reboot pm2 list فاضية والـ service active. أول حاجة تشك فيها؟
اليوزر. غالبًا الـ apps اتحفظت بـ sudo pm2 أو بيوزر تاني.