Commit Graph
184 Commits
Author SHA1 Message Date
gilfanovrandClaude Opus 5 b56c137b5c Механизм поддержания описаний в актуальном состоянии
Сверка fr1 показала, что дока расходится с фактом по десятку пунктов —
значит нужен не разовый проход, а контракт и инструмент.

  CLAUDE.md — правило «тронул сервер, обнови servers/<хост>.md в том же
  прогоне» плюс стиль: факт + причина + что сломается молча. Лежит именно
  в CLAUDE.md, потому что AGENTS.md автоматически агенту не подгружается.

  .claude/skills/server-audit/ — метод сверки и накопленные грабли: где
  дока врёт чаще всего, почему ufw не отвечает на вопрос об открытых
  портах, почему нужен up -d --dry-run, почему «executed successfully»
  не доказывает работу задания.

  scripts/snapshot.sh — инвентаризация живого состояния за один проход:
  только чтение, без sudo, секретов не печатает, недоступное под root
  помечает и подсказывает команду.

Первый же прогон скрипта нашёл две вещи, обе описаны:

  - IPv6 не «починился», а мигает: за один день FAILED -> REACHABLE ->
    FAILED без единой правки конфига. Описан как мигающий, с выводом
    ничего на него не завязывать.
  - В основном sshd_config стоит PermitRootLogin yes (правка шаблона
    Contabo). Root-вход закрыт только потому, что Include дроп-инов
    стоит выше, а sshd берёт первое значение. Уберёшь дроп-ин —
    включится.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-08 16:52:22 +03:00
gilfanovrandClaude Opus 5 4308c5c7e1 fr1: сверка описания с живым сервером
Дока расходилась с фактом по десятку пунктов. Что исправлено по
результатам обхода сервера:

  - ядро 6.8.0-137 (было 134); IPv6 заработал — шлюз отвечает на NDP,
    хотя конфиг не менялся, так что может отвалиться обратно
  - Gitea 1.27.3, 1.9 ГБ, 20 репо (было 1.25.4 / 4.3 ГБ / 16)
  - апекс ruzzy.dev уже на fr1; появились vhost'ы share и www
  - мониторинг шире описанного: таргеты ru1 и job gitea, дашборды
    OpenVPN и Gitea; убраны устаревшие упоминания выведенного de1
  - vault-синк claude-channels работает (дока говорила обратное), том
    claude-home раздулся заново до 2.8 ГБ

Добавлены разделы, которых не было вовсе:
  - tgclaude — общий вход для агентов; цепочка Telegram-бот → агент в
    контейнере → SSH → группа docker → root на хосте
  - imgbot и его переезд в контейнеры
  - расписания: полная инвентаризация cron и таймеров
  - открытые хвосты, включая непогашенные токены в Gitea

Разобрано и описано попутно: ufw не управляет docker-портами (ipcam
месяцами держал 2221 и 30000-30010 наружу без единого правила);
sysstat хранил историю 7 дней при HISTORY=7 — поднято до 365 (при >28
sa1 сам переключает имена на saYYYYMMDD, иначе смысла нет); /etc/cron.
hourly/free час за часом выбрасывал страничный кэш (до -3.89 ГиБ,
подтверждено по Prometheus) — удалён.

Уборка диска: 104 → 52 ГБ занято. Ушли ipcam, sc2-parser, booty,
booty-collector, vacuum-scraper, ollama (8.1 ГБ), легаси-архив
картинок, docker build cache (43.4 ГБ).

В AGENTS.md поправлены две неверные строки: de1 значился действующей
прод-нодой, хотя выведен, а туннель ru1 — идущим до de1. Сами
servers/de1.md и servers/ru1.md не сверялись.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-08 15:26:40 +03:00
gilfanovrandClaude Opus 5 a65d6a249e imgbot: стек из двух сервисов вместо процессов на хосте
Проект агента (~tgclaude/imgbot) работал тремя голыми python-процессами,
запущенными руками из SSH-сессии: без юнита, без restart-политики, при
Linger=no. Держались только на KillUserProcesses=no и не пережили бы
перезагрузку, причём молча.

Один образ на базе playwright/python:v1.62.0-noble (версия пакета
playwright обязана совпадать с тегом, иначе разъезжается ревизия
chromium), два сервиса:
  - imgbot-daemon — APScheduler: refresh 30 мин, analyze 5 мин
  - imgbot-http   — объединил прежние mcp-http (8765) и file-server
    (8766): MCP как под-приложение Starlette плюс маршрут /photo/<id>

Неочевидное, из-за чего это ломается молча (в compose есть комментарии):
  - данные монтируются в тот же путь, что на хосте: images.file_path в
    SQLite абсолютный, и его читают обе стороны
  - корней хранения может быть больше одного — проверять все префиксы
    file_path, а не только data_dir
  - HOME обязателен: collector.py вызывает Path.home(), а uid 1001 не
    имеет записи в /etc/passwd образа
  - у MCP своя защита от DNS-rebinding: без IMGBOT_ALLOWED_HOSTS отдаёт
    421 на любой Host кроме localhost

Порт не публикуется на хост, сервис доступен из общей docker-сети с
claude-channels — агент наконец ходит по MCP, а не по SSH.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-08 15:26:16 +03:00
gilfanovrandClaude Opus 5 bf4708b775 ipcam выведен; пин Gitea приведён к рабочей 1.27.3
ipcam/FTPS-приёмник удалён с fr1 целиком: контейнер, образ, том, сеть,
каталоги /srv/ipcam и /srv/ftps, deploy-хук certbot и сертификат
cam.ruzzy.dev. Видео так и не начали складываться — на момент удаления
в /srv/ipcam было 0 файлов.

