مجله ایرانیکاسرور آموزش سرور، هاست، وردپرس و شبکه پنل کاربری

مانیتورینگ API و ساخت صفحه وضعیت با Gatus روی سرور مجازی ایران (راهنمای کامل ۲۰۲۶)

وقتی یک وب‌سایت یا API را روی سرور مجازی ایران راه‌اندازی می‌کنید، فقط روشن بودن سرور به معنی سالم بودن سرویس نیست. ممکن است VPS در دسترس باشد اما وب‌سایت با خطای 500 پاسخ…

Amir Jabbari 📅 2 مهر 1405 ⏱ 10 دقیقه مطالعه 👁 0 بازدید 💬 0 دیدگاه

وقتی یک وب‌سایت یا API را روی سرور مجازی ایران راه‌اندازی می‌کنید، فقط روشن بودن سرور به معنی سالم بودن سرویس نیست. ممکن است VPS در دسترس باشد اما وب‌سایت با خطای 500 پاسخ دهد، API از کار افتاده باشد، پورت دیتابیس بسته شده باشد یا زمان پاسخ‌گویی به شکل محسوسی افزایش پیدا کند.

برای جلوگیری از این مشکلات می‌توان از ابزارهای مانیتورینگ استفاده کرد. یکی از ابزارهای سبک و کاربردی برای این کار Gatus است؛ یک ابزار متن‌باز که می‌توان آن را روی سرور شخصی نصب کرد و علاوه بر بررسی وضعیت سرویس‌ها، یک صفحه وضعیت (Status Page) حرفه‌ای نیز ساخت.

📌 در این راهنما یاد می‌گیرید:

🔹 نصب Gatus روی سرور مجازی لینوکس با Docker

🔹 مانیتور کردن API با بررسی JSON و زمان پاسخ

🔹 مانیتور کردن پورت‌های TCP مثل MySQL و Redis

🔹 ساخت Status Page و اتصال دامنه

🔹 رفع خطاهای رایج و نکات امنیتی

Gatus چیست و چه تفاوتی با سایر ابزارها دارد؟

Gatus یک ابزار مانیتورینگ Self-Hosted است که برای بررسی سلامت سرویس‌ها طراحی شده. برخلاف Uptime Kuma که تنظیمات را در دیتابیس ذخیره می‌کند، Gatus کاملاً Config-as-Code است؛ یعنی تمام تنظیمات در یک فایل YAML تعریف می‌شوند . این یعنی می‌توانید فایل کانفیگ را در Git نگه دارید، بین سرورها منتقل کنید و نسخه‌بندی کنید.

Gatus با یک باینری Go ساخته شده و مصرف منابع آن بسیار پایین است — معمولاً بین ۱۰ تا ۳۰ مگابایت RAM . همین ویژگی آن را برای اجرا روی سرور مجازی ایران با منابع محدود ایده‌آل می‌کند.

برخی قابلیت‌های کلیدی Gatus:

🔹 پشتیبانی از پروتکل‌های HTTP، TCP، ICMP، DNS، SSH و TLS

🔹 تعریف شرط برای پاسخ API با JSONPath (مثل بررسی status: ok در بدنه پاسخ)

🔹 بررسی زمان پاسخ و انقضای گواهی SSL

🔹 ارسال اعلان به Telegram، Slack، Discord، Email و Webhook

🔹 Status Page داخلی با قابلیت گروه‌بندی سرویس‌ها

چرا Gatus را روی سرور مجازی ایران نصب کنیم؟

اگر سرویس اصلی شما روی سرور مجازی ایران میزبانی می‌شود، اجرای مانیتورینگ روی همان زیرساخت مزایای مشخصی دارد:

🔹 پینگ پایین‌تر برای بررسی سرویس‌های داخلی مثل درگاه پرداخت و پیامک

🔹 عدم وابستگی به سرویس‌های مانیتورینگ خارجی که ممکن است در دسترس نباشند

🔹 کنترل کامل روی داده‌های مانیتورینگ و تاریخچه سرویس‌ها

🔹 هزینه ثابت — یک VPS با ۵۱۲ مگابایت رم برای مانیتور کردن ده‌ها Endpoint کافی است

⚠️ نکته مهم: اگر Gatus و سرویس اصلی روی یک سرور باشند، خرابی کامل VPS باعث از دسترس خارج شدن هر دو می‌شود. برای سرویس‌های حساس، بهتر است یک سرور مجازی فرانسه یا سرور مجازی آلمان ارزان قیمت هم به عنوان مانیتور مستقل تهیه کنید تا از نقطه‌ای خارج از زیرساخت اصلی، وضعیت سرویس را بررسی کند .

