Автономность сбора и просмотр базы на s3
Здесь лежит то, что живёт на сервере как системные файлы. В репозитории — чтобы не существовало «только на сервере», как это случилось с индексатором и каталогом сборщика.
| Файл | Куда ставится | Зачем |
|---|---|---|
| gwptd-collector-watchdog | /usr/local/sbin/ | возвращает расписание сбора, если оно исчезло |
| gwptd-collector-watchdog.service | /etc/systemd/system/ | одноразовый запуск сторожа |
| gwptd-collector-watchdog.timer | /etc/systemd/system/ | каждые пять минут, включён в автозапуск |
Установка:
scp ops/s3/gwptd-collector-watchdog* s3-int:/tmp/
ssh s3-int 'install -m 755 /tmp/gwptd-collector-watchdog /usr/local/sbin/ \
&& install -m 644 /tmp/gwptd-collector-watchdog.{service,timer} /etc/systemd/system/ \
&& systemctl daemon-reload && systemctl enable --now gwptd-collector-watchdog.timer'
Зачем сторож существует
Требование владельца, повторённое трижды: сбор сырых JSON идёт сам по расписанию, и остальная работа его не касается. До сторожа связь была прямая: выкладка приложения заменяет root crontab, и при её провале расписание оставалось ПУСТЫМ — сбор вставал целиком и молча. 08–09.08.2026 так вышло четыре раза.
Сторож раз в пять минут смотрит, есть ли расписание. Нет — возвращает из канонического
файла выложенного дерева (marketplace-collector-v3/scripts/crontab.s3-next.txt) и пишет
в /var/log/gwptd-collector-watchdog.log. Существующее расписание не трогает: отличие от
канона бывает законным.
⚠️ Он отключается только на время ДЕЙСТВИТЕЛЬНО идущей выкладки — живой процесс
gwptd-next-deploy либо расписка не старше пятнадцати минут. Первая версия смотрела лишь
на наличие файла расписки, и застрявшая расписка от оборванной выкладки обесточила сторожа
насовсем: сбор стоял, а он молчал. Проверено сносом расписания при живой застрявшей
расписке — восстановил.
Проверять сторожа надо именно так, а не чтением кода:
ssh s3-int 'crontab -r; /usr/local/sbin/gwptd-collector-watchdog; crontab -l | grep -c .'
Просмотр базы: Adminer
Контейнер gwptd-adminer на внутреннем адресе http://10.0.1.7:8010 (админский VPN;
наружу НЕ публикуется). Сервер в форме входа подставлен: gwptd-v3-mysql.
Учётная запись gwptd_viewer — только SELECT на восемь баз. Это единственная
надёжная защита: Adminer создан для произвольного SQL, ограничивать его интерфейсом
бессмысленно. Пароль хранится вне репозитория; выдаёт владелец.
Решение владельца 09.08.2026: показывать всю базу, все площадки, без масок. Деления по площадкам в Adminer нет и быть не может — он показывает таблицу целиком.
Запуск, если контейнера нет:
ssh s3-int 'docker run -d --name gwptd-adminer --restart unless-stopped \
--network gwptd-v3-net -p 10.0.1.7:8010:8080 \
-e ADMINER_DEFAULT_SERVER=gwptd-v3-mysql adminer:latest'