Пин образа Gitea в стеке держал 1.25.4, тогда как работает 1.27.3
(обновлён 2026-08-31). Любой `docker compose up -d` откатил бы сервис
на две минорные версии назад.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-08 15:26:00 +03:00
ruslangilfanovandClaude Opus 4.8 b0faa0e019 monitoring/cadvisor: тюнинг CPU + фикс зомби-лика
housekeeping 30s, docker_only, отключены дорогие метрики,
init:true для reaping healthcheck-wget. На fr1 дало 231%→14% CPU.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-23 09:42:24 +03:00
Ruslan Gilfanov 1c1ef5eee1 monitoring: убраны de1-таргеты (de1 выведен, метрики удалены) 2026-06-22 14:14:38 +03:00
Ruslan Gilfanov d03b682b6b de1: выведен — все сервисы остановлены, всё на fr1/в бэкапах 2026-06-22 13:30:57 +03:00
Ruslan Gilfanov ddc081bc7f ipcam: домен cam.ruzzy.dev + Let's Encrypt (vsftpd) + авто-reload хук, PASV на домен 2026-06-22 11:18:31 +03:00
Ruslan Gilfanov 6ce2cef479 ipcam: FTPS-приёмник (vsftpd) на fr1, PASV_ADDRESS=fr1, без переноса видео 2026-06-22 11:07:56 +03:00
Ruslan Gilfanov 202e2a8071 claude-channels: перенос de1 → fr1 (запущен, telegram-плагин переустановлен) 2026-06-22 10:12:27 +03:00
Ruslan Gilfanov d3d3b9a2c8 ru1: документация openvpn-exporter 2026-06-21 23:12:36 +03:00
Ruslan Gilfanov e054d35cc0 monitoring: OpenVPN per-client (openvpn_exporter на ru1 + дашборд) 2026-06-21 23:12:05 +03:00
Ruslan Gilfanov da10b50174 monitoring: network дашборд — панели объёма (ГБ за период) + скорость 2026-06-21 22:57:54 +03:00
Ruslan Gilfanov f204e94930 monitoring: подключён ru1 (host-net агент, видит VPN-интерфейсы) 2026-06-21 22:54:42 +03:00
Ruslan Gilfanov 3389a76c41 monitoring: сетевой дашборд + node-exporter в host-network (видит eth0/wg0) 2026-06-21 22:45:25 +03:00
Ruslan Gilfanov 61525c4400 vpn: фаза 1 — AWG exit-зеркало на fr1, ru1 переключён на fr1 2026-06-21 22:36:12 +03:00
Ruslan Gilfanov fa23444148 ru1: паспорт RU entry-ноды (85.198.109.86, VDSina) 2026-06-21 22:03:56 +03:00
Ruslan Gilfanov 818958ace9 monitoring: подключён de1 (агент node-exporter+cadvisor, доступ только с fr1) 2026-06-21 21:17:27 +03:00
Ruslan Gilfanov f52aa85ba1 monitoring: рабочий дашборд Gitea (старый был k8s-only → no data) 2026-06-21 20:19:21 +03:00
Ruslan Gilfanov d06cb5bb5f de1: gitea перенесён/выключен, git.ruzzy.dev уехал на fr1 2026-06-21 20:10:28 +03:00
Ruslan Gilfanov 71fa9309d5 monitoring: gitea metrics (scrape job + дашборд) 2026-06-21 20:07:12 +03:00
Ruslan Gilfanov b00aae6c5e gitea: перенос de1 → fr1 (1.25.4, git.ruzzy.dev на fr1) 2026-06-21 19:57:35 +03:00
Ruslan Gilfanov 247743b31c fr1: документация алертов 2026-06-21 19:35:06 +03:00
Ruslan Gilfanov b2d04e0573 monitoring: алерты через Alertmanager → Telegram (node down/cpu/mem/disk) 2026-06-21 19:34:39 +03:00
Ruslan Gilfanov 75d00cc400 monitoring: node-exporter hostname=fr1 (имя ноды в дашборде) 2026-06-21 19:16:51 +03:00
Ruslan Gilfanov 29e9079ca4 monitoring: системные дашборды + multi-server (file_sd), readme 2026-06-21 19:12:03 +03:00
Ruslan Gilfanov e0adc8997d fr1: Grafana через mon.ruzzy.dev (nginx + Let's Encrypt) 2026-06-21 19:02:17 +03:00
Ruslan Gilfanov d9b268ac77 fr1: стек мониторинга (prometheus+grafana+node-exporter+cadvisor) 2026-06-21 18:55:45 +03:00
Ruslan Gilfanov 6cb627cc16 de1: инвентарь проектов /var/www; supervisor заброшен; Plex/epmd рудименты 2026-06-21 18:37:07 +03:00
Ruslan Gilfanov 36ba9b8d7c de1: systemd-сервисы и cron/timers (правки vs README) 2026-06-21 18:33:05 +03:00
Ruslan Gilfanov 3c6820a69b de1: добавлен полный разбор nginx vhosts 2026-06-21 18:29:43 +03:00
Ruslan Gilfanov 9f08a61783 de1: полный паспорт действующей ноды ruzzy.dev 2026-06-21 18:26:38 +03:00
Ruslan Gilfanov f992a8e6f8 fr1: подробный снимок текущих настроек 2026-06-21 18:20:05 +03:00
Ruslan Gilfanov 8e632558ac infra: базовая структура + состояние fr1 2026-06-21 18:17:14 +03:00