doc: systemd + локальный Redis (устойчивость), дефекты seed, грабли

This commit is contained in:
Repinoid
2026-10-10 14:24:50 +03:00
parent f7fe2f26e5
commit c4cc3c80ea
2 changed files with 40 additions and 0 deletions
@@ -105,3 +105,30 @@ curl -sS https://sqs.sinefo.ru/health
- `app/cmd/seed.go` — демо-очереди формируют URL через `gosqs.TenantQueueURL` (убрано
дублирование логики — оно и было причиной, что фикс «не применялся»);
- тест `app/gosqs/tenant_helpers_test.go`.
## 8. Устойчивость: systemd + локальный Redis (2026-10-10)
- **Redis** установлен на 213 (`apt install redis-server` 7.0.15), слушает `127.0.0.1:6379`,
включён **AOF** (`/etc/redis/redis.conf`: `appendonly yes`) — состояние переживает рестарт.
- **systemd-юнит** `/etc/systemd/system/shared-sqs.service`: `Restart=always`, `RestartSec=2`,
`WantedBy=multi-user.target` (автостарт при ребуте), `Requires=redis-server.service`,
`User=naeel`, `WorkingDirectory=/home/naeel/sqs-test`, `StandardOutput=append:.../sqs.log`.
- **env** `/etc/shared-sqs.env` (600, root): `SHARED_SQS_ADMIN_TOKEN`, `SHARED_SQS_SEED_DEMO`,
`SHARED_SQS_EXTERNAL_URL_BASE=https://sqs.sinefo.ru`, `REDIS_ADDR=127.0.0.1:6379`.
- Управление: `sudo systemctl {status,restart,stop,start} shared-sqs`.
**Закрыто:** крах процесса (авторестарт) и ребут ВМ (автостарт + Redis с диска из AOF; проверено —
сообщение пережило рестарт).
**НЕ закрыто:** падение самой ВМ — SQS и Redis лежат на одной машине (single point of failure).
Настоящая отказоустойчивость — после Шага 3 (Redis на отдельном хосте + несколько инстансов).
### Дефекты seed, обнаруженные при включении Redis (исправлены, коммит `c0aa618`)
1. **Демо-очереди не персистились** — после рестарта у демо-тенанта не было очередей.
Фикс: `persistence.SaveQueue` + `SaveMessages` в `app/cmd/seed.go`.
2. **Дубли тенантов** — каждый старт создавал нового демо-тенанта (новые креды). При
`Restart=always` это утечка. Фикс: идемпотентность в `seedDemoData` (проверка по имени
через `store.List()` → «сид пропущен»).
### Для прода
`SHARED_SQS_SEED_DEMO=false` (демо-данные не нужны), тенанты/очереди создаются через API
(они персистятся штатно).