پیش‌نیازهای نصب Gatus

مورد حداقل پیشنهادی
سیستم‌عامل Ubuntu 22.04 / 24.04 یا Debian 12
CPU ۱ هسته
RAM ۵۱۲ مگابایت
فضای دیسک ۵ گیگابایت
Docker نسخه ۲۰ یا بالاتر
دامنه (اختیاری) برای Status Page عمومی

نصب Docker روی سرور مجازی

اولین قدم، نصب Docker روی سرور است. اگر از قبل Docker دارید، از این مرحله عبور کنید.

# نصب Docker با اسکریپت رسمی
curl -fsSL https://get.docker.com | sh

# بررسی وضعیت سرویس
systemctl status docker

# بررسی نسخه
docker --version

اگر خروجی Active: active (running) مشاهده کردید، Docker با موفقیت نصب شده است.

ساخت اولین کانفیگ Gatus

ابتدا یک پوشه برای Gatus ایجاد کنید:

mkdir -p /opt/gatus
cd /opt/gatus
nano config.yaml

یک کانفیگ ساده برای شروع:

storage:
  type: sqlite
  path: /data/data.db

endpoints:
  - name: Website
    group: Web
    url: "https://example.com"
    interval: 30s
    conditions:
      - "[STATUS] == 200"
      - "[RESPONSE_TIME] < 2000"

  - name: API Health
    group: API
    url: "https://api.example.com/health"
    interval: 30s
    conditions:
      - "[STATUS] == 200"
      - "[BODY].status == ok"

در این کانفیگ، Gatus هر ۳۰ ثانیه وب‌سایت و API را بررسی می‌کند. برای API علاوه بر کد HTTP، محتوای JSON پاسخ نیز بررسی می‌شود .

اجرای Gatus با Docker

حالا کانتینر Gatus را اجرا کنید. توجه: پورت را فقط روی localhost باز کنید تا از بیرون مستقیماً در دسترس نباشد:

docker run -d \
  --name gatus \
  --restart unless-stopped \
  -p 127.0.0.1:8080:8080 \
  -v /opt/gatus/config.yaml:/config/config.yaml:ro \
  -v /opt/gatus/data:/data \
  twinproduction/gatus:latest

بررسی وضعیت کانتینر:

docker ps --filter name=gatus
docker logs gatus

حالا Gatus روی آدرس http://127.0.0.1:8080 در دسترس است. برای دسترسی از بیرون، باید آن را پشت یک Reverse Proxy قرار دهید.

مانیتور کردن API با بررسی JSON

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

{
  "status": "ok",
  "version": "2.1.0",
  "database": "connected"
}

می‌توانید Gatus را طوری تنظیم کنید که هر سه مورد را بررسی کند:

endpoints:
  - name: Main API
    group: API
    url: "https://api.example.com/health"
    interval: 30s
    conditions:
      - "[STATUS] == 200"
      - "[BODY].status == ok"
      - "[BODY].database == connected"
      - "[RESPONSE_TIME] < 1500"

این روش نسبت به بررسی ساده HTTP Status، اطلاعات دقیق‌تری درباره سلامت واقعی API ارائه می‌دهد. اگر دیتابیس قطع شود ولی API همچنان کد ۲۰۰ برگرداند، Gatus وضعیت را نامطلوب تشخیص می‌دهد .

مانیتور کردن پورت TCP (MySQL، Redis، SSH)

Gatus فقط برای HTTP نیست. می‌توانید پورت‌های TCP سرویس‌های داخلی را نیز بررسی کنید :

endpoints:
  - name: MySQL
    group: Database
    url: "tcp://127.0.0.1:3306"
    interval: 30s
    conditions:
      - "[CONNECTED] == true"

  - name: Redis
    group: Database
    url: "tcp://127.0.0.1:6379"
    interval: 30s
    conditions:
      - "[CONNECTED] == true"

  - name: SSH
    group: Infrastructure
    url: "tcp://127.0.0.1:22"
    interval: 60s
    conditions:
      - "[CONNECTED] == true"

⚠️ نکته: برای مانیتور کردن سرویس‌هایی مثل MySQL، از یک کاربر با دسترسی محدود استفاده کنید. Gatus فقط اتصال TCP را بررسی می‌کند و نیازی به احراز هویت ندارد.

🔹 سرور مجازی ایران با منابع اختصاصی

