Мониторинг сайта на changedetection.io: руководство

Самостоятельно настроить мониторинг сайта с changedetection.io: установка, конфигурация, отслеживание цен, контента и стоков без дорогих SaaS‑решений.

Не указано
Алексей Кузнецов
Алексей Кузнецов
Системный администратор20 января 2026 г.

Установка Docker и Docker Compose

Для работы changedetection.io необходимо установить Docker. Если вы используете Ubuntu/Debian, выполните следующие команды для обновления пакетов, добавления репозитория Docker и установки движка. После установки добавьте текущего пользователя в группу docker, чтобы не использовать sudo для каждой команды.

sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker $USER
# Перезайдите в систему или выполните newgrp docker для применения изменений

Подготовка директории и docker-compose.yml

Создайте рабочую директорию для хранения данных и конфигурационный файл docker-compose.yml. В данном примере используется база данных SQLite (по умолчанию) и монтирование тома для сохранения данных между перезапусками контейнера.

mkdir -p /opt/changedetection && cd /opt/changedetection
nano docker-compose.yml

Содержимое файла docker-compose.yml

Добавьте следующую конфигурацию в созданный файл. Сервис будет доступен на порту 5000.

version: '3.8'

services:
  changedetection:
    image: ghcr.io/dgtlmoon/changedetection.io:latest
    container_name: changedetection
    restart: unless-stopped
    ports:
      - "5000:5000"
    environment:
      - DATABASE_ENGINE=sqlite
      - FETCH_WORKER_NUM=2
      - DEFAULT_PORT=5000
    volumes:
      - ./data:/data

# Для подключения PostgreSQL (опционально):
# postgres:
#   image: postgres:15-alpine
#   environment:
#     - POSTGRES_USER=changedetection
#     - POSTGRES_PASSWORD=strongpassword
#     - POSTGRES_DB=changedetection

Запуск контейнера

Запустите контейнер в фоновом режиме. Проверьте логи, чтобы убедиться в отсутствии ошибок при старте.

docker compose up -d
docker compose logs -f

Первоначальная настройка мониторинга

После запуска откройте веб-интерфейс по адресу http://<ваш-IP>:5000. Для добавления мониторинга нажмите 'Add new watch', введите URL и настройте метод отслеживания (Text, Visual Selector или JSON Path).

echo 'Откройте браузер и перейдите на http://<ваш_IP>:5000'

Настройка безопасности (Базовая аутентификация)

Для защиты интерфейса добавьте переменные окружения USER и PASSWORD в docker-compose.yml и перезапустите контейнер.

environment:
  - USER=admin
  - PASSWORD=strong_password_here
  - DATABASE_ENGINE=sqlite

Как self-host изменить заметку: отслеживание изменений на сайтах

Введение: Зачем отслеживать изменения веб-страниц

Отслеживание изменений на сайтах — мощный инструмент для мониторинга актуальности информации. Это актуально для:

  • Контент-менеджеров и SEO-специалистов — отслеживание изменений ключевых страниц конкурентов.
  • Разработчиков и DevOps — контроль версий API-документации или changelog.
  • Аналитиков и инвесторов — мониторинг цен, акций, условий.
  • Покупателей — отслеживание распродаж или появления товаров.
  • Специалистов по кибербезопасности — выявление несанкционированных изменений.

Self-host решение (размещение на собственном сервере) гарантирует полный контроль над данными, конфиденциальность, масштабируемость и отсутствие зависимости от сторонних сервисов.

Краткий обзор changedetection.io

Changedetection.io — популярное open-source решение для мониторинга изменений веб-страниц. Основные возможности:

  • Мониторинг текста, HTML, JSON, XML, CSV.
  • Уведомления через e-mail, Telegram, Slack, Discord, Webhook и десятки других.
  • Парсинг CSS/JSONPath для отслеживания конкретных элементов.
  • Встроенный расписание (интервалы от минут до дней).
  • Поддержка JavaScript-редеров для динамического контента.
  • Мульти-юзерная поддержка и API.

Проект открыт и развивается сообществом, доступен через Docker, что упрощает установку и развёртывание.

Системные требования и подготовка окружения

Минимальные требования

  • Сервер (VPS/облачный/физический) с поддержкой Docker.
  • Операционная система: Linux (Ubuntu 20.04+ рекомендуется), macOS, Windows (через Docker Desktop).
  • Ресурсы:
    • CPU: 1 ядро (2+ ядра для мониторинга множества страниц).
    • ОЗУ: 512 MB (2+ GB для множества параллельных заданий).
    • Хранилище: 5–10 GB (для логов и истории изменений).
  • Доступ в интернет (оба направления).

