VPSРейтинг
Мониторинг6 марта 2026 · 13 мин

Changedetection.io на VPS: следим за изменениями на любых сайтах

Хотите знать, когда снизится цена на товар, появится нужная вакансия или обновится документация — и получать уведомление в Telegram? Changedetection.io делает именно это. 30 000+ звёзд на GitHub, работает на VPS от 512 МБ RAM, разворачивается за 5 минут.

Что это и зачем

Changedetection.io — это сервис, который периодически заходит на нужные вам страницы и проверяет, не изменилось ли что-то. Если изменилось — отправляет уведомление.

Звучит просто, но применений масса:

  • Цены. Поставили ноутбук на отслеживание в магазине — пришёл алерт о снижении на 5 000 рублей.
  • Товары в наличии. Редкий товар появился на складе — сразу в Telegram.
  • Вакансии. Страница компании с вакансиями обновилась — значит, появилась новая позиция.
  • Документация и законы. Изменился нужный раздел официальной документации или нормативный акт.
  • Конкуренты. Обновился прайс-лист или появилась новая услуга у конкурента.
  • Собственный сайт. Уведомление, если что-то «сломалось» — пропал текст или изменился заголовок.

Есть облачная версия, но на VPS инструмент работает бесплатно и без ограничений на количество отслеживаний.

Что понадобится

  • VPS с Ubuntu 22.04, минимум 512 МБ RAM (базовый режим без браузера)
  • Docker и Docker Compose — инструкция ниже если не установлены
  • Для JS-сайтов (Wildberries, Ozon и т.п.) — 1 ГБ RAM и режим с браузером
  • Telegram-бот для уведомлений (создаётся за 2 минуты)

Шаг 1. Устанавливаем Docker

Если Docker уже установлен — пропустите этот шаг.

# Устанавливаем Docker одной командой
curl -fsSL https://get.docker.com | sh

# Добавляем текущего пользователя в группу docker
# (чтобы не писать sudo перед каждой командой)
sudo usermod -aG docker $USER

# Применяем изменения группы
newgrp docker

Проверяем что всё работает: docker run hello-world — должны увидеть «Hello from Docker!».

Шаг 2. Запускаем changedetection.io

Создаём рабочую директорию и файл конфигурации:

mkdir -p ~/changedetection && cd ~/changedetection

Создаём файл docker-compose.yml:

services:
  changedetection:
    image: ghcr.io/dgtlmoon/changedetection.io
    container_name: changedetection
    volumes:
      - changedetection-data:/datastore
    environment:
      - BASE_URL=https://cd.example.com
      - TZ=Europe/Moscow
    ports:
      - 127.0.0.1:5000:5000
    restart: unless-stopped

volumes:
  changedetection-data:

BASE_URL — адрес, который добавится в уведомления в Telegram. Укажите домен вашего сервера или оставьте пустым если домена нет. TZ=Europe/Moscow — часовой пояс для расписания проверок.

Запускаем:

docker compose up -d

Через несколько секунд веб-интерфейс доступен на http://ВАШ_IP:5000 (порт нужно открыть в UFW: sudo ufw allow 5000/tcp).

Шаг 3. Nginx + SSL (опционально)

Если хотите открывать интерфейс по красивому домену с HTTPS — настройте Nginx. Если доступ нужен только с вашего компьютера по SSH-туннелю, этот шаг можно пропустить.

Устанавливаем Nginx и certbot:

sudo apt install nginx certbot python3-certbot-nginx -y

Создаём конфиг /etc/nginx/sites-available/changedetection:

server {
    listen 80;
    server_name cd.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 Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
sudo ln -s /etc/nginx/sites-available/changedetection /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d cd.example.com

После получения сертификата закройте порт 5000 из публичного доступа: sudo ufw delete allow 5000/tcp. Теперь сайт доступен только через Nginx на 443.

Шаг 4. Добавляем первое отслеживание

Открываем интерфейс в браузере. Интерфейс на английском, но он интуитивно понятен.

  1. 1

    Вставляем URL в поле вверху страницы

    Например, https://www.dns-shop.ru/product/xxxx/ — страница товара. Нажимаем «Watch».

  2. 2

    Настраиваем интервал проверки

    По умолчанию — каждые 5 минут. Для магазинов разумно ставить 30–60 минут: меньше нагрузки и ниже риск бана.

  3. 3

    Дождёмся первой проверки

    Нажимаем кнопку «Check now» чтобы не ждать. Статус сменится с «Not yet checked» на время последней проверки.

Шаг 5. Фильтруем только нужный элемент (CSS-селектор)

По умолчанию инструмент следит за всей страницей. Это проблема: меняются счётчики, реклама, «сейчас смотрят 12 человек» — и вы получаете ложные срабатывания. Лучше указать конкретный элемент.

Нажимаем Edit у нужного отслеживания → вкладка Filters & Triggers → поле CSS/JSONPath/XPath/Regex Filter.

Как найти CSS-селектор:

  1. Открываем страницу в браузере (Chrome/Firefox)
  2. Правой кнопкой на нужный элемент (цену, заголовок, кнопку) → Inspect
  3. В панели разработчика правой кнопкой на строку → Copy → Copy selector

Примеры селекторов:

# Элемент по классу
.product-buy__price

# Элемент по нескольким классам
.product-card .price__current

# Элемент по ID
#product-price

# Кнопка «В наличии» / статус
.btn-buy__text

# Параграф внутри блока
.product-description > p:first-child

Совет: после ввода селектора нажмите «Preview» — увидите именно тот текст, который будет отслеживаться. Убедитесь что в поле только цена или статус, а не весь блок страницы.

Шаг 6. Уведомления в Telegram

6.1. Создаём Telegram-бота

  1. Открываем Telegram, находим @BotFather
  2. Отправляем команду /newbot
  3. Вводим имя бота (например, «Мой мониторинг»)
  4. Вводим username бота (например, «my_watchbot») — должен заканчиваться на «bot»
  5. BotFather даёт токен вида: 123456789:AABBccDDeeFF... — сохраняем его

6.2. Получаем Chat ID

Отправьте любое сообщение своему новому боту, затем откройте в браузере (вставьте свой токен):

https://api.telegram.org/bot123456789:AABBccDDeeFF.../getUpdates

В ответе найдите "chat":{"id": XXXXXXXXX} — это ваш Chat ID (число, может быть отрицательным если это группа).

6.3. Добавляем уведомление в changedetection.io

Переходим в Settings → Notifications. В поле Notification URL list добавляем:

tgram://123456789:AABBccDDeeFF.../987654321/

Формат: tgram://ТОКЕН/CHAT_ID/

Нажимаем Send test notification — в Telegram должно прийти тестовое сообщение. Если пришло — нажимаем Save.

Важно: в шаблоне уведомления по умолчанию есть переменная {current_snapshot}. Она вставляет весь текст страницы — если страница большая, Telegram вернёт ошибку «message is too long». Замените шаблон на более компактный: Изменение на: {watch_url} Текст до: {diff_removed} Текст после: {diff_added}

Бонус: отслеживаем JS-сайты (Wildberries, Ozon)

Многие крупные магазины загружают цены и статус «в наличии» через JavaScript. Обычный HTTP-запрос получит пустую страницу — нужен полноценный браузер.

Добавляем в docker-compose.yml браузерный контейнер:

services:
  changedetection:
    image: ghcr.io/dgtlmoon/changedetection.io
    container_name: changedetection
    volumes:
      - changedetection-data:/datastore
    environment:
      - BASE_URL=https://cd.example.com
      - TZ=Europe/Moscow
      - PLAYWRIGHT_DRIVER_URL=ws://sockpuppet:3000
    ports:
      - 127.0.0.1:5000:5000
    depends_on:
      - sockpuppet
    restart: unless-stopped

  sockpuppet:
    image: dgtlmoon/sockpuppetbrowser:latest
    container_name: sockpuppet
    cap_add:
      - SYS_ADMIN
    restart: unless-stopped
    environment:
      - SCREEN_WIDTH=1920
      - SCREEN_HEIGHT=1024
      - SCREEN_DEPTH=16
      - MAX_CONCURRENT_CHROME_PROCESSES=5

volumes:
  changedetection-data:

Перезапускаем:

docker compose up -d

Теперь при редактировании конкретного отслеживания (Edit → вкладка Fetching) выбираем Playwright Chromium вместо «Requests». Инструмент запустит браузер, дождётся рендеринга JS и снимет нужный контент.

Требования к RAM: каждая вкладка браузера потребляет ~100–200 МБ. SockPuppetBrowser при простое занимает ~200 МБ, при активном использовании может вырасти до 1–2 ГБ. Для нескольких JS-отслеживаний рекомендуется VPS с 2 ГБ RAM.

Полезные настройки

Установить пароль на интерфейс

Если интерфейс доступен публично — защитите его. Переходим в Settings → Access and API → Enable shared login password.

Расписание проверок

В Edit → RequestTime between checks можно задать конкретное расписание: например, проверять только в рабочие дни с 9 до 21. Удобно для мониторинга интернет-магазинов — ночью цены обычно не меняются.

Условие срабатывания

Во вкладке Filters & TriggersTrigger/ignore textможно указать, когда присылать уведомление:

  • — Уведомить только если в тексте появилось слово В наличии
  • — Не уведомлять если текст содержит Нет в наличии

Массовый импорт URL

Settings → Import / Export → вставьте список URL по одному на строку. Все страницы добавятся сразу с настройками по умолчанию.

Частые проблемы

Уведомления не приходят — ошибка «message is too long»

В шаблоне уведомления уберите переменную {current_snapshot}. Она вставляет весь текст страницы, а Telegram ограничивает сообщения 4096 символами. Используйте только {diff_added} и {diff_removed}.

Постоянно приходят ложные срабатывания

Страница меняется из-за счётчиков, времени, рекламы — а не из-за нужного контента. Решение: укажите CSS-селектор конкретного элемента во вкладке Filters & Triggers. Если селектор уже указан, проверьте в Preview — он захватывает только нужный блок.

Страница проверяется, но контент пустой или не тот

Сайт использует JavaScript для загрузки данных. В Edit → вкладка Fetching выберите Playwright Chromium. Для этого нужен добавленный контейнер SockPuppetBrowser (инструкция выше). Без него опция Playwright в меню не появится.

Итог

Changedetection.io — один из тех инструментов, которые вы поставите один раз и будете пользоваться годами. 5 минут на установку, потом просто добавляете URL и получаете алерты.

  • Работает на 512 МБ RAM в базовом режиме
  • Неограниченное количество отслеживаний — бесплатно
  • CSS/XPath-фильтры убирают ложные срабатывания
  • JS-сайты через SockPuppetBrowser
  • Уведомления в Telegram за 2 минуты

Похожие статьи