Мониторинг сайта на changedetection.io: руководство
Самостоятельно настроить мониторинг сайта с changedetection.io: установка, конфигурация, отслеживание цен, контента и стоков без дорогих SaaS‑решений.
Установка 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).
Конфигурация мониторинга и уведомлений
Первый мониторинг
- В интерфейсе нажмите «Add new watch».
- Введите URL сайта для отслеживания.
- Выберите метод мониторинга:
- Text (текст) — отслеживание изменений в тексте страницы.
- Visual Selector (CSS-селектор) — конкретный блок (напр., цена, заголовок).
- JSON Path — для API-ответов.
- Установите интервал проверки (например, каждый час).
- Нажмите «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-уведомления
- Создайте бота через @BotFather, получите
API_TOKEN. - Получите
CHAT_IDчерез @userinfobot. - В интерфейсе changedetection.io настройте интеграцию Telegram (в разделе настроек или при создании мониторинга).
3. Webhook (для интеграции с Discord, Slack, Zapier)
В интерфейсе мониторинга → уведомления → добавьте Webhook URL.
Пример JSON для Discord:
{
"embeds": [{
"title": "Изменение на {{watch_title}}",
"description": "{{current_notification}}"
}]
}
Примеры использования: отслеживание цен, контента, стоков
Отслеживание цен в магазине
Цель: Следить за изменением цены продукта.
- Добавьте watch с URL товара.
- Используйте Visual Selector или CSS-селектор:
#price-block(пример). - Установите интервал: 6 раз в день (пиковые часы).
- В уведомлениях используйте Email/Telegram для моментального оповещения.
Отслеживание изменений новостного сайта
Цель: Мониторинг обновления статей.
- URL:
https://example.com/news. - Метод: Text или CSS-селектор для списка статей (напр.,
.post). - Установите интервал: каждый час.
- Уведомления: Email или Webhook в Slack.
Отслеживание статуса товара (в наличии/нет)
Цель: Оповещение, когда товар появился в наличии.
- URL страницы товара.
- Метод: Visual Selector на тексте кнопки или описания.
- Используйте «Возможность уведомлений на пустой результат» (в настройках watch).
- Уведомление отправится, когда текст изменится с „Нет в наличии“ на „В наличии“.
Расширенные функции и интеграции
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}}"}'
Рекомендации по безопасности и оптимизации
Безопасность
-
Авторизация: Включите базовую аутентификацию (HTTP Basic Auth). В
docker-compose.yml:environment: - USER=username - PASSWORD=strongpasswordИли используйте reverse proxy с Basic Auth (Nginx/Apache).
-
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; } } -
Firewall: Ограничьте доступ к порту 5000 только с доверенных IP (например, через
ufw).
Оптимизация
-
Используйте PostgreSQL для большего количества пользователей или мониторинга (выше 50 URL).
services: changedetection: depends_on: - postgres -
Настраивайте интервалы разумно: Не проверяйте высокопопулярные сайты чаще 1 раза в 15 минут, чтобы не нарушать TOS.
-
Очистка логов: Настройте ротацию логов в Docker или используйте
logrotate. -
Резервное копирование:
- SQLite: Скопируйте файл
./data/data.db. - PostgreSQL: Используйте
pg_dumpили volume snapshot.
- SQLite: Скопируйте файл
Заключение и следующие шаги
Changedetection.io — стабильное и мощное решение для мониторинга веб-страниц с простой установкой через Docker. Оно обеспечивает гибкость для персональных и профессиональных задач, отслеживания цен до контроля контента.
Следующие шаги:
- Настройте уведомления, соответствующие вашим задачам.
- Проверьте функциональность с несколькими типами сайтов.
- Реализуйте reverse proxy с HTTPS и базовой аутентификацией.
- Изучите документацию проекта для тонкой настройки (например, использование прокси-серверов для обхода ограничений).
Для поддержки сообщества посетите GitHub-репозиторий проекта: github.com/dgtlmoon/changedetection.io.