Подготовка окружения

Убедитесь, что установлены необходимые пакеты.

Установка Docker (Ubuntu/Debian)

# Обновление списков пакетов
sudo apt update

# Установка пакетов для HTTPS-репозиториев
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

# Добавление официального ключа GPG Docker
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Настройка репозитория
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Установка Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# Проверка установки
sudo docker run hello-world

Установка Docker Compose (отдельно, если не включен в docker-compose-plugin)

# Скачивание актуальной версии
sudo curl -L "https://github.com/docker/compose/releases/download/2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# Добавление прав на выполнение
sudo chmod +x /usr/local/bin/docker-compose

# Проверка
docker-compose --version

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

Подготовка директорий

Создайте рабочую директорию для проекта.

mkdir -p /opt/changedetection && cd /opt/changedetection

Пошаговая установка через Docker

Шаг 1: Создание файла docker-compose.yml

В корневой директории проекта создайте файл docker-compose.yml. Это основной файл конфигурации.

version: '3.8'

services:
  changedetection:
    image: ghcr.io/dgtlmoon/changedetection.io:latest
    container_name: changedetection
    restart: unless-stopped
    ports:
      - "5000:5000"  # Веб-интерфейс (HTTP)
      # - "5001:5000"  # Если нужно два экземпляра для других портов
    environment:
      # База данных SQLite (по умолчанию) или PostgreSQL (см. ниже)
      - DATABASE_ENGINE=sqlite
      - FETCH_WORKER_NUM=2  # Количество потоков для фетчинга (CPU-оптимизация)
      - DEFAULT_PORT=5000
    volumes:
      - ./data:/data  # Точки монтирования для данных
    networks:
      - changedetection-net

  # Пример с PostgreSQL (рекомендуется для многопользовательского режима)
  # postgres:
  #   image: postgres:15-alpine
  #   container_name: changedetection-postgres
  #   restart: unless-stopped
  #   environment:
  #     - POSTGRES_USER=changedetection
  #     - POSTGRES_PASSWORD=strongpassword
  #     - POSTGRES_DB=changedetection
  #   volumes:
  #     - postgres_data:/var/lib/postgresql/data
  #   networks:
  #     - changedetection-net

networks:
  changedetection-net:
    driver: bridge

Шаг 2: Запуск контейнера

# Запуск в фоновом режиме
docker compose up -d

# Проверка логов (в случае ошибок)
docker compose logs -f

Контейнер changedetection запустится на порту 5000. Доступ к веб-интерфейсу: http://<ваш-IP>:5000.

Шаг 3: Проверка работоспособности

Откройте браузер и перейдите на http://<ваш-IP>:5000. Убедитесь, что интерфейс загружается. По умолчанию доступ открыт без авторизации (для настройки безопасности см. раздел 8).

Конфигурация мониторинга и уведомлений

Первый мониторинг

  1. В интерфейсе нажмите «Add new watch».
  2. Введите URL сайта для отслеживания.
  3. Выберите метод мониторинга:
    • Text (текст) — отслеживание изменений в тексте страницы.
    • Visual Selector (CSS-селектор) — конкретный блок (напр., цена, заголовок).
    • JSON Path — для API-ответов.
  4. Установите интервал проверки (например, каждый час).
  5. Нажмите «Create».

Первая проверка запустится автоматически. Затем вы увидите статус („No changes“).

Настройка уведомлений

1. Email-уведомления

# В docker-compose.yml добавьте переменные окружения:
environment:
  - SMTP_HOST=smtp.gmail.com
  - SMTP_PORT=587
  - SMTP_USER=your-email@gmail.com
  - SMTP_PASSWORD=your-app-password
  - SMTP_FROM=changedetection@yourdomain.com

Перезапустите контейнер: docker compose up -d.

2. Telegram-уведомления

  1. Создайте бота через @BotFather, получите API_TOKEN.
  2. Получите CHAT_ID через @userinfobot.
  3. В интерфейсе changedetection.io настройте интеграцию Telegram (в разделе настроек или при создании мониторинга).

3. Webhook (для интеграции с Discord, Slack, Zapier)

В интерфейсе мониторинга → уведомления → добавьте Webhook URL.

Пример JSON для Discord:

{
  "embeds": [{
    "title": "Изменение на {{watch_title}}",
    "description": "{{current_notification}}"
  }]
}

Примеры использования: отслеживание цен, контента, стоков

Отслеживание цен в магазине

