راه اندازی Uptime Kuma با Docker و هشدار تلگرام

Uptime Kuma ابزار متن‌باز و سبکی برای پایش در دسترس بودن سایت و سرویس‌هاست. با آن آدرس سایت، پورت یک سرویس یا پینگ یک سرور را در بازه‌های مشخص بررسی می‌کنید و با قطع شدن، از طریق تلگرام، ایمیل یا ابزارهای دیگر هشدار می‌گیرید. راه‌اندازی آن با Docker چند دقیقه طول می‌کشد و برای سازمان‌های کوچک و متوسط که هنوز مانیتورینگ ندارند، شروع خوبی است.

این ابزار پایش از بیرون است: می‌پرسد «سایت جواب می‌دهد یا نه». برای دیدن مصرف CPU، حافظه و دیسک داخل سرور به ابزارهایی مثل Zabbix یا Netdata نیاز دارید؛ مقایسه آن‌ها در مقایسه Zabbix، Prometheus و Nagios آمده است. دو ابزار مکمل‌اند و با هم کار می‌کنند.

Uptime Kuma چه کارهایی می‌کند؟

نوع پایشکاربرد
HTTP(s)بررسی پاسخ سایت، کد وضعیت و وجود یک کلمه در صفحه
TCP Portباز بودن یک پورت، مثل SSH یا دیتابیس
Pingدر دسترس بودن یک سرور یا تجهیز شبکه
DNSحل شدن یک رکورد
Pushپایش کارهای زمان‌بندی‌شده که خودشان پیام می‌فرستند
Docker Containerوضعیت یک کانتینر

علاوه بر پایش، صفحه وضعیت (Status Page) عمومی هم می‌سازد که می‌توانید به مشتریان نشان دهید، و تاریخچه قطعی‌ها را نگه می‌دارد.

پیش از نصب

  • سرور جداگانه یا یک سرور مجازی کوچک مناسب است. پایش را روی همان سروری که پایش می‌کند نگذارید، چون با قطع سرور، خود Kuma هم هشدار نمی‌دهد.
  • Docker باید نصب باشد. اگر نیست، نصب آن روی Ubuntu را در خدمات Docker و کانتینرسازی یا مستندات رسمی Docker ببینید.
  • یک دامنه یا زیردامنه (مثلاً status.example.com) برای دسترسی با HTTPS، اگر قرار است از بیرون سرویس بدهد.

مرحله اول: اجرا با Docker

docker run -d --restart=always -p 127.0.0.1:3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1

پورت را روی 127.0.0.1 منتشر کرده‌ایم تا مستقیم از اینترنت در دسترس نباشد و فقط از طریق یک وب‌سرور پشتیبان، با HTTPS، دیده شود. Volume به نام uptime-kuma داده را نگه می‌دارد. برچسب 1 نسخه اصلی ۱ را می‌گیرد؛ نسخه‌های جدیدتر ممکن است روش نصب متفاوتی داشته باشند، پس مستندات پروژه را قبل از انتخاب ببینید.

اگر Docker Compose ترجیح می‌دهید:

services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    restart: always
    ports:
      - "127.0.0.1:3001:3001"
    volumes:
      - uptime-kuma:/app/data
volumes:
  uptime-kuma:

مرحله دوم: دسترسی با دامنه و HTTPS

Nginx را جلوی Kuma بگذارید. این برنامه از WebSocket استفاده می‌کند، پس هدرهای Upgrade لازم‌اند:

server {
    listen 80;
    server_name status.example.com;

    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

بعد گواهی SSL را با Certbot بگیرید. توضیح کامل واسطه در Reverse Proxy چیست و گرفتن گواهی در نصب SSL رایگان آمده است.

مرحله سوم: ساخت حساب مدیر

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

مرحله چهارم: اضافه کردن پایش

از دکمه Add New Monitor یک پایش بسازید. برای سایت اصلی:

  • نوع: HTTP(s)
  • آدرس: https://example.com
  • بازه بررسی (Heartbeat Interval): ۶۰ ثانیه
  • تعداد تلاش مجدد (Retries): ۱ یا ۲، تا قطعی‌های لحظه‌ای هشدار کاذب نسازند
  • کد وضعیت قابل قبول: 200-299

برای صفحه‌ای که خطای نرم می‌دهد، مثل سایتی که با خطای دیتابیس باز هم کد 200 می‌دهد، نوع «HTTP(s) – Keyword» را انتخاب کنید و کلمه‌ای را که باید در صفحه سالم باشد بنویسید. برای سرویسی مثل SSH یا دیتابیس، نوع TCP Port را با آدرس و پورت بگذارید. بررسی پورت از بیرون در دسترس بودن واقعی سرویس را نشان می‌دهد؛ باز بودن آن هم برای هر کسی که به اینترنت دسترسی دارد معنی دارد، پس بررسی کنید واقعاً قرار است عمومی باشد. فهرست پورت‌های رایج در راهنمای پورت‌های شبکه و سرور آمده است.

هشدار به تلگرام

در بخش Settings و Notifications یک اعلان جدید بسازید. برای تلگرام، با BotFather یک ربات بسازید، توکن آن را وارد کنید و شناسه گفتگو (Chat ID) را بنویسید. بعد گزینه «Default enabled» را روشن کنید تا همه پایش‌ها از آن استفاده کنند و برای آزمایش، دکمه Test را بزنید. هشدار را به کانالی بفرستید که کسی واقعاً آن را می‌بیند. ایمیل تنها برای قطعی‌های شبانه یا آخر هفته کافی نیست. توکن ربات را مثل رمز نگه دارید و در صفحه‌ای عمومی یا مخزن کد نگذارید.

صفحه وضعیت عمومی

از منوی Status Pages می‌توانید صفحه‌ای بسازید که چند پایش را به‌صورت عمومی نشان دهد. این صفحه برای شفافیت با مشتریان مفید است، ولی فقط پایش‌هایی را اضافه کنید که می‌خواهید دیده شوند و جزئیات داخلی، مثل آدرس‌های سرور داخلی، را در نام پایش ننویسید.

بکاپ و به‌روزرسانی

داده Kuma داخل Volume است. بکاپ از آن بگیرید، مثلاً با کپی پوشه Volume یا از طریق ابزار بکاپ داخل برنامه، و روش بکاپ کلی سرور را در بکاپ گیری سرور و بازیابی بحران ببینید. برای به‌روزرسانی، ایمیج جدید را بگیرید و کانتینر را دوباره بسازید:

docker pull louislam/uptime-kuma:1
docker stop uptime-kuma && docker rm uptime-kuma
docker run -d --restart=always -p 127.0.0.1:3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1

پیش از به‌روزرسانی، از Volume بکاپ بگیرید.

خطاهای رایج

نشانهعلت و راه حل
صفحه Kuma بعد از Nginx باز نمی‌شود یا مدام قطع می‌شودهدرهای WebSocket (Upgrade و Connection) در Nginx نیست
هشدار کاذب مکررRetries را بالا ببرید یا بازه را بیشتر کنید
پایش سایتی که باز می‌شود «Down» نشان می‌دهدسایت درخواست ربات را رد می‌کند یا SSL معتبر نیست
هشدار تلگرام نمی‌آیدتوکن یا Chat ID اشتباه است یا ربات در گروه نیست
داده بعد از حذف کانتینر از بین رفتVolume یا مسیر ذخیره درست mount نشده بود

سوالات متداول

Uptime Kuma جای Zabbix را می‌گیرد؟

نه. Kuma در دسترس بودن سرویس‌ها را از بیرون می‌سنجد. برای مصرف منابع داخل سرور و تجهیزات، به Zabbix یا ابزار مشابه نیاز دارید.

چند پایش را می‌شود اضافه کرد؟

برای صدها پایش با بازه‌های یک‌دقیقه‌ای، یک سرور کوچک کافی است. محدودیت واقعی منابع سرور و بازه‌هاست.

پایش از داخل ایران برای سایت خارجی درست کار می‌کند؟

نتیجه از دید همان سروری است که Kuma روی آن اجرا می‌شود. برای سایتی که مخاطبانش داخل ایران‌اند، پایش از سروری در همین شبکه معیار واقعی‌تری است.

آیا لازم است حتماً Docker باشد؟

نه. می‌توان با Node.js هم نصب کرد، ولی Docker ساده‌تر و تمیزتر است و به‌روزرسانی را راحت می‌کند.

منابع

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *