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

ساخت سامانه اعلان اختصاصی با ntfy؛ دریافت هشدار بکاپ و قطعی سرور روی VPS

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

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

اگر چند سرور مجازی، وب‌سایت یا سرویس مختلف را مدیریت می‌کنید، یکی از مشکلات رایج این است که متوجه خطاها و اتفاقات مهم سرور نشوید. ممکن است بکاپ با خطا متوقف شود، یک سرویس از کار بیفتد، فضای دیسک پر شود یا حتی سرور برای مدتی از دسترس خارج شود. در چنین شرایطی، ابزارهای اعلان و Notification می‌توانند نجات‌بخش باشند. یکی از گزینه‌های سبک، متن‌باز و کاملاً قابل استفاده در محیط‌های Self-Hosted، ابزار ntfy است [citation:6].

ntfy (که «notify» تلفظ می‌شود) یک سرویس Push Notification مبتنی بر HTTP است که به شما اجازه می‌دهد از طریق یک درخواست ساده HTTP، اعلان‌ها را به موبایل، مرورگر یا دسکتاپ خود ارسال کنید [citation:3]. در این آموزش، ntfy را روی یک VPS لینوکس نصب می‌کنیم و چند سناریوی کاربردی مانند ارسال اعلان موفقیت یا خطای بکاپ، اطلاع از خاموش شدن سرویس و هشدار مصرف فضای دیسک را پیاده‌سازی خواهیم کرد.

ntfy چیست و چرا برای مدیریت VPS مناسب است؟

ntfy یک سرویس Notification مبتنی بر مدل Publish/Subscribe است. ساختار کلی آن بسیار ساده است:

اسکریپت سرور ← درخواست HTTP ← ntfy ← اعلان روی موبایل / مرورگر

برای مثال، فرض کنید روی VPS شما یک اسکریپت بکاپ اجرا می‌شود. در صورت موفقیت، پیام Backup completed successfully و در صورت شکست، پیام Backup failed! برای یک Topic مشخص ارسال می‌شود. سپس گوشی شما اعلان مربوط به همان Topic را دریافت می‌کند [citation:16].

یکی از مزیت‌های مهم ntfy این است که برای ارسال اعلان نیازی نیست برای هر اسکریپت یک سیستم پیچیده بسازید. با یک درخواست HTTP ساده می‌توان پیام ارسال کرد [citation:3]:

curl -d “Backup completed successfully” https://ntfy.example.com/server-backup

در این مثال، server-backup نام Topic است و متن بعد از -d پیام اعلان محسوب می‌شود. این ویژگی باعث می‌شود ntfy به‌سادگی با Bash، Cron، Docker و اسکریپت‌های بکاپ ترکیب شود [citation:2].

⚠️ نکته مهم امنیتی

ntfy به‌صورت پیش‌فرض باز است. هر کسی که URL سرور شما را بداند و نام Topic را حدس بزند، می‌تواند پیام منتشر کند یا به پیام‌ها دسترسی داشته باشد. مستندات رسمی پروژه، نام Topic را به «رمز عبور» تشبیه می‌کند. برای استفاده واقعی، حتماً Authentication را فعال کنید [citation:10][citation:16].

کاربردهای عملی ntfy در مدیریت سرور

می‌توانید از ntfy برای سناریوهای مختلفی استفاده کنید که در ادامه به مهم‌ترین آن‌ها اشاره می‌کنیم:

🔹 اعلان موفقیت یا شکست بکاپ: بعد از پایان Restic یا هر ابزار بکاپ دیگری، نتیجه را به ntfy ارسال کنید.

🔹 هشدار فضای دیسک: اگر فضای دیسک از یک حد مشخص (مثلاً ۹۰٪) عبور کرد، اعلان دریافت کنید.

🔹 اطلاع از Down شدن سرویس: اگر Nginx، MySQL یا Docker متوقف شد، پیام هشدار بفرستید.

🔹 اعلان Restart شدن سرور: بعد از Boot شدن VPS، یک Notification ارسال کنید تا از آنلاین شدن سرور مطلع شوید.

🔹 هشدار مصرف منابع: در صورت عبور CPU یا RAM از یک مقدار مشخص، اعلان دریافت کنید [citation:11].

