Merge branch 'master' of https://git.kzntsv.site/OpeItcLoc03/admin
# Conflicts: # .tasks/STATUS.md
This commit is contained in:
121
.tasks/STATUS.md
121
.tasks/STATUS.md
@@ -1,5 +1,5 @@
|
||||
# Admin Task Board
|
||||
_Updated: 2026-05-24 (`windows-host-fallback-backup-daily` 🟢 closed — daily 03:00 MSK rclone SFTP windows-host → kreknin live, smoke #1 ✓ 4868 sec / 23 GB total / 5 MSSQL DBs backed up. Все 3 host'а (windows + RUVDS + VDS) теперь backup'ятся на kreknin sequentially за одну ночь. STATUS.md теперь 2 active tasks. Current scope: IIS migration в soak (kupimknigi + emspb flipped, tandemmebel excluded), infra-inventory ready.)_
|
||||
_Updated: 2026-05-24 (`windows-host-fallback-backup-daily` 🟢 closed — daily 03:00 MSK rclone SFTP windows-host → kreknin live, smoke #1 ✓ 4868 sec / 23 GB total / 5 MSSQL DBs backed up. Все 3 host'а (windows + RUVDS + VDS) backup'ятся на kreknin sequentially за одну ночь. **Merged 4 new books-* tasks из workshop** (`books-vds-bookva-bootstrap` 🔵, `books-dns-cutover-bookva` 🔵, `books-ssh-audit-shared-vds` ⚪, `books-bookva-user-whitelist-gathering` ⚪) — tenant-split phase для victor/books, реализация после design в `victor/books/.wiki/concepts/tenant-split.md`. Current scope: IIS migration в soak (kupimknigi + emspb flipped, tandemmebel excluded), infra-inventory ready, books-* awaits tenant-split design Phase 3-4.)_
|
||||
|
||||
<!--
|
||||
Status legend:
|
||||
@@ -44,3 +44,122 @@ _Updated: 2026-05-24 (`windows-host-fallback-backup-daily` 🟢 closed — daily
|
||||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: .workshop / 2026-05-22 / trigger: gitea-hostname-confusion-incident -->
|
||||
<!-- scope-expanded: 2026-05-22 — single-page → two-tier (public + admin-detailed) -->
|
||||
|
||||
---
|
||||
|
||||
## 🔵 [books-vds-bookva-bootstrap] — Ops-таска для Фазы 4 дизайна `tenant-split` из victor/books (см. `mcp__projects-meta__knowledge_get slug=concepts/tenant-split`). Поднять новый VDS для Bookva — billing на юрлицо Bookva (учредители развелись, каждое юрлицо платит инфру напрямую провайдеру).
|
||||
|
||||
**Контекст dev-source:** дизайн в victor/books `.wiki/concepts/tenant-split.md`; brainstorm trace `~/projects/.workshop/.archive/2026-05-24-books-tenant-split.md`.
|
||||
|
||||
**Direction:** Slovo остаётся на текущем VDS, Bookva переезжает на новый.
|
||||
|
||||
**Acceptance:**
|
||||
- Новый VDS у провайдера (Rusonyx или другой по предпочтению Bookva), billing-account оформлен на юрлицо Bookva.
|
||||
- Docker + traefik + certbot развёрнуты.
|
||||
- DNS `*.bookva.<tld>` готов резолвиться на новый IP (фактический switch — в `books-dns-cutover-bookva`).
|
||||
- SSH-ключи: только инженерные (core-разраб + админ Bookva, если есть). Аналитики Bookva — НЕ имеют SSH к новому VDS.
|
||||
|
||||
**Status:** blocked
|
||||
**Where I stopped:** (not started)
|
||||
**Next action:** **Pre-step:** прочитать `concepts/tenant-split.md` § «Фаза 4» в victor/books (через `mcp__projects-meta__knowledge_get slug=concepts/tenant-split` или git clone victor/books → `.wiki/concepts/tenant-split.md`).
|
||||
|
||||
1. Согласовать с учредителем Bookva: provider, configuration (CPU/RAM/disk), регистрация billing'а на юрлицо Bookva.
|
||||
2. Provision VDS, базовая настройка (firewall, fail2ban, SSH ключи).
|
||||
3. Установить Docker + docker-compose.
|
||||
4. Развернуть traefik + certbot из overlay-репо `victor/books-bookva/deploy/traefik.compose.yml`.
|
||||
5. Подготовить DNS-зону `bookva.<tld>` (создать A-records, TTL=300 для возможности быстрого switch'а).
|
||||
6. Smoke: `curl https://placeholder.bookva.<tld>` → 200 от nginx-placeholder или из traefik.
|
||||
7. Документировать в `victor/books-bookva/README.md`: hostname, IP, как ssh, runbook smoke-теста.
|
||||
8. Закрыть с note: «VDS поднят, IP=<...>, готов к stack deploy».
|
||||
**Blocker:** victor/books `tenant-split-pointers` + `overlay-repos-bootstrap-bookva-slovo` + `compose-second-mariadb-instance` + `per-tenant-backup-and-observability` (стек уже работает на текущем VDS логически — пора готовить физический переезд).
|
||||
**Branch:** n/a
|
||||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-05-24T12:02:19.507Z -->
|
||||
|
||||
---
|
||||
|
||||
## 🔵 [books-dns-cutover-bookva] — Ops-таска для Фазы 4, шаг 5 дизайна `tenant-split` из victor/books. DNS switch `*.bookva.<tld>` → новый VDS IP, с parallel-run старого bookva-стека на shared VDS 7 дней без публичного hostname.
|
||||
|
||||
**Контекст dev-source:** дизайн в victor/books `.wiki/concepts/tenant-split.md` § «Фаза 4».
|
||||
|
||||
**Acceptance:**
|
||||
- DNS `*.bookva.<tld>` (или конкретный hostname Bookva — определяется учредителем) указывает на новый VDS IP.
|
||||
- Старый bookva-стек на shared VDS остаётся запущенным, **без публичного hostname** (traefik labels убраны или disabled), доступен только по docker-сети для возможного отката.
|
||||
- Smoke с двух разных сетей (mobile + офисный wifi) — `https://<bookva-hostname>` отвечает с нового VDS.
|
||||
- Per-VDS backup'ы на новом VDS подтверждены — есть snapshot спустя 24ч после DNS-switch'а.
|
||||
- Через 7 дней parallel-run без откатов — decommission старого bookva-стека (см. Фаза 4, шаг 7 в spec).
|
||||
|
||||
**Status:** blocked
|
||||
**Where I stopped:** (not started)
|
||||
**Next action:** **Pre-step:** прочитать `concepts/tenant-split.md` § «Фаза 4, шаги 4–7» в victor/books.
|
||||
|
||||
1. Maintenance window 1–2ч (объявить за 7 дней).
|
||||
2. Финальная синхронизация: `mysqldump mariadb-bookva` на текущем VDS → `mysql` на новом VDS (если schema/data разошлись с момента Фазы 2).
|
||||
3. Smoke на новом VDS до DNS-switch'а: hosts-файл override → проверить login + base flow.
|
||||
4. DNS-switch: меняем A-record(s) для bookva-hostname на new IP. TTL=300 уже стоял (Phase 4 step 1).
|
||||
5. Через 1ч (TTL expiry + propagation): smoke с двух сетей.
|
||||
6. На старом VDS — отключить traefik labels для bookva-стека (контейнеры продолжают работать, но не доступны снаружи).
|
||||
7. **Parallel-run 7 дней.** Каждый день — smoke. Per-VDS backup на новом VDS — проверить хотя бы 1 успешный snapshot.
|
||||
8. Если за 7 дней проблем нет → закрыть с note «cutover stable». Если есть — DNS rollback на старый IP, follow-up debug task в victor/books.
|
||||
9. **Decommission** старого bookva-стека на shared VDS (отдельный шаг, не в этой таске — финальный backup в архив + `docker compose down` + volume drop).
|
||||
**Blocker:** `books-vds-bookva-bootstrap` + victor/books `pwa-redirect-handoff` (SW bump выкачен в shared API за 1–2 недели до этой таски).
|
||||
**Branch:** n/a
|
||||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-05-24T12:02:41.503Z -->
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [books-ssh-audit-shared-vds] — Ops-таска для Фазы 3, шаг 2 дизайна `tenant-split` из victor/books. SSH-аудит на текущем shared VDS перед cutover'ом. На промежуточной стадии (1 VDS, 2 стека, 2 БД) — infra-level изоляция временно скомпрометирована: пользователь с SSH к VDS может прочитать БД соседнего tenant'а через localhost. Минимизировать риск до Фазы 3.
|
||||
|
||||
**Контекст dev-source:** дизайн в victor/books `.wiki/concepts/tenant-split.md` § «Двухуровневая изоляция пользователей → Infra-level».
|
||||
|
||||
**Не блокируется ничем** — можно сделать сразу при начале Фазы 2 logical split.
|
||||
|
||||
**Acceptance:**
|
||||
- `~/.ssh/authorized_keys` на shared VDS reviewed.
|
||||
- Все ключи, не принадлежащие core-разрабу или формально-назначенному админу клиента — отозваны.
|
||||
- Особое внимание: ключи аналитиков (если они когда-то выдавались) — отозвать. Аналитики работают через app-level login, не SSH.
|
||||
- Документировать список оставшихся ключей в `OpeItcLoc03/admin/.wiki/concepts/books-ssh-access.md` (или эквивалент): owner, дата выдачи, обоснование.
|
||||
|
||||
**Status:** ready
|
||||
**Where I stopped:** (not started)
|
||||
**Next action:** 1. `ssh user@<shared-vds> 'cat ~/.ssh/authorized_keys'` или через panel провайдера.
|
||||
2. Для каждого ключа: идентифицировать owner (по комментарию в ключе, по дате последнего login через `last`, по записи в локальной памяти).
|
||||
3. Сформировать список «оставить / отозвать»:
|
||||
- **Оставить:** core-разраб (ты), формально-назначенный админ клиента (если есть).
|
||||
- **Отозвать:** аналитики, бывшие сотрудники, неопознанные ключи.
|
||||
4. Согласовать с учредителями (формально) перед удалением — особенно если есть ключи их подчинённых.
|
||||
5. Удалить отозванные ключи из `authorized_keys`. Backup старого файла в `/etc/ssh/authorized_keys.pre-audit-$(date +%F)`.
|
||||
6. Verify: `ssh -i <revoked-key> user@host` отвергается.
|
||||
7. Документировать в `OpeItcLoc03/admin/.wiki/concepts/books-ssh-access.md`.
|
||||
8. Закрыть с note: «N ключей оставлено (<owners>), M отозвано».
|
||||
**Branch:** n/a
|
||||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-05-24T12:02:58.941Z -->
|
||||
|
||||
---
|
||||
|
||||
## ⚪ [books-bookva-user-whitelist-gathering] — **Процессная** ops-таска для Фазы 3, шаг 1 дизайна `tenant-split` из victor/books. Получить от учредителя Bookva письменный список пользователей, которые допущены к Bookva-инсталляции. Без этого списка cutover не возможен — иначе утечка доступа: либо лишние юзеры получат доступ к Bookva (через копирование «всех users»), либо легитимные юзеры заблокированы (через пустой whitelist).
|
||||
|
||||
**Direction:** Bookva — новая инсталляция, начинается с whitelist'а (закрытый список). Slovo — остаётся на текущем стеке, получает копию всех текущих users (статус-кво).
|
||||
|
||||
**Контекст dev-source:** дизайн в victor/books `.wiki/concepts/tenant-split.md` § «Двухуровневая изоляция пользователей → App-level» и § «Фаза 3, шаг 1».
|
||||
|
||||
**Не блокируется ничем** — можно начинать gathering сразу, лаг до cutover'а может быть значительным.
|
||||
|
||||
**Acceptance:**
|
||||
- Письменный список от учредителя Bookva (email или подписанный документ): ФИО + role (если знают).
|
||||
- Список зафиксирован в `OpeItcLoc03/admin/.wiki/concepts/books-bookva-whitelist.md` или в отдельной таблице.
|
||||
- Для каждой строки списка сверка с текущей `users`-таблицей shared БД: user существует / роль соответствует / email актуален.
|
||||
- Любые расхождения (запрошенный user не существует в shared / роль другая) — обработаны: создать новый user в Bookva-БД post-cutover ИЛИ скорректировать список с учредителем.
|
||||
|
||||
**Status:** ready
|
||||
**Where I stopped:** (not started)
|
||||
**Next action:** 1. Отправить учредителю Bookva формальный запрос (email/мессенджер): «Для tenant-split нужен список пользователей, которые останутся в Bookva после разделения. Формат: ФИО + роль + email/login. Список будет применён на cutover'е как whitelist».
|
||||
2. Дождаться ответа (это может занять дни/недели — нормально).
|
||||
3. Получив список — сверить с `users`-таблицей shared БД:
|
||||
```sql
|
||||
SELECT id, login, email, role FROM users WHERE email IN (<list>) AND deleted_at IS NULL;
|
||||
```
|
||||
4. Разобрать расхождения с учредителем (missing / role mismatch / inactive).
|
||||
5. Зафиксировать финальный список в `OpeItcLoc03/admin/.wiki/concepts/books-bookva-whitelist.md` (или в local-only encrypted file если NDA-чувствительно).
|
||||
6. Финальный список становится input'ом для Фазы 3, шаг 1: при настройке Bookva-БД в неё попадают **только** эти users.
|
||||
7. Закрыть с note: «whitelist (N users) подтверждён учредителем, готов к применению на cutover'е».
|
||||
**Branch:** n/a
|
||||
<!-- created-by: OpeItcLoc03@DESKTOP-NSEF0UK / from: OpeItcLoc03/workshop / 2026-05-24T12:03:18.548Z -->
|
||||
|
||||
Reference in New Issue
Block a user