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

38 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[//]: # (created 2026-08-14 via user request after SMTP incident: «периодический мониторинг, что отправка с сайтов snolla работает, чтобы жила на vds»)
# snolla-smtp-send-monitor-vds
## Goal
Периодический мониторинг того, что SMTP-отправка писем форм с snolla-сайтов реально работает. **Живёт на VDS (vds-kzntsv)** — проверяет снаружи от воркстейшна, не зависит от рабочей машины.
Мотивация — инцидент 1214.08.2026 (`pilorama-forms-email-down`): Яндекс отключил протокольный доступ к `noreply@snolla.com`**2 дня тишины**: формы отвечали «успешно», заказы копились в БД, писем не было (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).