docs(wiki): vds-kzntsv disk cleanup 94%→74% + container-log rotation guard

Container json-logs hit 19GiB (owncloud 13GiB, traefik 2.8, gitea 1.9) —
no rotation set on infra (unlike books-vds guard). Truncated logs +
builder prune + apt clean + journal vacuum: ~28GiB freed, 94%→74%
(11→39GiB free). Added /etc/logrotate.d/docker-containers (copytruncate
200M, rotate 3, hourly) + hourly cron. Reduced GC-cron urgency note.

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-07-13 18:44:42 +03:00
parent 8230f89198
commit 7e02d61128

View File

@@ -134,12 +134,13 @@ DB TLS: self-signed certs (CN matches hostname), клиент с `verify-none` /
## Known issues
- **2026-05-28 network-stack mismatch (~2.5 ч outage + ~5.5 ч на статике до resolution):** наш netplan+networkd конфликтовал с provider's expected ifupdown stack, поэтому когда DHCP-binding кратко потерялся на стороне хостера — auto-recovery (их `start/ipadd`) не сработала. Resolution: mask netplan/networkd + reboot + provider reset config. Подробности + runbook + lessons-learned: [`vds-kzntsv-dhcp-outage-2026-05-28`](../concepts/vds-kzntsv-dhcp-outage-2026-05-28.md). **Не использовать netplan на этом VDS** (anti-pattern).
- **2026-07-13 disk cleanup + container-log rotation guard:** диск поднялся до **94 % (11 GiB free)** — та же болезнь что на [[../entities/books-vds]] 2026-06-04, но guard на infra НЕ стоял. Корень — docker daemon `json-file` без `max-size` + ноль ротации; `owncloud` oCIS натёк **13 GiB** json-лога (остальное: traefik 2.8 GiB, gitea 1.9 GiB; `/var/lib/docker/containers` = 19 GiB). Ручная чистка: truncate логов (19 GiB → 1.2 MiB), `docker builder prune` (-5.5 GiB), `apt-get clean` (-1.2 GiB), `journalctl --vacuum-size=50M` (-0.4 GiB), `docker image prune -a` (-0.35 GiB — старые snolla-теги делят base-слои с running, уникальных мало). Итого **~28 GiB освобождено → 94 % → 74 % (39 GiB free)**. Durable guard: `/etc/logrotate.d/docker-containers` (`copytruncate, size 200M, rotate 3, compress, hourly`) + hourly cron `/etc/cron.d/docker-logrotate` (минута 7). Альтернатива на уровне daemon (`log-opts: max-size=50m, max-file=3` в `/etc/docker/daemon.json`) не применена — потребует рестарта dockerd = рестарт всех 30 контейнеров; logrotate copytruncate выбран как non-disruptive.
## Open issues / TODO
- DB TLS = self-signed → нужен LE-cert sidecar (lego watch acme.json → extract PEM → reload DBs). Сейчас клиенты обходятся `verify-none`. [`db-tls-self-signed-via-traefik-raw-tcp`](../concepts/db-tls-self-signed-via-traefik-raw-tcp.md).
- Backup pipeline — TODO ([`vds-backup-rsync-kreknin`](../../.tasks/vds-backup-rsync-kreknin.md)).
- GC cron для verdaccio + registry — TODO ([`vds-gc-cron`](../../.tasks/vds-gc-cron.md)). **Срочность поднята после 2026-05-28** — дисковая нагрузка дошла до 89%, ручной GC (build cache + image prune + log truncate) дал 79%; registry GC отложен.
- GC cron для verdaccio + registry — TODO ([`vds-gc-cron`](../../.tasks/vds-gc-cron.md)). **Срочность снижена после 2026-07-13 cleanup** (94 % → 74 %, 39 GiB free); container-log rotation — DONE (см. Known issues ↑). Registry + verdaccio GC cron — отдельный TODO, не связан с логами.
- ntfy push — TODO ([`vds-ntfy-push`](../../.tasks/vds-ntfy-push.md)).
- `iputils-ping` не установлен на host — `apt install iputils-ping` при следующем maintenance, иначе пользоваться `curl` для проверки сети.
- Hermes — defer, ждёт уточнения user.