سال‌هاست در پروژه‌هایی که سرور اختصاصی یا VPS دارند، الگوی شکست مشابهی را می‌بینم: سرور روز راه‌اندازی بی‌نقص کار می‌کند، سه ماه بعد کمی کند می‌شود، شش ماه بعد یک روز از هفته را از دسترس خارج است و یک سال بعد کسی از وضعیت درونی آن خبر ندارد. تجربه‌ام این است که این مسیر فروپاشی، نه از یک ضعف بزرگ، که از انباشت هزار کار کوچک انجام‌نشده می‌آید. مدیریت و نگهداری سرور (server management and maintenance) یک پروژه یک‌باره نیست؛ یک روتین ماهانه است. در ادامه همان روتینی را می‌گویم که در پروژه‌های واقعی اجرا می‌کنم.

روتین هفتگی

هر هفته، ده دقیقه وقت بگذارید و چهار چیز را بررسی کنید:

  1. مصرف منابع: نمودار CPU، RAM و I/O دیسک را در پنل مانیتورینگ ببینید. الگو مهم‌تر از عدد لحظه‌ای است؛ اگر مصرف در ساعات مشخصی از روز جهش می‌کند، دنبال دلیلش باشید.
  2. فضای دیسک: حداقل ۲۰ درصد از فضای دیسک باید آزاد بماند. کم شدن فضا، کارایی دیتابیس را می‌خورد.
  3. لاگ خطاها: نگاهی سریع به error_log و لاگ وب‌سرور بیندازید. اگر خطای مکرر می‌بینید، حتی اگر سایت کار می‌کند، قبل از بحرانی‌شدن برطرف کنید.
  4. آپدیت‌های امنیتی: وصله‌های بحرانی را همان هفته اعمال کنید. برای سیستمی مثل لینوکس، ابزار unattended-upgrades می‌تواند این کار را خودکار کند.

جزئیات بیشتر درباره ساختار سرور و لایه‌هایش در سرور چیست و چگونه کار می‌کند آمده است.

نگهداری سرور، یک تصمیم نیست؛ عادتی است که روزی ده دقیقه هزینه دارد و ماهی یک فاجعه را جلوگیری می‌کند.

روتین ماهانه

هر ماه، یک جلسه کوچک برای این پنج مورد بگذارید:

  • بازبینی کاربران و دسترسی‌ها: هر کاربری که نیازی به دسترسی ندارد را حذف کنید. هر کلید SSH قدیمی که استفاده نمی‌شود را پاک کنید.
  • آپدیت نرم‌افزارها: هسته سیستم، پکیج‌های سیستمی، دیتابیس. حتماً قبل از آپدیت، بکاپ بگیرید و در محیط تست انجام دهید.
  • پاک‌سازی لاگ‌ها: لاگ‌های قدیمی را با rotation یا به‌صورت دستی پاک کنید. لاگ ۶ ماهه بدون چرخش می‌تواند چند گیگابایت فضا بخورد.
  • بازبینی cronها: هر cron که دیگر لازم نیست را حذف کنید؛ cronهای اضافه، منابع را بی‌دلیل مصرف می‌کنند.
  • تست بکاپ: فقط بکاپ داشتن کافی نیست؛ باید یک بار بازیابی را در محیط تست تجربه کنید تا مطمئن شوید فایل‌ها سالم هستند.

نگهداری امنیتی

امنیت سرور، یک لایه جدا نیست؛ بخشی از روتین نگهداری است. حداقل‌های ضروری:

  1. SSH با کلید: ورود با پسورد را غیرفعال کنید و از کلید عمومی-خصوصی استفاده کنید. اگر نمی‌دانید چطور، مراحل کلید در مستندات رسمی لینوکس آمده است.
  2. فایروال: فقط پورت‌های ضروری باز باشند. برای وب، پورت‌های ۸۰، ۴۴۳ و پورت SSH غیراستاندارد. راه‌اندازی فایروال سطح سرور در فایروال نرم‌افزاری در سرور آمده است.
  3. Fail2ban یا معادل: برای مسدود کردن خودکار IPهایی که تلاش ورود ناموفق دارند. این ابزار جلوی بخش بزرگی از حملات brute force را می‌گیرد. مفهوم این حملات در حمله brute force چیست آمده است.
  4. آپدیت هسته: به‌خصوص برای آسیب‌پذیری‌های critical؛ در محیط‌های production، بین ۲۴ تا ۷۲ ساعت بعد از انتشار پچ، اعمال شود.