برای اجرای Gatus و مانیتورینگ سرویس‌های خود به یک VPS پایدار با RAM و CPU اختصاصی نیاز دارید. ایرانیکاسرور سرورهای مجازی ایران با دیسک NVMe، پهنای باند نامحدود و پشتیبانی ۲۴/۷ ارائه می‌دهد. همین حالا سرور مناسب خود را انتخاب کنید.

📞 تماس با پشتیبانی: 021-91302460 | ایرانیکاسرور

ساخت Status Page و اتصال دامنه

Gatus به صورت پیش‌فرض یک صفحه وضعیت ساده نمایش می‌دهد. برای استفاده عمومی، بهتر است یک زیردامنه مثل status.example.com ایجاد کنید و Gatus را پشت Nginx قرار دهید.

ابتدا در DNS دامنه یک رکورد A ایجاد کنید:

status.example.com  →  SERVER_IP

سپس یک Server Block برای Nginx ایجاد کنید:

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

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

بررسی و Reload:

nginx -t
systemctl reload nginx

برای فعال کردن HTTPS:

apt install certbot python3-certbot-nginx -y
certbot --nginx -d status.example.com

حالا صفحه وضعیت شما روی https://status.example.com در دسترس کاربران خواهد بود.

ارسال اعلان هنگام خرابی سرویس

مانیتورینگ زمانی ارزش واقعی دارد که هنگام خرابی به شما اطلاع دهد. Gatus از کانال‌های متعددی پشتیبانی می‌کند :

کانال اعلان نوع
Telegram پیشنهادی برای ایران
Discord مناسب تیم‌های فنی
Slack مناسب کسب‌وکارها
Webhook اتصال به سیستم دلخواه
Email (SMTP) مکمل یا پشتیبان

نمونه کانفیگ Telegram:

alerting:
  telegram:
    token: "YOUR_BOT_TOKEN"
    id: "YOUR_CHAT_ID"

endpoints:
  - name: Website
    url: "https://example.com"
    interval: 30s
    conditions:
      - "[STATUS] == 200"
    alerts:
      - type: telegram
        description: "سایت از دسترس خارج شد!"
        send-on-resolved: true

با send-on-resolved: true، وقتی سرویس دوباره سالم شد نیز یک پیام دریافت می‌کنید .

خطاهای رایج و نحوه رفع آن‌ها

خطای YAML در config.yaml

رایج‌ترین مشکل Gatus، اشتباه در فاصله‌گذاری YAML است. اگر سرویس بالا نیامد:

docker logs gatus

بعد از هر تغییر در کانفیگ:

docker restart gatus

API سالم است ولی Gatus آن را Down نشان می‌دهد

🔹 آدرس اشتباه: URL را با curl تست کنید

🔹 کد HTTP متفاوت: API ممکن است ۲۰۱ یا ۲۰۴ برگرداند، نه ۲۰۰

🔹 Firewall: ممکن است درخواست‌های Gatus مسدود شوند

🔹 Cloudflare/WAF: ممکن است به عنوان ربات شناسایی شود

🔹 Timeout: اگر API کند باشد، شرط RESPONSE_TIME را افزایش دهید

پورت 8080 باز نمی‌شود

# بررسی listen بودن پورت
ss -lntp | grep 8080

# بررسی وضعیت فایروال
ufw status

⚠️ توصیه امنیتی: پورت ۸۰۸۰ را مستقیماً روی اینترنت باز نکنید. Gatus را پشت Nginx قرار دهید و فقط پورت‌های ۸۰ و ۴۴۳ را باز نگه دارید.

ساختار پیشنهادی برای پروژه‌های فروشگاهی

اگر یک فروشگاه اینترنتی روی سرور مجازی ایران دارید، می‌توانید ساختار زیر را پیاده کنید:

endpoints:
  - name: Website
    group: Website
    url: "https://example.com"
    interval: 30s
    conditions:
      - "[STATUS] == 200"

  - name: API
    group: API
    url: "https://example.com/api/health"
    interval: 30s
    conditions:
      - "[STATUS] == 200"
      - "[BODY].status == ok"

  - name: Admin Panel
    group: Admin
    url: "https://example.com/admin"
    interval: 60s
    conditions:
      - "[STATUS] == 200"

  - name: MySQL
    group: Database
    url: "tcp://127.0.0.1:3306"
    interval: 30s
    conditions:
      - "[CONNECTED] == true"

  - name: Redis
    group: Database
    url: "tcp://127.0.0.1:6379"
    interval: 30s
    conditions:
      - "[CONNECTED] == true"

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

