# دواپس و مانیتورینگ سیستم (DevOps & Monitoring) این مستند توضیحاتی در مورد پایش مستمر سامانه و اتوماسیون (CI/CD) پس از انتشار ارائه می‌دهد. هدف این است که اطمینان حاصل شود سرورها همیشه با بالاترین بهره‌وری در حال اجرا هستند و کدهای جدید با کمترین خطا دیپلوی می‌شوند. ## ۱. فرآیند استقرار خودکار (CI/CD) در تیم‌های بزرگ برای جلوگیری از بروز خطای انسانی در سرور، از فرآیند استقرار خودکار استفاده می‌شود. - کدهای جدید ابتدا در برنچ‌های مختلف توسعه داده شده و پس از تست (توسط GitHub Actions یا ابزارهای مشابه) به شاخه `main` یا `production` مرج می‌شوند. - یک اکشن در گیت‌هاب پس از Push شدن کدهای جدید به صورت خودکار تغییرات را بیلد کرده و بر روی سرور کپی می‌کند. - برای انجام دستی این کار یک اسکریپت در سرور وجود دارد که آخرین کدها را `git pull` کرده، دستورات نصب وابستگی و `npm run build` را اجرا و در نهایت سرویس‌های PM2 را ری‌استارت می‌کند. ## ۲. مانیتورینگ عملکرد (PM2 Dashboard) با توجه به اینکه سامانه روی پلتفرم Node.js و از طریق مدیریت فرآیند `pm2` اجرا می‌شود، بهترین راه برای نظارت محلی (Local Server Monitoring) استفاده از دستورات زیر است: - **مشاهده داشبورد منابع:** ```bash pm2 monit ``` این دستور در ترمینال یک محیط گرافیکی را نشان می‌دهد که میزان مصرف CPU و RAM برای سرویس‌های فرانت‌اند و بک‌اند را نمایش می‌دهد. - **مشاهده لیست وضعیت برنامه‌ها:** ```bash pm2 list ``` نمایش Uptime (میزان زمان روشن ماندن) و وضعیت اجرا. اگر سرویسی Crash کرده باشد، در این لیست مشخص خواهد بود. ## ۳. بررسی لاگ‌های سیستم (Logs Management) سیستم لاگین بک‌اند (NestJS) ارورهای پایگاه داده و ریکوئست‌های ناموفق را ثبت می‌کند. خطاهای رندرینگ فرانت‌اند نیز در لاگ‌های اجرای اپلیکیشن قابل ردیابی است. - برای مشاهده لاگ‌های زنده سیستم از این دستور استفاده کنید: ```bash pm2 logs ``` - برای فیلتر کردن لاگ‌های مشخص، مثلاً فقط بک‌اند: ```bash pm2 logs canino-api --lines 100 ``` ## ۴. مانیتورینگ دیتابیس (PostgreSQL) از آنجا که پایگاه داده یکی از گلوگاه‌های اصلی (Bottlenecks) سرعت در سیستم‌های فروشگاهی است، می‌توانید در صورت بروز کندی سیستم از ابزار `pg_stat_statements` برای ردیابی کوئری‌های کُند (Slow Queries) در دیتابیس استفاده کنید. همچنین پیشنهاد می‌شود از دیتابیس به صورت دوره‌ای بک‌آپ گرفته و لاگ‌های بک‌آپ را در سرور مانیتورینگ نظارت کنید.