Sign inSign up

sequephonic/domain-monitor

By sequephonic

•Updated 2 months ago

Lightweight, secure Docker container to monitor corporate Domain WHOIS & SSL expiration.

Image
Security
Developer tools
Monitoring & observability
0

180

sequephonic/domain-monitor repository overview

⁠🌐 Infrastructure Domain & SSL Monitor

⁠🔄 Что нового в этой версии (Release Notes)

Данный релиз является глобальным архитектурным обновлением сервиса, полностью устраняющим проблемы изоляции Docker-контейнеров прошлых версий:

  • Полное устранение ошибок Database is locked: База данных SQLite переведена на многопоточный отказоустойчивый режим WAL. Процессы Flask-бэкенда и чекера больше не блокируют друг друга.
  • Исправление падения проверок .PRO и .SITE: Реализован гибридный метод опроса. Логика полностью отвязана от нестабильных веб-шлюзов и переведена на прямой опрос мировых реестров через встроенную утилиту whois по порту 43, что исключает ошибки 404.
  • Автоматическая инициализация (Zero-Configuration): Убран «колхоз» с ручным созданием базы данных (touch monitor.db) и выдачей прав chmod 777. При первом запуске Python сам создаст подпапку data/ на хосте и развернет структуры таблиц с правильными правами доступа.
  • Защита от дублирования ресурсов: На уровне бэкенда и уникальных индексов СУБД жестко заблокирована возможность случайного повторного добавления уже отслеживаемого домена.
  • Исправлена страница настроек (Ошибки 404/405): Форма настроек объединена в монолитный роут /save_settings. Кнопки сохранения параметров и проверки SMTP-почты теперь работают без сбоев.
  • 100% Автономность (Local-Only): Полностью удалены внешние JS/CSS зависимости и CDN. Панель загружается мгновенно даже в реалиях блокировки интернета западных ресурсов.

Современный, быстрый и полностью автономный (Local-Only) сервис мониторинга сроков действия доменов и SSL-сертификатов. Написан на Flask + SQLite (WAL) и упакован в легковесный Docker-контейнер.

Идеально подходит для развертывания в изолированных корпоративных контурах (закрытых локальных сетях) и на публичных серверах. Не требует внешних CDN, тяжелых баз данных и сторонних API-зависимостей.


⁠✨ Ключевые особенности и архитектура

  • Гибридный интеллектуальный парсинг: Для предотвращения банов по IP и Rate Limiting на порту 43, сервис разделяет логику опроса:
    • Зоны .RU / .SU / .РФ опрашиваются по защищенному HTTPS-каналу (порт 443) через веб-зеркала с подменой полноценного User-Agent.
    • Международные зоны (.SITE / .SPACE / .COM / .NET / .PRO) опрашиваются напрямую из первоисточников — мировых реестров через нативную утилиту whois (порт 43).
  • Сетевой режим Host (network_mode: host): Контейнер полностью выведен из изоляции NAT/Bridge, что решает проблемы с DNS-петлями внутри локальных сетей (например, .local зон) и гарантирует стабильный исходящий трафик.
  • Автоматическая инициализация (Zero-Configuration): Файловая структура СУБД SQLite и многопоточный режим WAL (Write-Ahead Logging) настраиваются силами Python автоматически при первом же запуске контейнера. Никаких ручных команд touch и конфликтов прав chmod 777.
  • Встроенная безопасность (Basic Auth): Веб-панель надежно защищена окном авторизации на уровне переменных окружения.
  • Синхронный движок: Кнопка «Проверить все сейчас» выполняет онлайн-сканирование всей базы на месте за несколько секунд без фоновых подвисаний и взаимных блокировок базы данных.
  • Умный фикс зоны .PRO: Встроенный парсер умеет корректировать архивный кэш шлюзов, автоматически выставляя актуальные даты продления доменов.
  • Защита от дубликатов: На уровне бэкенда Flask и UNIQUE-индексов СУБД жестко заблокирована возможность случайного повторного добавления уже отслеживаемого ресурса.

⁠🚀 Быстрый старт (Развертывание в одну команду)

Для развертывания сервиса на абсолютно чистом сервере создайте файл docker-compose.yml в любой директории:

version: '3.8'

services:
  domain-monitor:
    image: sequephonic/domain-monitor:latest
    container_name: domain-monitor-app
    # Работа напрямую с сетевой картой хоста для обхода блокировок WHOIS
    network_mode: host
    # Стабильные DNS-серверы для разрешения имен реестров
    dns:
      - 8.8.8.8
      - 1.1.1.1
    # Постоянное хранение базы данных на диске хост-машины
    volumes:
      - ./data:/app/data
    restart: always
    environment:
      - FLASK_APP=app.py
      - FLASK_ENV=production
      # 🔐 НАСТРОЙКИ АВТОРИЗАЦИИ ДЛЯ ВХОДА НА САЙТ (Измените на свои)
      - MONITOR_USER=admin
      - MONITOR_PASSWORD=secret-password
      - FLASK_SECRET_KEY=super-secure-fixed-key-12345

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

docker compose up -d

Панель автоматически станет доступна по адресу: http://IP_ВАШЕГО_СЕРВЕРА:5000


⁠⚙️ Глобальные настройки уведомлений (Email SMTP + Telegram)

После успешного входа на сайт перейдите во вкладку ⚙️ Настройки в шапке панели. Сервис поддерживает:

  1. Telegram-оповещения: Введите Bot Token и Chat ID вашего канала/чата.
  2. Email-оповещения (SMTP): Полноценная поддержка авторизации и шифрования. Доступны настройки SMTP-сервера, портов (465 SSL / 587 TLS), логина и пароля приложения.
  3. Встроенная кнопка «Проверка почты» позволяет моментально отправить тестовое письмо для верификации коннекта к SMTP-серверу.

⁠🕒 Настройка автоматического ночного сканирования (Cron)

Чтобы сервис автоматически проверял всю инфраструктуру каждую ночь и высылал алерты в Telegram/Email, добавьте задачу в планировщик Cron на хост-машине:

  1. Откройте планировщик: crontab -e
  2. Вставьте в самый конец следующую строку (запуск каждый день в 03:00 ночи):
    0 3 * * * /usr/bin/docker exec -w /app domain-monitor-app python checker.py >> /tmp/docker_cron_checker.log 2>&1
    
  3. Сохраните и закройте файл. Логи ночных проверок будут аккуратно собираться в /tmp/docker_cron_checker.log.
  4. Ручной запуск чекера через докер
sudo docker exec domain-monitor-app python -c "import checker; checker.main()"

Разработано для системных администраторов и DevOps-инженеров, ценящих чистоту кода, безопасность данных и мгновенный отклик интерфейса.

Tag summary

Content type

Image

Digest

sha256:200055102…

Size

55 MB

Last updated

2 months ago

docker pull sequephonic/domain-monitor