مانیتورینگ و هشدار

تجربه‌ام می‌گوید اگر نمی‌خواهید سرور شما شبیه یک اتومبیل بدون چراغ هشدار باشد، دو سطح مانیتورینگ لازم است. سطح اول، مانیتورینگ داخلی مثل Netdata یا Prometheus با Grafana که متریک‌های دقیق CPU، RAM، دیسک و شبکه را ثبت می‌کند. سطح دوم، مانیتورینگ خارجی مثل UptimeRobot یا Pingdom که از بیرون سرور، در دسترس بودن سایت را چک می‌کند.

مهم‌تر از خود مانیتورینگ، آلارم‌هاست. برای متریک‌های کلیدی آستانه تعریف کنید: مصرف CPU بالای ۸۰٪ برای بیش از پنج دقیقه، فضای دیسک کمتر از ۱۵٪، خطای ۵xx بیش از ۵ بار در ده دقیقه. آلارم‌ها را به ایمیل و پیامک وصل کنید تا در ساعات حساس، از خواب هم بیدار شوید. اگر هنوز نمی‌دانید چه چیزهایی را باید رصد کنید، مقایسه ابزارهای مانیتورینگ سرور نقطه شروع خوبی است.

سروری که مانیتورینگ ندارد، مثل یک بیمار در ICU بدون دستگاه است: زنده است، اما هیچ‌کس نمی‌داند تا کی.

استراتژی بکاپ

سه قاعده طلایی بکاپ سرور:

  • ۳ نسخه: یکی روی سرور اصلی (فقط برای بازیابی سریع)، یکی روی سرور دیگر، یکی در فضای ابری جدا.
  • ۲ فرمت: یکی snapshot کامل، یکی بکاپ منطقی جدا از snapshot (مثلاً dump دیتابیس و فایل‌های مهم).
  • ۱ بازیابی ماهانه: حداقل یک بار در ماه، بازیابی را در محیط تست تمرین کنید.

روش‌های بکاپ دستی و خودکار در چگونه از سایت وردپرسی بکاپ بگیریم و مقایسه ابزارها در بهترین افزونه‌های بکاپ وردپرس آمده است. اگر روی VPS کار می‌کنید، snapshot مدیریت‌شده از سمت سرویس‌دهنده، گزینه‌ای سریع و کم‌دردسر است.

پایش ظرفیت و رشد

بخش نادیده‌گرفته‌شده نگهداری سرور، پایش ظرفیت (capacity planning) است. هر ماه نگاهی به روند رشد مصرف بیندازید:

متریکآستانه هشداراقدام
فضای دیسک۸۰٪ مصرفپاک‌سازی یا ارتقا
RAM مصرف معمول۷۵٪بررسی پروسه‌های سنگین
CPU ساعت اوج۷۰٪ پایداربررسی ترافیک و کش
I/O دیسکنزدیک به سقف سرویسمهاجرت به SSD/NVMe
پهنای باند۸۰٪ سهم ماهانهبررسی ترافیک غیرعادی

اگر متریک‌های مصرف به سقف نزدیک می‌شوند، سه راه پیش رو است: بهینه‌سازی سمت نرم‌افزار (کاهش مصرف در کاهش مصرف منابع هاست آمده)، افزودن کش و CDN، و ارتقای منابع سرور. ترتیب کار مهم است: اول بهینه‌سازی، سپس ارتقا؛ چون ارتقا بدون بهینه‌سازی، فقط مسئله را به تعویق می‌اندازد.

