Files
admin/.tasks/snolla-smtp-send-monitor-vds.md

4.0 KiB
Raw Blame History

snolla-smtp-send-monitor-vds

Goal

Периодический мониторинг того, что SMTP-отправка писем форм с snolla-сайтов реально работает. Живёт на VDS (vds-kzntsv) — проверяет снаружи от воркстейшна, не зависит от рабочей машины.

Мотивация — инцидент 1214.08.2026 (pilorama-forms-email-down): Яндекс отключил протокольный доступ к noreply@snolla.com2 дня тишины: формы отвечали «успешно», заказы копились в БД, писем не было (mailer глотает ошибку catch { console.log }). Монитор должен ловить такой сбой в ближайший тик, а не через N дней.

Что проверять (тик = ежедневно)

  1. SMTP auth/send-тест на smtp.yandex.ru:465 (SSL) с боевыми кредами snolla-почты (e-16513832@yandex.ru / пароль приложения, канон-стора pass snolla-smtp/full-env):
    • минимум: verify()-эквивалент (auth + RCPT, без тела) — дёшево, ловит 525/535/connection;
    • опционально 1×/нед: реальная тестовая отправка на info@pilorama98.ru + vitya.kuznetsov@gmail.com (доставка до ящика, не только до SMTP-сервера).
  2. Parity-чек конфига (дёшево, ловит дрейф до поломки): SMTP_USER/SMTP_PASSWORD в env Portainer-стеков snolla-сайтов (pilonuxt/конфиг-запечка, tandemmebel 20, emspb 18, labtools 17, labtools-pro 19, kupimknigi 21, on-snolla 22, maljarka 23) == актуальным кредам канон-сторы. Расхождение → алерт (будущий сайт снова сломается молча).

Где живёт

  • Вариант A (рекомендую): bash/node-скрипт на VDS-хосте + cron (например 08:00 MSK), креды в root-only файле /root/.snolla-smtp-monitor.env (chmod 600, зеркало pass snolla-smtp/full-env; в git НЕ класть), лог /var/log/snolla-smtp-monitor.log.
  • Вариант B: отдельный маленький контейнер/стек через Portainer (гомогенно с тиражом, но тяжелее — нужен образ).
  • Алерт: ntfy push (ntfy уже живёт на VDS), topic напр. snolla-smtp; тишина при OK (или лёгкий daily OK-пинг). При алерте — exit 1 + дубль в лог.

Acceptance criteria

  • Скрипт на VDS выполняет SMTP auth-тест с боевыми кредами; 525/535/connection-fail → ntfy-алерт + exit 1.
  • Cron ежедневный (время после 08:00 MSK), логи пишутся.
  • Проверено негативом: временно сломать пароль в env-файле → алерт приходит (за < 1 мин при ручном прогоне).
  • Parity-проверка Portainer env vs канон реализована (или явно descoped).
  • Ранбук/README в .admin (host-stacks/vds-kzntsv/ или scripts/), креды — только через pass/root-only файл.

Key files / refs

  • Креды: pass snolla-smtp/full-env (после ротации 2026-08-14: e-16513832@yandex.ru / app-password).
  • Инцидент: .tasks/pilorama-forms-email-down.md (pilorama98) — почему монитор нужен.
  • Portainer API: pass vds-kzntsv/full-env (PORTAINER_URL/JWT-аут), .wiki/concepts/portainer-stack-management-vds.md.
  • ntfy: контейнер на VDS (стек из host-stacks).