docs(.wiki,.tasks): vds-kzntsv-bootstrap done — 3 phases shipped
VDS Rusonyx 160 NVMe (89.253.255.94 / vds.kzntsv.site) активирован 2026-05-20. 3 фазы за ~6 часов: - Phase 1: harden + docker 29.5.1 + traefik v2.11 + portainer 2.21.5 - Phase 2: shared DB park (postgres 16 / mariadb 11.4 / mongo 7 / redis 7) via traefik raw TCP forward + self-signed TLS - Phase 3: миграция gitea (132 repos), verdaccio (2063 pkgs), registry fresh install (user accepted loss old images) + Joxit GUI Ingest 1 source + 1 entity (vds-kzntsv) + 6 concepts (traefik-tcp- passthrough-vs-starttls / portainer-2.21-admin-password-regression / db-tls-self-signed-via-traefik-raw-tcp / rusonyx-vps-onboarding-quirks / registry-gc-mount-and-modify-flag / compose-bcrypt-escape-trap). 3 follow-up ⚪ tasks: vds-gc-cron, vds-backup-rsync-kreknin, vds-ntfy-push. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
59
vds-gc-cron.md
Normal file
59
vds-gc-cron.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# vds-gc-cron
|
||||
|
||||
## Goal
|
||||
|
||||
Настроить ежедневный (или другой регулярный) cron GC для двух container-сервисов на VDS:
|
||||
1. **Registry** (`/opt/stacks/registry/`) — `docker exec registry registry garbage-collect /etc/docker/registry/config.yml`. Иначе старые блобы не удалённых тэгов накапливаются — 99G после нескольких лет накопления было исходно (см. [[vds-kzntsv-bootstrap]] Phase 3.3).
|
||||
2. **Verdaccio** (`/opt/stacks/verdaccio/`) — нет встроенной GC, но есть несколько подходов:
|
||||
- `npm-cache clean --force` внутри контейнера (очищает npm-side cache, не storage);
|
||||
- Скрипт-prune старых versions: для каждого `package.json` в storage оставлять последние N версий, удалить остальные tarball'ы;
|
||||
- Или использовать verdaccio plugin типа `verdaccio-cache-cleaner`.
|
||||
|
||||
## Open questions
|
||||
|
||||
- [ ] Cadence: ежедневно ночью? Раз в неделю? Зависит от роста кеша.
|
||||
- [ ] Retention для verdaccio: сколько версий каждого package хранить? 5 последних? Все из @snollajs/* — всегда?
|
||||
- [ ] Notify on GC fail — через [[vds-backup-rsync-kreknin]] почтовый канал?
|
||||
|
||||
## Implementation sketch
|
||||
|
||||
`/etc/cron.d/vds-gc`:
|
||||
|
||||
```cron
|
||||
# Registry GC — каждое воскресенье в 03:00 MSK
|
||||
0 3 * * 0 root /opt/stacks/registry/scripts/gc.sh > /var/log/registry-gc.log 2>&1
|
||||
|
||||
# Verdaccio prune — каждое воскресенье в 04:00 MSK
|
||||
0 4 * * 0 root /opt/stacks/verdaccio/scripts/prune.sh > /var/log/verdaccio-prune.log 2>&1
|
||||
```
|
||||
|
||||
`/opt/stacks/registry/scripts/gc.sh`:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
set -e
|
||||
# read-only mode → GC → re-enable writes
|
||||
docker exec registry sh -c 'export REGISTRY_STORAGE_MAINTENANCE_READONLY_ENABLED=true && sleep 1'
|
||||
docker exec registry registry garbage-collect -m /etc/docker/registry/config.yml
|
||||
docker exec registry sh -c 'unset REGISTRY_STORAGE_MAINTENANCE_READONLY_ENABLED'
|
||||
docker restart registry # для надёжности
|
||||
```
|
||||
|
||||
(Hint: подход с env var может не сработать на running container — лучше через compose `docker-compose.override.yml` с read-only flag + docker compose up -d.)
|
||||
|
||||
`/opt/stacks/verdaccio/scripts/prune.sh`:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# Удалить tarball'ы старше N=10 versions для каждого package
|
||||
# (нужно написать скрипт)
|
||||
```
|
||||
|
||||
## Decisions log
|
||||
|
||||
- _Пусто — задача только заведена._
|
||||
|
||||
## Notes
|
||||
|
||||
- Триггер: после стабилизации VDS bootstrap (`vds-kzntsv-bootstrap` Phase 3 завершена).
|
||||
- Кронить только write-ops после убеждения что live registry/verdaccio не получит traffic во время GC, иначе риск повредить.
|
||||
Reference in New Issue
Block a user