Сверка 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>
3.5 KiB
Работа с этим репозиторием
Здесь описано состояние серверов: один файл на хост в servers/, стеки
docker-compose в stacks/, индекс в AGENTS.md.
Главное правило
Тронул сервер — обнови servers/<хост>.md в том же прогоне, до отчёта
пользователю. Не «потом», не «если попросят». Расхождение описания с
фактом опаснее отсутствия описания: по доке принимают решения, и неверная
строка стоит дороже пустой.
Это относится к любому изменению состояния: поднял или погасил сервис,
поменял конфиг, удалил каталог, завёл ключ, отключил юнит. Если менял
что-то в stacks/, проверь, что описание сервиса в servers/ ему не
противоречит.
Перед тем как что-то описывать — проверь
Доке не верь, сверяй с живым сервером. При последней сверке (2026-09-08)
десяток утверждений в servers/fr1.md оказались неверными: версии,
размеры, «не работает» про то, что уже работало.
Подробный чеклист и метод — в скилле server-audit
(.claude/skills/server-audit/), инвентаризация одной командой —
scripts/snapshot.sh <ssh-хост>.
Как писать
Стиль этого репо — не список фактов, а факт плюс причина и грабли:
- Почему так, а не иначе. «
node-exporterв host-network» бесполезно без «иначе видел бы только сеть docker-бриджа». - Что сломается молча. Помечай
⚠️. Такие места — главная ценность файла:ufwне управляет docker-портами; путь монтирования обязан совпадать с абсолютными путями в БД;HISTORY=7у sysstat хранит неделю. - Дату и прежнее значение при изменении: «поднято до 365 (было 7)».
- Незакрытое — в «Открытые хвосты», а не в никуда. Если оставил токен, задачу или сомнительные права — запиши, иначе это потеряется.
- Секретов здесь нет. Токены, пароли, ключи — только на сервере. Ссылаться на путь к секрету можно, содержимое — нельзя.
- Роль хоста поменялась — поправь и строку в
AGENTS.md.
Чего не делать
- Не описывай планы как факт. «Планируется» и «сделано» — разные разделы.
- Не удаляй ⚠️-заметку, потому что «выглядит устаревшей». Сначала проверь на сервере, потом переписывай, указав дату проверки.
- Не коммить в
mainнапрямую, если пользователь не просил.