Цель: Следить за изменением цены продукта.

  1. Добавьте watch с URL товара.
  2. Используйте Visual Selector или CSS-селектор: #price-block (пример).
  3. Установите интервал: 6 раз в день (пиковые часы).
  4. В уведомлениях используйте Email/Telegram для моментального оповещения.

Отслеживание изменений новостного сайта

Цель: Мониторинг обновления статей.

  1. URL: https://example.com/news.
  2. Метод: Text или CSS-селектор для списка статей (напр., .post).
  3. Установите интервал: каждый час.
  4. Уведомления: Email или Webhook в Slack.

Отслеживание статуса товара (в наличии/нет)

Цель: Оповещение, когда товар появился в наличии.

  1. URL страницы товара.
  2. Метод: Visual Selector на тексте кнопки или описания.
  3. Используйте «Возможность уведомлений на пустой результат» (в настройках watch).
  4. Уведомление отправится, когда текст изменится с „Нет в наличии“ на „В наличии“.

Расширенные функции и интеграции

JavaScript-рендеринг (для динамического контента)

Для SPA (Single Page Applications) используйте Fetch Type: «JavaScript / Chrome».

В docker-compose.yml добавьте сервис playwright:

services:
  changedetection:
    image: ghcr.io/dgtlmoon/changedetection.io:latest
    ...
    environment:
      - FETCH_DRIVER=playwright  # Использовать Playwright для рендеринга JS
    volumes:
      - ./data:/data
      - /tmp/chrome:/tmp/chrome  # Папка для временных файлов Chrome

API и Webhooks

Changedetection.io предоставляет API для управления мониторингом. Пример запроса через curl для создания watch:

curl -X POST http://localhost:5000/api/v1/watch \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com",
    "title": "Example Watch",
    "interval": 60,
    "tags": ["monitor", "api"]
  }'

Интеграция с Home Assistant

Для добавления мониторинга в Home Assistant используйте RESTful Command или Webhook.

В configuration.yaml:

rest_command:
  changedetection_new_watch:
    url: "http://<IP>:5000/api/v1/watch"
    method: POST
    headers:
      Content-Type: "application/json"
    payload: '{"url": "{{url}}", "title": "{{title}}"}'

Рекомендации по безопасности и оптимизации

Безопасность

  1. Авторизация: Включите базовую аутентификацию (HTTP Basic Auth). В docker-compose.yml:

    environment:
      - USER=username
      - PASSWORD=strongpassword
    

    Или используйте reverse proxy с Basic Auth (Nginx/Apache).

  2. HTTPS: Разместите behind reverse proxy (Nginx/Traefik) с SSL-сертификатом (Let's Encrypt). Пример конфига Nginx:

    server {
        listen 80;
        server_name changedetection.yourdomain.com;
        return 301 https://$host$request_uri;
    }
    
    server {
        listen 443 ssl http2;
        server_name changedetection.yourdomain.com;
    
        ssl_certificate /etc/letsencrypt/live/changedetection.yourdomain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/changedetection.yourdomain.com/privkey.pem;
    
        location / {
            proxy_pass http://localhost: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;
        }
    }
    
  3. Firewall: Ограничьте доступ к порту 5000 только с доверенных IP (например, через ufw).

Оптимизация

  1. Используйте PostgreSQL для большего количества пользователей или мониторинга (выше 50 URL).

    services:
      changedetection:
        depends_on:
          - postgres
    
  2. Настраивайте интервалы разумно: Не проверяйте высокопопулярные сайты чаще 1 раза в 15 минут, чтобы не нарушать TOS.

  3. Очистка логов: Настройте ротацию логов в Docker или используйте logrotate.

  4. Резервное копирование:

    • SQLite: Скопируйте файл ./data/data.db.
    • PostgreSQL: Используйте pg_dump или volume snapshot.

Заключение и следующие шаги

Changedetection.io — стабильное и мощное решение для мониторинга веб-страниц с простой установкой через Docker. Оно обеспечивает гибкость для персональных и профессиональных задач, отслеживания цен до контроля контента.

Следующие шаги:

  1. Настройте уведомления, соответствующие вашим задачам.
  2. Проверьте функциональность с несколькими типами сайтов.
  3. Реализуйте reverse proxy с HTTPS и базовой аутентификацией.
  4. Изучите документацию проекта для тонкой настройки (например, использование прокси-серверов для обхода ограничений).

Для поддержки сообщества посетите GitHub-репозиторий проекта: github.com/dgtlmoon/changedetection.io.

Поделиться:TelegramX / TwitterVK