راهاندازی ChangeDetection.io برای تشخیص تغییر صفحات سایت روی VPS
اگر مرتب یک صفحه وب را باز میکنید تا ببینید قیمت محصول عوض شده، موجودی برگشته، اطلاعیه جدیدی منتشر شده یا بخشی از سایت تغییر کرده است، میتوانید این کار را به یک سرور بسپارید. ChangeDetection.io یک ابزار متنباز برای پایش تغییرات صفحات وب است که روی سرور شخصی یا VPS اجرا میشود و در صورت مشاهده تغییر، میتواند برای شما اعلان ارسال کند.
در این آموزش ChangeDetection.io را روی VPS لینوکسی با Docker راهاندازی میکنیم، اولین صفحه را زیر نظر میگیریم، فاصله بررسی را تنظیم میکنیم، بخش مشخصی از صفحه را انتخاب میکنیم و روش کار با صفحات JavaScript، اعلانها و Reverse Proxy را توضیح میدهیم. این ابزار برای مانیتورینگ قیمت، موجودی کالا، اطلاعیهها، صفحات رقبا، تغییر اسناد، صفحات سازمانی و بسیاری از کارهای مشابه قابل استفاده است.
📌 نسخه بررسیشده: در زمان نگارش این مقاله، نسخه پایدار ChangeDetection.io 0.60.8 در مخزن رسمی پروژه منتشر شده است. اگر مقاله را مدت زیادی بعد میخوانید، پیش از نصب Release جدید را بررسی کنید.
ChangeDetection.io چیست؟
ChangeDetection.io یک Website Change Detection Server است. شما URL موردنظر را به سیستم میدهید و نرمافزار در بازههای زمانی مشخص صفحه را دریافت میکند. وقتی محتوای قابلبررسی نسبت به نسخه قبلی تغییر کند، تغییر در History ثبت میشود و در صورت تنظیم Notification، هشدار نیز ارسال خواهد شد.
تفاوت مهم این روش با بازکردن دستی سایت این است که VPS میتواند بهصورت مداوم وظیفه پایش را انجام دهد. بنابراین کامپیوتر شخصی شما لازم نیست روشن بماند.
| کاربرد | نمونه استفاده |
|---|---|
| تغییر قیمت | بررسی تغییر قیمت یک محصول یا سرویس |
| موجودی کالا | تشخیص بازگشت محصول به موجودی |
| اطلاعیه | پیگیری صفحه اطلاعیه سازمان یا شرکت |
| تغییر محتوا | تشخیص و مقایسه نسخه قبلی و جدید صفحه |
| رقبا | پیگیری صفحات عمومی قیمت، محصول یا خدمات رقبا |
| امنیت و مدیریت سایت | هشدار درباره تغییر غیرمنتظره در صفحات عمومی مهم |
چرا ChangeDetection.io را روی VPS نصب کنیم؟
اجرای ChangeDetection.io روی VPS باعث میشود سرویس پایش مستقل از لپتاپ یا کامپیوتر شما کار کند. VPS به اینترنت متصل است و نرمافزار میتواند طبق زمانبندی خود صفحات را بررسی کند.
اگر صفحات ایرانی را مانیتور میکنید، استفاده از سرور مجازی ایران در بعضی سناریوها میتواند از نظر مسیر شبکه و دسترسی به سرویسهای داخلی انتخاب منطقیتری باشد. برای صفحات خارجی نیز باید موقعیت سرور را براساس مقصد و محدودیتهای همان سایت انتخاب کنید.
پیشنیازهای نصب ChangeDetection.io
سادهترین روش برای راهاندازی پایدار سرویس روی Linux VPS استفاده از Docker است. در این آموزش فرض میکنیم Ubuntu Server و Docker روی سرور نصب شدهاند.
ابتدا نصب بودن Docker را بررسی کنید:
docker --version docker compose version
اگر نسخه هر دو ابزار نمایش داده شد، سرور برای ادامه کار آماده است.
روش اول؛ نصب سریع ChangeDetection.io با Docker
پروژه رسمی یک دستور ساده برای اجرای کانتینر ارائه میکند. در این روش رابط وب فقط روی localhost سرور Listen میکند:
docker run -d \ --restart always \ -p "127.0.0.1:5000:5000" \ -v datastore-volume:/datastore \ --name changedetection.io \ dgtlmoon/changedetection.io
این شیوه از بازکردن مستقیم پورت 5000 روی همه Interfaceهای سرور جلوگیری میکند و برای سناریویی که قرار است Nginx جلوی برنامه قرار بگیرد مناسب است.
وضعیت کانتینر را بررسی کنید:
docker ps
برای مشاهده لاگ نیز میتوانید از دستور زیر استفاده کنید:
docker logs changedetection.io --tail 100
⚠️ نکته: اگر پورت را فقط روی 127.0.0.1 Bind کنید، واردکردن IP سرور بههمراه پورت 5000 در مرورگر کامپیوتر شما کار نخواهد کرد. این رفتار عمدی است؛ در محیط عملیاتی بهتر است Nginx و HTTPS را جلوی برنامه قرار دهید.
روش دوم؛ نصب با Docker Compose
برای مدیریت راحتتر سرویس میتوانید از Docker Compose استفاده کنید. یک پوشه برای پروژه بسازید:
mkdir -p ~/changedetection cd ~/changedetection nano compose.yml
برای نصب پایه میتوانید ساختاری مانند نمونه زیر داشته باشید:
services:
changedetection:
image: dgtlmoon/changedetection.io:latest
container_name: changedetection.io
restart: unless-stopped
ports:
- "127.0.0.1:5000:5000"
volumes:
- changedetection-data:/datastore
volumes:
changedetection-data:
سپس سرویس را اجرا کنید:
docker compose up -d
برای مشاهده وضعیت:
docker compose ps
اتصال دامنه و HTTPS به ChangeDetection.io
برای استفاده دائمی بهتر است یک زیردامنه مانند watch.example.com به VPS متصل کنید و Nginx را بهعنوان Reverse Proxy جلوی برنامه قرار دهید.
نمونه پایه Nginx:
server {
listen 80;
server_name watch.example.com;
location / {
proxy_pass http://127.0.0.1:5000;
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;
}
}
بعد از جایگزینکردن دامنه واقعی، کانفیگ را آزمایش کنید:
sudo nginx -t sudo systemctl reload nginx
پس از آن میتوانید برای زیردامنه SSL معتبر فعال کنید تا پنل از طریق HTTPS در دسترس باشد.
اضافه کردن اولین صفحه برای تشخیص تغییر
پس از ورود به داشبورد، URL صفحهای را که میخواهید مانیتور شود وارد کنید. برای شروع بهتر است صفحهای نسبتاً ثابت انتخاب کنید تا رفتار سیستم را بهوضوح ببینید.
بعد از اضافهشدن Watch، ChangeDetection.io نسخه صفحه را دریافت و ذخیره میکند. بررسیهای بعدی با نسخه قبلی مقایسه میشوند و در صورت وجود تغییر، وضعیت Watch تغییر خواهد کرد.
فاصله زمانی بررسی صفحات را چگونه انتخاب کنیم؟
کوتاهترین Interval همیشه بهترین انتخاب نیست. اگر صدها صفحه را هر چند ثانیه بررسی کنید، هم منابع VPS مصرف میشود و هم تعداد درخواستهای غیرضروری به سایت مقصد افزایش پیدا میکند.
| نوع صفحه | نمونه فاصله منطقی |
|---|---|
| موجودی حساس | چند دقیقه؛ با توجه به سیاست سایت مقصد |
| قیمت محصول | ۱۵ تا ۶۰ دقیقه |
| اطلاعیه | ۳۰ دقیقه تا چند ساعت |
| صفحه کمتغییر | چند ساعت تا روزانه |
✅ پیشنهاد: فاصله بررسی را متناسب با اهمیت تغییر تنظیم کنید و شرایط استفاده، محدودیت نرخ درخواست و robots/policy سایت مقصد را رعایت کنید. ChangeDetection.io نباید به ابزاری برای ایجاد بار غیرضروری روی سرویس دیگر تبدیل شود.
چطور فقط بخش مهم صفحه را مانیتور کنیم؟
یکی از دلایل هشدارهای بیفایده این است که کل صفحه مانیتور میشود. تاریخ، تبلیغات، پیشنهادهای تصادفی، تعداد بازدید یا عناصر پویا ممکن است مرتب تغییر کنند؛ در حالی که شما فقط قیمت یا یک متن مشخص را میخواهید.
ChangeDetection.io امکان فیلتر و انتخاب بخش موردنظر صفحه را دارد. با Visual Selector یا Selectorهای مناسب میتوانید ناحیه مهم را محدود کنید تا تغییر عناصر غیرمرتبط باعث اعلان نشود.
مثلاً در صفحه محصول بهجای کل HTML، فقط بخش قیمت و وضعیت موجودی را انتخاب کنید. این کار تعداد False Positiveها را بهشدت کاهش میدهد.
مانیتورینگ صفحات JavaScript
همه سایتها محتوای اصلی را داخل HTML اولیه تحویل نمیدهند. بعضی صفحات بعد از اجرای JavaScript قیمت، جدول، موجودی یا دادههای اصلی را نمایش میدهند. Fetcher ساده در چنین شرایطی ممکن است محتوای موردنظر را نبیند.
ChangeDetection.io امکان استفاده از Browser-based Fetcher را برای چنین صفحات پویایی دارد. در ساختار Docker Compose رسمی پروژه نیز Browser مربوط به این سناریو قابل راهاندازی است.
📌 تفاوت مهم: Fetch ساده HTTP سبکتر است. Browser Fetcher منابع بیشتری مصرف میکند، چون صفحه باید داخل مرورگر واقعی یا محیط مرورگر رندر شود. بنابراین برای همه Watchها بدون دلیل از Browser Mode استفاده نکنید.
Browser Steps چه کاربردی دارد؟
برخی صفحات قبل از نمایش اطلاعات موردنظر نیاز به تعامل دارند؛ برای مثال باید روی یک دکمه کلیک شود، بخشی از صفحه باز شود یا مرحلهای در رابط کاربری طی شود. قابلیت Browser Steps برای چنین سناریوهایی طراحی شده است.
برای صفحات عمومی میتوانید مراحل لازم را تعریف کنید و سپس محتوای حاصل را بررسی کنید. در استفاده از حسابهای کاربری، صفحات خصوصی و اطلاعات حساس، امنیت Credentialها و مجازبودن خودکارسازی را جدی بگیرید.
اعلان تغییرات را چگونه دریافت کنیم؟
تشخیص تغییر زمانی مفید است که مجبور نباشید خودتان داشبورد را مرتب باز کنید. پروژه از سیستم اعلان برای سرویسهای مختلف پشتیبانی میکند و در مستندات آن گزینههایی مانند Email، Discord، Slack، Telegram و Webhook ذکر شدهاند.
برای مثال میتوانید اعلان را به یک Webhook داخلی بفرستید و از آنجا فرآیند دیگری اجرا کنید؛ یا تغییرات مهم را به کانال اطلاعرسانی تیم منتقل کنید.
تشخیص تغییر هوشمند با LLM
نسخههای جدید ChangeDetection.io قابلیتهای مرتبط با LLM را نیز توسعه دادهاند. ایده اصلی این است که بهجای دریافت یک Diff خام و طولانی، مدل زبانی بتواند تغییر را خلاصه یا براساس هدف شما ارزیابی کند.
این قابلیت زمانی جذابتر میشود که صفحه تغییرات زیادی دارد اما فقط یک نوع تغییر برای شما مهم است. پروژه امکان اتصال به ارائهدهندگان مختلف مدل زبانی و سرویسهای محلی را مطرح کرده است؛ بنابراین در سناریوهای مناسب میتوان پردازش تغییر را هوشمندتر کرد.
با این حال، برای هشدارهای حیاتی نباید بدون آزمون به خروجی LLM تکیه کرد. ابتدا Filter و Condition قطعی را تا جای ممکن دقیق کنید و هوش مصنوعی را بهعنوان لایه تکمیلی در نظر بگیرید.
مثال عملی؛ تشخیص تغییر قیمت یک محصول
فرض کنید صفحه محصولی را دنبال میکنید و فقط قیمت آن برای شما مهم است.
🔹 URL محصول را به Watchlist اضافه کنید.
🔹 یک بار صفحه را Fetch کنید.
🔹 با Visual Selector فقط ناحیه قیمت را انتخاب کنید.
🔹 فاصله بررسی را متناسب با نیاز، مثلاً ۳۰ دقیقه، قرار دهید.
🔹 Notification موردنظر را تنظیم کنید.
🔹 یک تغییر آزمایشی یا صفحه مناسب برای تست اعلان انتخاب کنید.
از این مرحله به بعد لازم نیست صفحه را دستی باز کنید؛ سرور طبق Schedule آن را بررسی خواهد کرد.
مثال عملی؛ پایش اطلاعیههای یک سایت
سناریوی دیگر، صفحهای است که اطلاعیههای جدید در آن منتشر میشود. در این حالت بهتر است فقط Container مربوط به لیست اطلاعیهها انتخاب شود. Header، Footer، ساعت سایت و تبلیغات را از محدوده بررسی حذف کنید.
در صورت اضافهشدن اطلاعیه، ChangeDetection.io اختلاف نسخه جدید و قبلی را ثبت میکند و Notification ارسال میشود.
چرا ChangeDetection.io تغییرات اشتباه گزارش میکند؟
این مشکل معمولاً زمانی اتفاق میافتد که صفحه عناصر پویا دارد. تبلیغ، Timestamp، Session ID، شمارنده، پیشنهاد تصادفی و محتوای شخصیسازیشده میتوانند در هر Fetch تغییر کنند.
راهحل اصلی این است که محدوده مانیتورینگ را کوچکتر کنید و فقط محتوای مهم را انتخاب کنید. Filterهای Ignore نیز برای حذف بخشهای بیاهمیت کاربرد دارند.
خطای 403 هنگام بررسی سایت
اگر Watch با خطای 403 روبهرو شود، الزاماً مشکل از ChangeDetection.io نیست. سایت مقصد ممکن است درخواستهای خودکار، IP دیتاسنتر، Headerهای خاص یا رفتار مرورگر را محدود کرده باشد.
ابتدا همان URL را از سرور با ابزارهایی مانند curl بررسی کنید:
curl -I https://example.com/
اگر سایت دسترسی خودکار را مجاز نمیداند، محدودیت آن را دور نزنید. برای سرویسهایی که API رسمی دارند، استفاده از API معمولاً انتخاب پایدارتر و محترمانهتری است.
چرا صفحه در مرورگر تغییر کرده اما ChangeDetection.io چیزی نمیبیند؟
اگر داده بعد از اجرای JavaScript ساخته میشود، Fetcher ساده ممکن است نسخهای متفاوت از چیزی که در مرورگر میبینید دریافت کند. در این حالت Browser Fetcher را بررسی کنید.
همچنین Selector را بازبینی کنید؛ ممکن است محدودهای که انتخاب کردهاید دیگر با ساختار جدید صفحه تطابق نداشته باشد.
پشتیبانگیری از اطلاعات ChangeDetection.io
در نصب Docker، اطلاعات پایدار در مسیر /datastore کانتینر نگهداری میشوند. در نمونه این مقاله، این مسیر به Volume با نام changedetection-data متصل شده است.
بنابراین قبل از جابهجایی سرور یا تغییرات بزرگ، از دادههای این Volume نسخه پشتیبان تهیه کنید. صرف حذف کانتینر نباید باعث حذف Volume شود، اما دستورهای حذف Volume میتوانند دادههای مانیتورینگ را از بین ببرند.
بهروزرسانی ChangeDetection.io
اگر با Docker Compose نصب کردهاید، روش معمول بهروزرسانی مطابق مستندات پروژه چنین است:
docker compose pull docker compose up -d
قبل از Update مهم، از Datastore نسخه پشتیبان داشته باشید و Release Notes نسخه جدید را بخوانید.
ChangeDetection.io چقدر منابع سرور مصرف میکند؟
مصرف منابع عدد ثابتی ندارد. تعداد Watchها، فاصله بررسی، اندازه صفحات و بهخصوص استفاده از Browser Fetcher روی مصرف RAM و CPU اثر میگذارند.
چند Watch ساده HTTP با صدها صفحه JavaScript که باید داخل مرورگر رندر شوند قابل مقایسه نیست. اگر پروژه شما رشد کرد، مصرف واقعی را روی همان سرور اندازهگیری کنید و منابع VPS را براساس داده واقعی افزایش دهید.
برای انتخاب یا راهاندازی سرور مناسب نیاز به راهنمایی دارید؟
تماس با پشتیبانی ایرانیکاسرور: 021-91302467
مقالات مرتبط
مطالب مرتبط برای ادامه مسیر
🔹 برای اجرای دائمی ChangeDetection.io میتوانید از صفحه سرور مجازی ایران استفاده کنید.
🔹 اگر محل یا منابع متفاوتی نیاز دارید، پلنهای سرور مجازی را بررسی کنید.
🔹 در بررسی فعلی، برای عناوین نزدیک مانند Uptime Kuma و Beszel نتیجه ایندکسشده قابلاتکایی از وبلاگ پیدا نشد؛ بنابراین برای جلوگیری از لینک شکسته، URL مقالهای حدس زده نشده است.
سوالات متداول درباره ChangeDetection.io
آیا ChangeDetection.io رایگان است؟
پروژه ChangeDetection.io متنباز است و نسخه Self-hosted آن را میتوان روی سرور شخصی اجرا کرد. پروژه همچنین سرویس میزبانیشده جداگانه دارد.
آیا میتوان تغییر قیمت محصول را با ChangeDetection.io تشخیص داد؟
بله. بهتر است فقط عنصر مربوط به قیمت انتخاب شود تا تغییر سایر بخشهای صفحه باعث هشدار غیرضروری نشود.
آیا ChangeDetection.io صفحات JavaScript را بررسی میکند؟
بله، برای صفحاتی که به رندر مرورگر نیاز دارند میتوان از Browser-based Fetcher استفاده کرد. این حالت نسبت به Fetch ساده منابع بیشتری مصرف میکند.
آیا میتوان هنگام تغییر صفحه در تلگرام اعلان گرفت؟
ChangeDetection.io از سازوکار Notification برای سرویسهای مختلف از جمله Telegram پشتیبانی میکند. اطلاعات اتصال باید در تنظیمات Notification وارد شوند.
آیا برای اجرای ChangeDetection.io به VPS قدرتمند نیاز داریم؟
برای تعداد محدود Watch ساده معمولاً زیرساخت سنگینی لازم نیست، اما تعداد صفحات، Interval و استفاده از مرورگر واقعی مصرف منابع را تغییر میدهند. انتخاب منابع باید براساس بار واقعی انجام شود.
چرا ChangeDetection.io مرتب تغییر اشتباه تشخیص میدهد؟
معمولاً عناصر پویا مانند تبلیغ، زمان، شمارنده یا محتوای تصادفی علت هستند. با Visual Selector و Filterها محدوده بررسی را فقط به محتوای مهم محدود کنید.
جمعبندی
ChangeDetection.io یک راه عملی برای تبدیل VPS به سامانه پایش تغییر صفحات وب است. بهجای بررسی دستی قیمت، موجودی، اطلاعیه یا محتوای سایتها، میتوانید URLها را به Watchlist بدهید و فقط هنگام تغییر واقعی اعلان بگیرید. برای نتیجه بهتر، مهمترین کار انتخاب دقیق بخش صفحه، تعیین Interval منطقی و استفاده از Browser Fetcher فقط در صفحاتی است که واقعاً به JavaScript نیاز دارند. در محیط عملیاتی نیز پنل را پشت HTTPS قرار دهید، از Datastore نسخه پشتیبان بگیرید و دسترسی مدیریتی را محدود کنید.
منابع رسمی مقاله
🔹 مخزن و مستندات رسمی ChangeDetection.io برای نصب Docker، Docker Compose و Browser Fetcher
🔹 صفحه Releases رسمی پروژه برای بررسی نسخه پایدار و تغییرات نسخههای جدید
🔹 مستندات پروژه برای Notification، Filter، Visual Selector و Browser Steps






دیدگاهها (۰)