🔹 هاست وردپرس و لینوکس با پشتیبانی تخصصی

اگر به دنبال میزبانی پایدار برای وب‌سایت خود هستید، ایرانیکاسرور هاست وردپرس و هاست لینوکس ایران با منابع تضمین‌شده و آپ‌تایم ۹۹.۹٪ ارائه می‌دهد. زیرساخت ما به گونه‌ای طراحی شده که Gatus و ابزارهای مانیتورینگ بدون تداخل با منابع اصلی اجرا شوند.

📞 تماس با پشتیبانی: 021-91302460 | ایرانیکاسرور

نکات امنیتی مهم برای Gatus

⚠️ پورت 8080 را عمومی نکنید. به جای -p 8080:8080 از -p 127.0.0.1:8080:8080 استفاده کنید تا فقط از داخل سرور در دسترس باشد.

⚠️ از Basic Auth استفاده کنید. Gatus از احراز هویت HTTP Basic پشتیبانی می‌کند .

⚠️ فقط پورت‌های ۸۰ و ۴۴۳ را باز نگه دارید. بقیه ترافیک را از طریق Nginx یا Caddy هدایت کنید.

برای محافظت از Status Page، می‌توانید بخش security را به کانفیگ اضافه کنید. همچنین اگر می‌خواهید از API خود Gatus استفاده کنید، از Status Page Token به جای API Key استفاده کنید .

جدول مقایسه Gatus با سایر ابزارهای مانیتورینگ

ویژگی Gatus Uptime Kuma OpenStatus
Config-as-Code ✅ YAML کامل ❌ فقط UI ⚠️ محدود
مصرف RAM ۱۰-۳۰ MB ۵۰-۱۰۰ MB ۵۰-۱۰۰ MB
بررسی JSON ✅ JSONPath ⚠️ محدود ✅ دارد
پشتیبانی TCP ✅ دارد ✅ دارد ✅ دارد
Multi-User ❌ تک‌کاربره ❌ تک‌کاربره ✅ نقش‌محور
مناسب VPS ضعیف ✅ ایده‌آل ✅ خوب ⚠️ سنگین‌تر

نتیجه: اگر به دنبال یک ابزار سبک با کانفیگ YAML و قابلیت بررسی دقیق API هستید، Gatus انتخاب بهتری است .

🔹 مشکل در نصب یا کانفیگ Gatus دارید؟

تیم فنی ایرانیکاسرور آماده کمک به شماست. اگر در نصب Gatus، تنظیمات کانفیگ، اتصال دامنه یا راه‌اندازی Nginx به مشکل خورده‌اید، درخواست خود را ثبت کنید. کارشناسان ما در سریع‌ترین زمان بررسی می‌کنند.

📞 تماس با پشتیبانی: 021-91302460 | ایرانیکاسرور

جمع‌بندی

Gatus یک ابزار مانیتورینگ سبک، متن‌باز و Config-as-Code است که به شما امکان می‌دهد وضعیت وب‌سایت، API، پورت‌ها و سرویس‌های مختلف را روی سرور مجازی ایران بررسی کنید و یک Status Page حرفه‌ای بسازید.

با ترکیب Docker، Nginx و HTTPS می‌توانید صفحه وضعیت اختصاصی خود را روی دامنه‌ای مثل status.example.com راه‌اندازی کنید و در صورت خرابی سرویس، از طریق Telegram یا Webhook مطلع شوید.

مهم‌ترین مزیت Gatus نسبت به سایر ابزارها، مصرف بسیار پایین منابع و قابلیت بررسی دقیق پاسخ API با JSONPath است. اگر سرویس‌های متعددی روی یک VPS دارید، با یک فایل YAML می‌توانید همه آن‌ها را مدیریت و مانیتور کنید.

برای مطالعه بیشتر می‌توانید به مستندات رسمی Gatus مراجعه کنید.

این آموزش برایت مفید بود؟ می‌توانی لینک آن را ذخیره یا برای دیگران ارسال کنی.

Amir Jabbari

نویسنده مجله ایرانیکاسرور؛ منتشرکننده آموزش‌ها و راهنماهای کاربردی در حوزه هاست، سرور، وردپرس و شبکه.

برای اجرای آموزش به زیرساخت نیاز داری؟

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

ایرانیکاسرور
گفت‌وگو درباره آموزش

دیدگاه‌ها

0 دیدگاه برای این مطلب ثبت شده است.

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

دیدگاه یا سؤال خود را بنویسید

ایمیل شما منتشر نمی‌شود. فیلدهای ضروری مشخص شده‌اند.