مستندسازی سرور

تجربه من این است که سرورهای بدون مستندات، در لحظه بحران، دو برابر هزینه می‌سازند. حداقل مستندسازی:

  • ساختار سرویس‌ها: کدام پروسه روی کدام پورت، با کدام کاربر.
  • محل نگهداری secretها: کلیدهای SSH، پسوردهای دیتابیس، کلیدهای API.
  • روتین cron و زمان اجرای آن.
  • مسیر بکاپ‌ها و روش بازیابی.
  • لیست سرویس‌های پولی (مثل CDN، ایمیل تراکنشی، DNS) و اطلاعات دسترسی.

سند را در جای امن (نه روی همان سرور) نگه دارید. اگر فرد دیگری از تیم باید سرور را مدیریت کند، سند به او این امکان را می‌دهد که بدون تماس با شما کار را ادامه دهد.

اشتباهات رایج در نگهداری

سه اشتباهی که بیشترین هزینه را در پشتیبانی به من تحمیل کرده‌اند:

  1. نداشتن بکاپ قابل بازیابی: داشتن بکاپ، بدون تست بازیابی، عملاً داشتن نبود آن است.
  2. آپدیت بدون آزمایش: آپدیت هسته لینوکس یا دیتابیس، بدون آزمایش قبلی در محیط تست، می‌تواند سرویس را بخواباند. همان پروتکل «تغییر امن» که برای قالب وردپرس داریم (در تغییر قالب بدون آسیب)، برای سرور هم لازم است.
  3. اجازه دادن به رشد لاگ‌ها: لاگ‌ها بدون چرخش، آرام‌آرام دیسک را پر می‌کنند و در یک روز خاص، سرویس دیتابیس با پیام «فضا تمام شد» متوقف می‌شود.
  4. پرسش‌های کوتاه

    آیا برای سرور شخصی هم این روتین لازم است؟ بله، ولی می‌توانید نسخه سبک‌تری اجرا کنید: هفتگی دو دقیقه بررسی مانیتورینگ، ماهانه یک بکاپ بازیابی. تجربه‌ام می‌گوید حتی همان نسخه سبک، جلوی بخش بزرگی از فاجعه‌ها را می‌گیرد.

    چقدر زمان برای نگهداری سرور لازم است؟ برای یک سرور معمولی، هفتگی ده دقیقه و ماهانه یک ساعت. برای سرورهای پرترافیک، دو تا سه برابر.

    آیا می‌توانم نگهداری سرور را به بیرون بسپارم؟ بله، سرویس‌های managed server این کار را انجام می‌دهند، اما توصیه من این است که حتی در آن حالت هم شما باید پایه‌ای از مدیریت سرور را بشناسید تا بتوانید وضعیت را ارزیابی کنید. تفاوت managed و unmanaged در هاست مدیریت شده یا مدیریت نشده آمده است.

    حاصل کلام

    سرور خوب، سروری نیست که روز اول بی‌نقص راه‌اندازی شده؛ سروری است که درازمدت، پیش‌بینی‌پذیر می‌ماند. تفاوت این دو، نه در هوش فنی مدیر، که در انضباط روتین است. اگر همین امروز فقط یک کار بکنید، یک مانیتورینگ خارجی راه بیندازید و آلارم uptime بگذارید. هفته بعد، بکاپ بازیابی را در محیط تست تمرین کنید. ماه بعد، روتین هفتگی را کامل اجرا کنید. در تجربه من، همان سه قدم، سرور را از حال سرگردان به حال پایدار می‌برد و شما را از تماس‌های نیمه‌شب راحت می‌کند. باقی مسیر، تکرار همان نظم است.

    اگر در نگهداری سرور عادت یا ابزار خاصی دارید که در تجربه‌تان بیشترین اثر را داشته، در دیدگاه‌ها بنویسید؛ فهرست روتین‌های نگهداری را با پیشنهادهای شما به‌روز می‌کنم. 🖧