پیش‌نیازهای نصب ntfy روی VPS

برای این آموزش به یک VPS لینوکسی با یکی از توزیع‌های زیر نیاز دارید:

🔹 Ubuntu 22.04 یا Ubuntu 24.04

🔹 Debian 12 یا Debian 13

🔹 Rocky Linux یا AlmaLinux

همچنین به Docker و Docker Compose نیاز داریم تا مدیریت ntfy ساده‌تر باشد [citation:7]. اگر می‌خواهید اعلان‌ها را از خارج از شبکه محلی خود دریافت کنید، یک دامنه و تنظیمات DNS نیز لازم است [citation:16].

مرحله اول؛ اتصال به VPS و نصب Docker

ابتدا با SSH به سرور متصل شوید:

ssh root@SERVER_IP

سپس مخازن سیستم را به‌روزرسانی کرده و Docker را نصب کنید:

apt update
apt upgrade -y
apt install docker.io docker-compose-plugin -y
systemctl enable –now docker

بررسی کنید که Docker به‌درستی نصب شده است:

docker –version

مرحله دوم؛ ساخت پوشه و فایل Docker Compose

یک پوشه برای پروژه ntfy ایجاد کنید:

mkdir -p /opt/ntfy
cd /opt/ntfy

فایل Compose را ایجاد کنید:

nano docker-compose.yml

محتوای زیر را داخل آن قرار دهید:

services:
ntfy:
image: binwiederhier/ntfy:latest
container_name: ntfy
command: serve
environment:
– TZ=Asia/Tehran
volumes:
– /opt/ntfy/cache:/var/cache/ntfy
– /opt/ntfy/etc:/etc/ntfy
ports:
– “8080:80”
restart: unless-stopped

سپس کانتینر را اجرا کنید:

docker compose up -d
docker ps

اگر همه چیز درست باشد، کانتینری با نام ntfy مشاهده خواهید کرد [citation:7].

مرحله سوم؛ تست ntfy و ارسال اولین اعلان

حالا IP سرور را همراه با پورت 8080 در مرورگر باز کنید. اگر صفحه ntfy نمایش داده شد، سرویس با موفقیت اجرا شده است. حالا اولین اعلان را ارسال کنید:

curl -d “سلام! این اولین اعلان سرور من است.” http://SERVER_IP:8080/test

در اینجا test نام Topic است. برای Topic بکاپ نیز می‌توانید از نامی مانند backup استفاده کنید:

curl -d “Backup completed successfully” http://SERVER_IP:8080/backup

بهتر است برای هر نوع اعلان Topic جداگانه داشته باشید. مثلاً backup، server، disk و security. در این صورت مدیریت اعلان‌ها ساده‌تر می‌شود [citation:3].

مرحله چهارم؛ دریافت اعلان روی موبایل

اپلیکیشن ntfy را روی گوشی خود نصب کنید. این اپلیکیشن برای Android از F-Droid یا Google Play و برای iOS از App Store قابل دانلود است [citation:9]. پس از اجرای برنامه، Topic موردنظر خود را Subscribe کنید. از این پس هر پیامی که به این Topic ارسال شود، در کلاینت شما نمایش داده خواهد شد [citation:3].

مدیریت حرفه‌ای سرور با ایرانیکاسرور

برای اجرای ntfy و سایر سرویس‌های Self-Hosted، به یک سرور مجازی با منابع اختصاصی و آپ‌تایم پایدار نیاز دارید. ایرانیکاسرور با پهنای باند نامحدود، دیسک NVMe و پشتیبانی ۲۴/۷ همراه شماست.

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

مرحله پنجم؛ تنظیم HTTPS با Reverse Proxy

استفاده از IP و پورت برای محیط آزمایشی مناسب است، اما برای استفاده دائمی بهتر است ntfy را روی یک دامنه قرار دهید. برای این کار معمولاً از یک Reverse Proxy مانند Nginx یا Caddy استفاده می‌شود [citation:16].

ساختار پیشنهادی به این شکل است:

Internet → notify.example.com → Nginx / Caddy → ntfy container → Port 8080

