Uptime Kuma یک ابزار متنباز و رایگان برای پایش دسترسپذیری است: سایتها، APIها، پورتها و گواهیهای SSL را بررسی میکند، هنگام قطعی از طریق تلگرام، ایمیل و دهها کانال دیگر خبر میدهد و یک صفحه وضعیت (Status Page) عمومی هم میسازد. در این آموزش Uptime Kuma را با Docker روی یک VPS نصب میکنیم، پشت HTTPS قرار میدهیم و مانیتورها و هشدارهای کاربردی را تنظیم میکنیم.
فهرست مطالب
چرا Uptime Kuma؟
- رایگان و متنباز، با رابط کاربری ساده و فارسیپذیر.
- انواع مانیتور: HTTP(s) با بررسی کد پاسخ یا یک کلمه در صفحه، TCP، Ping، DNS، انقضای SSL، کانتینر Docker، دیتابیسها و مانیتور Push.
- بیش از ۹۰ کانال هشدار، از جمله تلگرام، ایمیل، Webhook و دیسکورد.
- صفحه وضعیت عمومی برای اطلاعرسانی به مشتریان.
- منابع بسیار کم: یک VPS کوچک برای صدها مانیتور کافی است.
اگر هنوز با مفاهیم پایه آشنا نیستید، ابتدا مانیتورینگ سرور چیست را بخوانید.
کجا نصب کنیم؟
Uptime Kuma را روی سروری جدا از سرورهایی که پایش میکند نصب کنید؛ ترجیحاً در دیتاسنتر یا شبکه دیگر. اگر روی همان سرور سایت نصب شود، با قطعی سرور، مانیتورینگ هم خاموش میشود و هشداری نمیرسد. یک VPS با ۱ هسته و ۱ گیگابایت RAM کافی است.
گام ۱: نصب با Docker
اگر Docker نصب نیست، ابتدا آن را نصب کنید؛ مقدمات در آموزش Docker برای مبتدیها. فایل docker-compose.yml:
services:
uptime-kuma:
image: louislam/uptime-kuma:1
restart: unless-stopped
ports:
- "127.0.0.1:3001:3001"
volumes:
- ./data:/app/data
mkdir -p ~/uptime-kuma && cd ~/uptime-kuma
# فایل بالا را ذخیره کنید، سپس:
docker compose up -d
docker compose logs -f
پورت فقط روی 127.0.0.1 منتشر شده تا پنل مستقیم روی اینترنت باز نباشد و فقط از طریق Reverse Proxy با HTTPS در دسترس قرار گیرد. اگر نسخه اصلی جدیدتری از Uptime Kuma منتشر شده باشد، پیش از تغییر برچسب ایمیج، یادداشتهای ارتقای آن را بخوانید.
گام ۲: دامنه و HTTPS
یک سابدامنه مثل status.example.com بسازید و Nginx را جلوی Uptime Kuma قرار دهید. Uptime Kuma از WebSocket استفاده میکند، پس هدرهای آن لازم است:
server {
listen 443 ssl;
http2 on;
server_name status.example.com;
ssl_certificate /etc/letsencrypt/live/status.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/status.example.com/privkey.pem;
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-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
گواهی را با Certbot بگیرید؛ توضیحات در SSL چیست. سپس آدرس را باز کنید و حساب مدیر را با رمز قوی بسازید.
گام ۳: ساخت مانیتورها
| چه چیزی | نوع مانیتور | تنظیم پیشنهادی |
|---|---|---|
| صفحه اصلی سایت | HTTP(s) – Keyword | بررسی وجود یک عبارت ثابت در صفحه (مثلاً نام برند)؛ بازه ۶۰ ثانیه |
| صفحه پرداخت یا API | HTTP(s) | کد پاسخ ۲۰۰ و حداکثر زمان پاسخ |
| گواهی SSL | گزینه هشدار انقضا در مانیتور HTTP(s) | هشدار ۱۴ و ۷ روز قبل از انقضا |
| SSH یا پورت سرویس | TCP Port | بازه ۱۲۰ ثانیه |
| دیتابیس | MySQL/PostgreSQL | با کاربر فقطخواندنی و از طریق شبکه خصوصی |
| رکورد DNS | DNS | بررسی اینکه رکورد A به IP درست اشاره کند |
مانیتور Keyword از مانیتور ساده HTTP دقیقتر است؛ سایتی که صفحه خطای پایگاه داده نشان میدهد ممکن است همچنان کد ۲۰۰ برگرداند. گزینه «Retries» را روی ۲ یا ۳ بگذارید تا خطاهای لحظهای هشدار کاذب نسازند.
گام ۴: هشدار تلگرامی
- در تلگرام با BotFather یک ربات بسازید و توکن آن را بگیرید.
- ربات را به گروه یا کانال تیم اضافه کنید.
- در Uptime Kuma از Settings › Notifications یک اعلان از نوع Telegram بسازید، توکن را وارد کنید و Chat ID را با گزینه خودکار پیدا کنید.
- دکمه Test را بزنید تا پیام آزمایشی برسد و اعلان را برای همه مانیتورها فعال کنید.
برای هشدارهای حیاتی یک کانال دوم، مثل ایمیل یا پیامک از طریق Webhook، هم تعریف کنید تا با قطع یک کانال، هشدار گم نشود.
گام ۵: صفحه وضعیت
از بخش Status Pages یک صفحه بسازید، مانیتورهای عمومی را به آن اضافه کنید و در صورت تمایل دامنه اختصاصی برایش تعیین کنید. در زمان قطعی، با بخش Incident پیامی برای مشتریان منتشر کنید. صفحه وضعیت شفاف، حجم تیکتها و تماسها در زمان حادثه را بهشدت کاهش میدهد. فقط سرویسهایی را نمایش دهید که برای مشتریان معنی دارند و جزئیات زیرساخت داخلی را منتشر نکنید.
مانیتور Push برای بکاپ و کرونجابها
برخی چیزها را نمیتوان از بیرون بررسی کرد؛ مثل اینکه بکاپ شبانه واقعاً اجرا شده یا نه. در مانیتور Push، Uptime Kuma یک آدرس اختصاصی میسازد و انتظار دارد در بازه مشخص فراخوانی شود. در انتهای اسکریپت بکاپ:
/opt/scripts/backup.sh && curl -fsS -m 10 "https://status.example.com/api/push/YOUR_PUSH_TOKEN?status=up&msg=OK"
اگر بکاپ شکست بخورد یا اجرا نشود، فراخوانی انجام نمیشود و پس از پایان بازه، هشدار میرسد. بازه را کمی بیشتر از فاصله اجرای کرون (مثلاً ۲۵ ساعت برای بکاپ روزانه) بگذارید. تنظیم کرون در cron و systemd timers.
امنیت، بکاپ و بهروزرسانی
- احراز هویت دومرحلهای را از بخش Settings › Security فعال کنید.
- پوشه
dataشامل دیتابیس تنظیمات است؛ از آن بکاپ بگیرید. - برای بهروزرسانی:
docker compose pull && docker compose up -d. - خود سرور Uptime Kuma را هم امن کنید؛ چکلیست در تنظیمات امنیتی ضروری VPS.
سوالات متداول
Uptime Kuma منابع سرور را هم پایش میکند؟
نه بهطور کامل؛ تمرکز آن بر دسترسپذیری است. برای CPU، RAM و دیسک از ابزارهایی مثل Zabbix یا Netdata استفاده کنید.
آیا میتوانم Uptime Kuma را روی همان سرور سایت نصب کنم؟
از نظر فنی بله، اما توصیه نمیشود. با قطعی آن سرور، مانیتورینگ هم از کار میافتد و هشداری ارسال نمیشود.
چرا هشدار کاذب میگیرم؟
تعداد Retries را افزایش دهید، Timeout را واقعی تنظیم کنید و مطمئن شوید فایروال یا WAF سایت، درخواستهای Uptime Kuma را مسدود نمیکند.
آیا Uptime Kuma چند کاربر را پشتیبانی میکند؟
نسخههای فعلی برای یک مدیر طراحی شدهاند. برای اشتراکگذاری وضعیت با دیگران از صفحه وضعیت عمومی استفاده کنید.
مانیتورینگ کامل زیرساخت
Uptime Kuma را روی یک سرور مجازی کوچک تراست هاست اجرا کنید، یا پایش ۲۴ ساعته منابع و سرویسها را به خدمات مانیتورینگ تراست هاست بسپارید.