در این حالت کاربران با HTTPS به دامنه متصل می‌شوند و Reverse Proxy درخواست‌ها را به کانتینر ntfy منتقل می‌کند [citation:8].

ارسال اعلان بکاپ با Bash

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

nano /usr/local/bin/backup-notify.sh

محتویات اسکریپت:

#!/bin/bash

NTFY_URL=”https://notify.example.com/backup”

if /usr/local/bin/my-backup-script; then
curl -d “Backup completed successfully on $(hostname)” “$NTFY_URL”
else
curl -d “Backup FAILED on $(hostname)” “$NTFY_URL”
fi

مجوز اجرا بدهید و تست کنید:

chmod +x /usr/local/bin/backup-notify.sh
/usr/local/bin/backup-notify.sh

اگر Backup موفق باشد، پیام موفقیت و اگر شکست بخورد، پیام خطا ارسال خواهد شد. اگر از Restic استفاده می‌کنید، می‌توانید مستقیماً نتیجه اجرای آن را بررسی کنید [citation:16].

ارسال اعلان با Cron

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

crontab -e

مثلاً برای اجرای روزانه ساعت ۳ صبح:

0 3 * * * /usr/local/bin/backup-notify.sh

ارسال هشدار پر شدن دیسک

پر شدن فضای دیسک یکی از مشکلات رایج سرورهای لینوکسی است. می‌توانید یک اسکریپت ساده برای بررسی فضای دیسک ایجاد کنید:

#!/bin/bash

NTFY_URL=”https://notify.example.com/server”

USAGE=$(df -P / | awk ‘NR==2 {gsub(“%”,””); print $5}’)

if [ “$USAGE” -ge 90 ]; then
curl -d “WARNING: Disk usage is ${USAGE}% on $(hostname)” “$NTFY_URL”
fi

سپس برای اجرای دوره‌ای هر ۱۰ دقیقه، در crontab اضافه کنید:

*/10 * * * * /usr/local/bin/disk-alert.sh

اعلان Down شدن یک سرویس

می‌توانید بررسی کنید که سرویس موردنظر فعال است یا خیر. برای مثال Nginx:

#!/bin/bash

NTFY_URL=”https://notify.example.com/server”

if ! systemctl is-active –quiet nginx; then
curl -d “ALERT: Nginx is DOWN on $(hostname)” “$NTFY_URL”
fi

این روش برای سرویس‌هایی مانند apache2، mysql، docker و redis نیز قابل استفاده است [citation:11].

ارسال اعلان با عنوان و اولویت

ntfy قابلیت ارسال Headerهای مختلف برای پیام را نیز دارد. مثلاً برای اعلان‌های مهم می‌توانید Priority بالاتری تعریف کنید:

curl \
-H “Title: Backup Alert” \
-H “Priority: high” \
-d “Backup failed on server-01” \
https://notify.example.com/backup

در این حالت می‌توانید برای خطاهای مهم Priority بالاتری تعریف کنید: Backup موفق → default، هشدار دیسک → high، قطعی سرویس → urgent [citation:3].

🔧 مشکل دارید؟ ما کمکتان می‌کنیم

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

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

جلوگیری از ارسال اعلان‌های تکراری

یکی از مشکلات سیستم‌های مانیتورینگ ساده این است که اگر یک سرویس Down باشد، هر بار اجرای Cron یک اعلان جدید ارسال می‌کند. مثلاً اگر Cron هر دقیقه اجرا شود، ممکن است ۶۰ اعلان در یک ساعت دریافت کنید. برای جلوگیری از این مشکل بهتر است وضعیت قبلی را ذخیره کنید [citation:16].

ساختار منطقی به این شکل است:

RUN 1 → Service DOWN → Send notification
RUN 2 → Service DOWN → No notification
RUN 3 → Service DOWN → No notification
RUN 4 → Service UP → Send recovery notification

به این ترتیب فقط تغییر وضعیت باعث ارسال اعلان می‌شود. همچنین بهتر است برای هشدارها Threshold مناسبی انتخاب کنید.

ntfy در کنار Docker و Backrest

اگر سرویس‌های شما داخل Docker اجرا می‌شوند، می‌توانید اسکریپت‌های Health Check یا مانیتورینگ را به ntfy متصل کنید. برای سرورهایی که چندین Container دارند، این روش می‌تواند دید بهتری نسبت به وضعیت سرویس‌ها ایجاد کند [citation:7].

ترکیب ntfy با ابزارهایی مانند Restic و Backrest نیز یک سیستم اعلان کاربردی ایجاد می‌کند. در این ساختار، حتی اگر Backup با خطا متوقف شود، پیام هشدار روی موبایل شما ظاهر می‌شود.

مشکلات رایج ntfy و راه‌حل آن‌ها

مشکل اول؛ اعلان ارسال نمی‌شود: ابتدا اتصال شبکه را بررسی کنید و سپس لاگ کانتینر را ببینید.

docker logs ntfy

مشکل دوم؛ کانتینر اجرا نمی‌شود: وضعیت کانتینر را بررسی کنید.

docker ps -a
docker logs ntfy

مشکل سوم؛ دامنه باز نمی‌شود: اگر ntfy با IP و پورت کار می‌کند اما دامنه باز نمی‌شود، Reverse Proxy و DNS را بررسی کنید. باید مطمئن شوید رکورد DNS دامنه به IP VPS اشاره می‌کند [citation:16].

مشکل چهارم؛ HTTPS کار نمی‌کند: DNS دامنه، پورت 80 و 443، تنظیمات Reverse Proxy و گواهی SSL را بررسی کنید [citation:8].

آیا ntfy جایگزین سیستم مانیتورینگ است؟

ntfy بیشتر یک سامانه ارسال اعلان است و به‌تنهایی ابزار کاملی برای Monitoring محسوب نمی‌شود. ابزارهای مانیتورینگ تخصصی می‌توانند مواردی مانند CPU، RAM، Disk، Network، Uptime و وضعیت سرویس‌ها را به‌صورت مستمر جمع‌آوری و نمایش دهند. ntfy در این معماری بیشتر وظیفه ارسال Alert را بر عهده دارد [citation:11].

ترکیب زیر می‌تواند کاربردی باشد:

Monitoring → Detect Problem → ntfy → Mobile Notification

نکات امنیتی مهم

اگر ntfy را روی اینترنت عمومی قرار می‌دهید، امنیت آن را جدی بگیرید. حتماً از HTTPS استفاده کنید و به‌جای http از https بهره ببرید. برای سیستم‌هایی که اطلاعات حساس دارند، Authentication را فعال کنید. Topicهای حساس مانند Backup، Database و Security را عمومی نکنید. Firewall را تنظیم کنید و فقط پورت‌های موردنیاز را باز نگه دارید. همچنین از Configuration ntfy نیز Backup تهیه کنید [citation:10][citation:16].

جمع‌بندی

ntfy یک راهکار سبک برای ساخت سامانه اعلان اختصاصی روی سرور است. به کمک آن می‌توانید پیام‌های مختلف را از VPS، اسکریپت‌ها، Cron و سرویس‌های Docker دریافت کرده و به موبایل یا سایر کلاینت‌ها ارسال کنید. یکی از کاربردهای مهم ntfy، ارسال نتیجه عملیات Backup است. با اتصال آن به ابزارهایی مانند Restic یا اسکریپت‌های بکاپ، می‌توانید در صورت موفقیت یا شکست Backup سریعاً مطلع شوید. برای مدیریت چند سرور مجازی نیز می‌توان یک ntfy مرکزی ایجاد کرد و اعلان‌های سرورهای مختلف را در Topicهای جداگانه دریافت کرد. در نهایت، ntfy را بهتر است به‌عنوان لایه ارسال اعلان در کنار سیستم‌های مانیتورینگ و بکاپ در نظر بگیرید.

راه‌اندازی سامانه اعلان روی VPS ایران

اگر برای اجرای ntfy، ابزارهای مانیتورینگ، بکاپ یا سایر سرویس‌های Self-Hosted به یک سرور مجازی پایدار نیاز دارید، ایرانیکاسرور با منابع اختصاصی CPU و RAM، دیسک NVMe و پهنای باند نامحدود همراه شماست.

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

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

Amir Jabbari

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

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

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

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

دیدگاه‌ها

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

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

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

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