meta(admin): MinIO split Track A DONE — books-vds minio 2020→2025 (shared + bookva), backup paths updated
- shared minio (stack 30): mirror 17 buckets → /usr/docker/minio/data-new, Portainer swap, traefik/imgproxy/books apps GREEN - bookva-minio (stack 49): mirror books (38692 obj) → volume bookva-minio-data-new (docker volume rename unavailable on old daemon) - backup script (repo + host /opt/stacks/backup/run.sh) repointed to live paths - runbook Track A progress + gotchas (mc --disable-multipart, sequential mirrors on 3.8G host, CRLF secret) - handoff for next session (retire old data in 48h, kreknin tomorrow) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,44 +1,55 @@
|
|||||||
---
|
---
|
||||||
_last_updated_: 2026-08-03T13:08:14Z
|
_last_updated_: 2026-08-03T14:29:08Z
|
||||||
session_id: 2026-08-03-labtools-catalog-provider-live
|
session_id: 2026-08-03-minio-split-track-a-done
|
||||||
prev_session_id: 2026-08-03-labtools-cylindrical-rootcause-handoff
|
prev_session_id: 2026-08-03-labtools-catalog-provider-live
|
||||||
---
|
---
|
||||||
|
|
||||||
# Next session handoff
|
# Next session handoff
|
||||||
|
|
||||||
## Эта сессия — labtools cylindrical ЗАКРЫТ (catalog provider core 0.26.6, LIVE GREEN). Крекнин — завтра (Алексей готов). MinIO split Track A — следующая сессия (директива user'а).
|
## MinIO split Track A — ✅ DONE 2026-08-03. Оба books-vds minio на 2025. Крекнин — завтра (Алексей). Бэкапы вернуть после ремонта.
|
||||||
|
|
||||||
### 1. labtools.ru cylindrical — 🟢 CLOSED, LIVE GREEN
|
### 1. MinIO split Track A — ЗАКРЫТ (live GREEN, прозрачный апгрейд)
|
||||||
Отмашка snolla (core 0.26.5, store-only) НЕ чинила: labtools — **catalog-модуль**, store нет, provider = `LinkedCatalogProductsProvider`. Реализован полный диспетчер `packages/core/lib/viewModels/linkedItemResolver.js` (порт legacy `ILinkedEntitiesProvider`): dispatch по provider-строке → catalog (`CatalogsService.findProductById`) / blog (`findPostByGlobalId`) / page (`getPageById`) / store (fallback). **core 0.26.6** published (verdaccio), сьют **263/263**, commit `5f0f996`. labtools `yarn.lock` → 0.26.6 (`d263e1c`), стек 17 swap (env 8/8), **LIVE GREEN**: cylindrical 0 empty href/src, 8 карточек гидратированы (round-xrf/vacuum-ir/…). Таска `content-page-linked-products-hydration` закрыта; snolla подтвердил + вики-ингест (`related-products-linked-items.md`). **Rollback = `0dc0b4e`.**
|
Оба инстанса books-vds переведены `RELEASE.2020-07-13` → `RELEASE.2025-09-07T16-13-09Z` (тот же digest что vds minio, креды `AKIAJ2…` не тронуты):
|
||||||
|
- **shared `minio` (стек 30, minio.kzntsv.site):** зеркало 17 бакетов → `/usr/docker/minio/data-new`, Portainer swap, traefik/imgproxy/books-api/task-runner/job-scheduler — GREEN. Rollback: старый `/usr/docker/minio/data` жив.
|
||||||
|
- **`bookva-minio` (стек 49):** зеркало `books` (38692 obj) → том **`bookva-minio-data-new`** (rename НЕдоступен — старый docker daemon прячет `volume rename`; имя осталось `-new`). bookva-api/task-runner GREEN. Rollback: `bookva-minio-data` (2020) + 2020 image.
|
||||||
|
- **Бэкап-скрипт обновлён** (репо + хост `/opt/stacks/backup/run.sh`) на новые пути: `/usr/docker/minio/data-new`, `/var/lib/docker/volumes/bookva-minio-data-new`.
|
||||||
|
- Gotchas записаны в runbook Track A (§ прогресс): mc multipart-баг → `--disable-multipart`; параллельные зеркала → транзиентные сбои на 3.8G хосте → **последовательно + retry**; CRLF compose → `tr -d '\r'`; 2025 minio на kernel 3.10 (CentOS 7 EOL) — WARN о perf, работает.
|
||||||
|
|
||||||
### 2. Крекнин-ремонт — ЗАВТРА (координация с Алексеем)
|
### 2. Retire старых данных — ⏳ ЧЕРЕЗ 48ч (≈ 2026-08-05)
|
||||||
План готов (`.tasks/kreknin-repair-md3-rebuild.md` + `.wiki/entities/kreknin-synology.md`): power-off → перетык SATA (sdb питание+data) → power-on → Repair md3 → btrfs scrub → VMM. **Бэкапы выключены с 31.07** (vds-backup 05:00 + books-vds-backup 06:00, cron закомментированы) — вернуть после ремонта, это критичный хвост. Rescue-диск `/mnt/rescue` (1.1TB) — НЕ отключать до конца ремонта. Решение: оставить как доп. копию или отключить — после ремонта.
|
Старые 2020-данные держать как откат до ~2026-08-05, потом:
|
||||||
|
- `rm -rf /usr/docker/minio/data` (12G, shared 2020) — ТОЛЬКО после подтверждения стабильности.
|
||||||
|
- `docker volume rm bookva-minio-data` (2020) — после подтверждения.
|
||||||
|
- До этого: rollback = Portainer PUT стека 30/49 на 2020 image + старый путь/том.
|
||||||
|
|
||||||
### 3. MinIO split Track A — СЛЕДУЮЩАЯ СЕССИЯ (user directive)
|
### 3. Крекнин-ремонт — ЗАВТРА (2026-08-04, координация с Алексеем)
|
||||||
books-vds 2020 → vds 2025. Сделано: bucket `variant-cache` (2026-07-31). Остальное TODO. Runbook: `.wiki/concepts/minio-split-cutover-runbook.md`.
|
План: `.tasks/kreknin-repair-md3-rebuild.md` + `.wiki/entities/kreknin-synology.md`. Power-off → перетык SATA → Repair md3 → scrub → VMM. **Бэкапы выключены с 31.07** (vds-backup 05:00 + books-vds-backup 06:00) — **вернуть после ремонта** (критичный хвост). Rescue `/mnt/rescue` не отключать. Примечание: бэкап-скрипт books-vds уже указывает на новые minio-пути — ок.
|
||||||
|
|
||||||
### 4. Кэш тасков стейл — refresh ОТЛОЖЕН
|
### 4. Кэш тасков стейл — refresh ОТЛОЖЕН
|
||||||
projects-meta `tasks.json` synced 2026-07-22 (12 дней, `stale: true`). `meta_restart_poller force=false` отказал: 4 активных агента (victor/tandemmebel.ru, victor/O_C-Phazerville, victor/snolla, victor/pilorama98.ru). **force=true убьёт их работу — НЕ делать.** Когда агенты освободятся → graceful restart → кэш обновится.
|
projects-meta tasks.json sync 2026-07-22 (stale). `meta_restart_poller force=false` отказал (4 активных агента). НЕ force-restart пока агенты заняты.
|
||||||
|
|
||||||
### Спроси user'а
|
### Спроси user'а
|
||||||
- Крекнин: подтвердить время power-off с Алексеем (завтра). Rescue-диск после ремонта — оставить/отключить?
|
- Retire старых minio-данных: подтвердить через ~48ч (или сделать это самому, если GREEN держится).
|
||||||
|
- books-vds imgproxy (стек 29) — вывести из эксплуатации? (P3; сейчас imgproxy.kzntsv.site → vds, books-vds imgproxy читает minio:9000, кажется мёртвым грузом).
|
||||||
|
- A3: чистка bookva-дублей в shared `books` (минор, не срочно).
|
||||||
|
|
||||||
### Открытые треки
|
### Открытые треки
|
||||||
| Трек | Готовность | Entry-point |
|
| Трек | Готовность | Entry-point |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| MinIO split Track A | открыт | `minio-split-cutover-runbook` |
|
| Retire старых minio-данных (48ч) | ⏳ до 2026-08-05 | `minio-split-cutover-runbook` §P3 |
|
||||||
| kreknin-repair-md3-rebuild | завтра | `.tasks/kreknin-repair-md3-rebuild.md` |
|
| kreknin-repair-md3-rebuild | завтра | `.tasks/kreknin-repair-md3-rebuild.md` |
|
||||||
|
| Бэкапы (vds+books-vds) вернуть | после kreknin-ремонта | cron на хостах |
|
||||||
|
| P3 imgproxy stack 29 retire / A3 дубли | опционально | runbook §P3 |
|
||||||
| Кэш тасков refresh | отложен | `meta_restart_poller` после освобождения агентов |
|
| Кэш тасков refresh | отложен | `meta_restart_poller` после освобождения агентов |
|
||||||
|
|
||||||
### Не делать (preemptive guards)
|
### Не делать (preemptive guards)
|
||||||
- **НЕ force-restart поллера** пока активные агенты — убивает чужую работу.
|
- **НЕ force-restart поллера** пока активные агенты.
|
||||||
- **НЕ лезть в snolla-код самому** — через snolla-сессию (таска/инбокс), .admin только деплоит (память admin-hands-snolla-repo-work-to-snolla-session).
|
- **НЕ лезть в snolla-код самому** — через snolla-сессию (.admin деплоит).
|
||||||
- Ребутить kreknin пока sda-кабель не зафикшен; не трогать rescue-диск; не забыть вернуть бэкапы.
|
- НЕ трогать rescue-диск; НЕ забыть вернуть бэкапы после ремонта.
|
||||||
|
- НЕ удалять старые minio-данные до 48ч окна (и без подтверждения).
|
||||||
- НЕ PS для Portainer (кириллица); креды → `pass`.
|
- НЕ PS для Portainer (кириллица); креды → `pass`.
|
||||||
|
|
||||||
### Коммиты сессии (.admin)
|
### Коммиты сессии (.admin)
|
||||||
- `61f6afd2` compose → d263e1c; `c0a8d12b` cylindrical CLOSED; (с этим хэндоффом: on-snolla-vds-migration CLOSED + NEXT_SESSION).
|
- `scripts/books-vds-backup-daily-kreknin/{run.sh,README.md}`, `.wiki/entities/books-vds.md`, `.wiki/concepts/minio-split-cutover-runbook.md` — Track A done + пути бэкапа на новые тома. (с этим хэндоффом).
|
||||||
|
|
||||||
### Memory updates
|
### Memory updates
|
||||||
- `snolla-two-product-modules-store-vs-catalog` — catalog-сайты без store; linked-item dispatch по provider-строке.
|
- `books-vds-minio-upgraded-2025-volume-names` — новые пути живых данных (data-new, bookva-minio-data-new), rename недоступен, mc `--disable-multipart`, последовательные зеркала.
|
||||||
- `admin-hands-snolla-repo-work-to-snolla-session` — snolla-код не трогать, через snolla-сессию.
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ updated: 2026-07-30
|
|||||||
| **B3v3 labtools.pro** | ✅ LIVE 2026-07-30 | bump `@snollajs/snolla 0.42.1→0.43.2` + resolutions (commits `12f8992` bump + `a106622` yarn.lock реген — обязателен, иначе `yarn install --immutable` падает YN0028). Endpoint fix `6c7ea88` в master, но в бегущем образе `0610432` (v2) его не было. Build на VDS (archive → `~/build/labtools-pro`) → `registry.kzntsv.site/labtools-pro:a106622`(+latest), digest `2152642c4b17`. Throwaway staging :5081 parity-gate GREEN: `/`+nav+catalog 4-байт diff = `og:url`/`og:image` request-host (benign), redirects IDENT, robots/sitemap IDENT (7 детей == live), theme `lato.css` 200 9994B md5-identical (v3 S3-direct), order-parity press-forms 12 изделий. Portainer PUT stack 19 env-preserving (8/8, node in-memory put-stack), `prune:false pullImage:true mem_limit 512m`. Live smoke GREEN: nav+каталог+продукты 200, theme 200 9994B, TLS CN=labtools.pro не тронут (LE до Sep 30). **Rollback = `0610432`** (v2, жив). См. [[labtools.pro-vds-deploy-runbook]] §0.43.2. |
|
| **B3v3 labtools.pro** | ✅ LIVE 2026-07-30 | bump `@snollajs/snolla 0.42.1→0.43.2` + resolutions (commits `12f8992` bump + `a106622` yarn.lock реген — обязателен, иначе `yarn install --immutable` падает YN0028). Endpoint fix `6c7ea88` в master, но в бегущем образе `0610432` (v2) его не было. Build на VDS (archive → `~/build/labtools-pro`) → `registry.kzntsv.site/labtools-pro:a106622`(+latest), digest `2152642c4b17`. Throwaway staging :5081 parity-gate GREEN: `/`+nav+catalog 4-байт diff = `og:url`/`og:image` request-host (benign), redirects IDENT, robots/sitemap IDENT (7 детей == live), theme `lato.css` 200 9994B md5-identical (v3 S3-direct), order-parity press-forms 12 изделий. Portainer PUT stack 19 env-preserving (8/8, node in-memory put-stack), `prune:false pullImage:true mem_limit 512m`. Live smoke GREEN: nav+каталог+продукты 200, theme 200 9994B, TLS CN=labtools.pro не тронут (LE до Sep 30). **Rollback = `0610432`** (v2, жив). См. [[labtools.pro-vds-deploy-runbook]] §0.43.2. |
|
||||||
| **B3v3 emspb.ru** | ✅ LIVE 2026-07-30 | bump `@snollajs/snolla 0.42.1→0.43.2` + resolutions (commit `5afd8a1`, apps/web + root). Endpoint fix `218c3ae` в master, но в бегущем образе `95a5c42` (v2) его не было — v3 cutover заодно перевёл S3-direct read на vds minio. Build на VDS (archive → `~/build/emspb`) → `registry.kzntsv.site/emspb:5afd8a1`(+latest), digest `72bb59fc…`. Throwaway staging :5082 parity-gate GREEN: robots md5 identical (31B), sitemap 29 locs == live, 29/29 routes 200 (+2B host-context benign), theme assets 7/7 md5 IDENTICAL (v3 S3-direct: snolla-framework/bootstrap/toolbox/theme/slick + images/2.jpg + /images/3.jpg 115618B). Portainer PUT stack 18 env-preserving (8/8, node in-memory put-stack), `prune:false pullImage:true mem_limit 512m`. Live smoke GREEN: nav 200, /services+/index.php 404, theme assets md5 LIVE==staging, redirects 301 byte-identical post-cutover, apex 200. TLS не тронут. **Rollback = `95a5c42`** (v2, жив). См. [[emspb-vds-deploy-runbook]] §0.43.2. |
|
| **B3v3 emspb.ru** | ✅ LIVE 2026-07-30 | bump `@snollajs/snolla 0.42.1→0.43.2` + resolutions (commit `5afd8a1`, apps/web + root). Endpoint fix `218c3ae` в master, но в бегущем образе `95a5c42` (v2) его не было — v3 cutover заодно перевёл S3-direct read на vds minio. Build на VDS (archive → `~/build/emspb`) → `registry.kzntsv.site/emspb:5afd8a1`(+latest), digest `72bb59fc…`. Throwaway staging :5082 parity-gate GREEN: robots md5 identical (31B), sitemap 29 locs == live, 29/29 routes 200 (+2B host-context benign), theme assets 7/7 md5 IDENTICAL (v3 S3-direct: snolla-framework/bootstrap/toolbox/theme/slick + images/2.jpg + /images/3.jpg 115618B). Portainer PUT stack 18 env-preserving (8/8, node in-memory put-stack), `prune:false pullImage:true mem_limit 512m`. Live smoke GREEN: nav 200, /services+/index.php 404, theme assets md5 LIVE==staging, redirects 301 byte-identical post-cutover, apex 200. TLS не тронут. **Rollback = `95a5c42`** (v2, жив). См. [[emspb-vds-deploy-runbook]] §0.43.2. |
|
||||||
| **B3v3 tandemmebel.ru** | ✅ LIVE 2026-07-30 | bump `@snollajs/snolla 0.42.1→0.43.2` + resolutions (commit `9d51c09`, apps/web + root) + реген `yarn.lock` (single `@smithy/signature-v4@5.3.11`). Endpoint fix `f4ddce6` в master, но в бегущем образе `8df10ee` (v2) его не было — v3 cutover заодно перевёл S3-direct read на vds minio. Build на VDS (archive → `~/build/tandemmebel`) → `registry.kzntsv.site/tandemmebel:9d51c09`(+latest), digest `d14982c24dc7…`, 476MB (v2 8df10ee 583MB — v3 leaner). Throwaway staging :5020 parity-gate GREEN: robots md5 `a01e4c60…` identical (87B), sitemap 5 sub-sitemaps → **184 locs == live 184 IDENTICAL** (0 prod-only/new-only), self-consistency 183×200 + 1×404 (`/articles` parity benign), `/` +557B host-context benign, theme `Gotham-Pro.css` 200 4436B (v3 S3-direct). Portainer PUT stack 20 env-preserving (8/8, node in-memory put-stack — кириллица compose), `prune:false pullImage:true mem_limit 512m`. Live smoke GREEN: `/` 200 45742B, `/projects` 200, sitemap 184 locs, robots md5 identical, theme 200 4436B. TLS CN=tandemmebel.ru не тронут (LE до Oct 10). **Rollback = `8df10ee`** (v2, жив). См. [[tandemmebel-vds-deploy-runbook]] §0.43.2. **6/6 v3 сайтов GREEN — тираж v3 ЗАВЕРШЁН.** |
|
| **B3v3 tandemmebel.ru** | ✅ LIVE 2026-07-30 | bump `@snollajs/snolla 0.42.1→0.43.2` + resolutions (commit `9d51c09`, apps/web + root) + реген `yarn.lock` (single `@smithy/signature-v4@5.3.11`). Endpoint fix `f4ddce6` в master, но в бегущем образе `8df10ee` (v2) его не было — v3 cutover заодно перевёл S3-direct read на vds minio. Build на VDS (archive → `~/build/tandemmebel`) → `registry.kzntsv.site/tandemmebel:9d51c09`(+latest), digest `d14982c24dc7…`, 476MB (v2 8df10ee 583MB — v3 leaner). Throwaway staging :5020 parity-gate GREEN: robots md5 `a01e4c60…` identical (87B), sitemap 5 sub-sitemaps → **184 locs == live 184 IDENTICAL** (0 prod-only/new-only), self-consistency 183×200 + 1×404 (`/articles` parity benign), `/` +557B host-context benign, theme `Gotham-Pro.css` 200 4436B (v3 S3-direct). Portainer PUT stack 20 env-preserving (8/8, node in-memory put-stack — кириллица compose), `prune:false pullImage:true mem_limit 512m`. Live smoke GREEN: `/` 200 45742B, `/projects` 200, sitemap 184 locs, robots md5 identical, theme 200 4436B. TLS CN=tandemmebel.ru не тронут (LE до Oct 10). **Rollback = `8df10ee`** (v2, жив). См. [[tandemmebel-vds-deploy-runbook]] §0.43.2. **6/6 v3 сайтов GREEN — тираж v3 ЗАВЕРШЁН.** |
|
||||||
| Track A (books-vds minio 2020→2025) | ⏳ TODO | transparent, отдельно от Track B |
|
| Track A (books-vds minio 2020→2025) | ✅ DONE 2026-08-03 | **Оба инстанса переведены** на `RELEASE.2025-09-07T16-13-09Z` (тот же digest что vds). Shared `minio` (стек 30): зеркало всех 17 бакетов → `/usr/docker/minio/data-new`, Portainer swap, traefik/imgproxy работают. `bookva-minio` (стек 49): зеркало `books` (38692 obj) → том `bookva-minio-data-new` (docker volume rename НЕдоступен — старый daemon API; живёт на -new, бэкап-скрипт обновлён). Старые данные (`/usr/docker/minio/data`, `bookva-minio-data`) сохранены 48ч. Gotchas: (1) mc multipart-баг `ContentLength=16777216` на крупных файлах → `--disable-multipart`; (2) транзиентные `Connection closed by foreign host` при дефиците памяти (3.8G) при ПАРАЛЛЕЛЬНЫХ зеркалах → последовательно + retry-цикл; (3) compose файлы CRLF → `\r` в секрете ломает Authorization → `tr -d '\r'`; (4) Portainer stack file — через API `/api/stacks/{id}/file`. |
|
||||||
| **variant-cache bucket на vds 2025** | ✅ DONE 2026-07-31 | v3 cutover перевёл сайты на vds MinIO 2025, но `variant-cache` bucket не создали там (был на books-vds 2020). NoSuchBucket → 500 на ALL sharp gallery-images всех 6 v3 сайтов с 2026-07-30 (gate проверял theme CSS, не gallery URLs). Fix: `mc mb vds/variant-cache` (пустой, регенерируем). maljarka portfolio 34/34 → 200. См. memory `variant-cache-bucket-missing-on-vds-2025` + [[maljarka-vds-deploy-runbook]] §Гочи. |
|
| **variant-cache bucket на vds 2025** | ✅ DONE 2026-07-31 | v3 cutover перевёл сайты на vds MinIO 2025, но `variant-cache` bucket не создали там (был на books-vds 2020). NoSuchBucket → 500 на ALL sharp gallery-images всех 6 v3 сайтов с 2026-07-30 (gate проверял theme CSS, не gallery URLs). Fix: `mc mb vds/variant-cache` (пустой, регенерируем). maljarka portfolio 34/34 → 200. См. memory `variant-cache-bucket-missing-on-vds-2025` + [[maljarka-vds-deploy-runbook]] §Гочи. |
|
||||||
| B4 .NET catch-all админ s3 endpoint | ✅ DONE 2026-07-30 | `C:\sites\snolla\Web.config` `<fileStorageClients>` 6/6 endpoint `minio.kzntsv.site`→`minio.vds.kzntsv.site` (galleries/assets/themes×4). region `us-east-1`, forcePathStyle (bin: AWSSDK.Core/S3 v3 модульный, bindingRedirect AWSSDK 1.3.19 — legacy-мусор). Pre-flip verify: `MINIO_ROOT_USER`==Web.config accessKey `AKIAJ2YJP72W6ZHCRE6Q` (reuse, no rotation) → mc alias Web.config-кредами → `minio.vds.kzntsv.site` → galleries/assets/themes читаются (B1 mirror жив). IIS auto-recycle по Web.config; login 200. **Превью:** оказался pre-existing баг S3-провайдера (НЕ от flip): `GalleriesStorage`/`AssetsStorage` ctor падал `KeyNotFoundException` на `config["ownerId"]` — контроллер-пути gallery preview/upload/delete и media-assets передавали только `siteContext`. Self-test провайдера gap — покрывал `GalleryImagesService` + unit-тесты `S3Ids`/`S3ObjectKey`, но preview-контроллер не тестировался. Фикс в провайдере (drop-in 1 DLL, MoreThenCms.FileStorage.S3.dll — `ToolsController` в `MoreThenCms.Web.dll` не собирается на боксе): `S3CloudStorage.ReadOwnerId` null-safe (explicit ownerId винит; иначе `siteContext.AssetsOwnerId`==SiteId; пусто → null без throw). Тесты 21/21 (4 новых). Live-verified: превью грузятся против vds MinIO. Коммит MoreThenCms `09cb072d`. Backup: `Web.config.b4.bak` + `MoreThenCms.FileStorage.S3.dll.b4.bak`. |
|
| B4 .NET catch-all админ s3 endpoint | ✅ DONE 2026-07-30 | `C:\sites\snolla\Web.config` `<fileStorageClients>` 6/6 endpoint `minio.kzntsv.site`→`minio.vds.kzntsv.site` (galleries/assets/themes×4). region `us-east-1`, forcePathStyle (bin: AWSSDK.Core/S3 v3 модульный, bindingRedirect AWSSDK 1.3.19 — legacy-мусор). Pre-flip verify: `MINIO_ROOT_USER`==Web.config accessKey `AKIAJ2YJP72W6ZHCRE6Q` (reuse, no rotation) → mc alias Web.config-кредами → `minio.vds.kzntsv.site` → galleries/assets/themes читаются (B1 mirror жив). IIS auto-recycle по Web.config; login 200. **Превью:** оказался pre-existing баг S3-провайдера (НЕ от flip): `GalleriesStorage`/`AssetsStorage` ctor падал `KeyNotFoundException` на `config["ownerId"]` — контроллер-пути gallery preview/upload/delete и media-assets передавали только `siteContext`. Self-test провайдера gap — покрывал `GalleryImagesService` + unit-тесты `S3Ids`/`S3ObjectKey`, но preview-контроллер не тестировался. Фикс в провайдере (drop-in 1 DLL, MoreThenCms.FileStorage.S3.dll — `ToolsController` в `MoreThenCms.Web.dll` не собирается на боксе): `S3CloudStorage.ReadOwnerId` null-safe (explicit ownerId винит; иначе `siteContext.AssetsOwnerId`==SiteId; пусто → null без throw). Тесты 21/21 (4 новых). Live-verified: превью грузятся против vds MinIO. Коммит MoreThenCms `09cb072d`. Backup: `Web.config.b4.bak` + `MoreThenCms.FileStorage.S3.dll.b4.bak`. |
|
||||||
| B5 Obsidian Remotely Save endpoint | ✅ DONE 2026-07-30 | endpoint flipped `minio.kzntsv.site`→`minio.vds.kzntsv.site` в vault `C:\Users\vitya\obsidian\main\.obsidian\plugins\remotely-save\data.json` (rev+base64 обфускация), bucket `obsidian`, s3Region `us-east-1`, forcePathStyle. Verified деобфускацией config-блока. См. memory `obsidian-remotely-save-endpoint-after-mirror` (менять ТОЛЬКО после B1 миррора — что и было). |
|
| B5 Obsidian Remotely Save endpoint | ✅ DONE 2026-07-30 | endpoint flipped `minio.kzntsv.site`→`minio.vds.kzntsv.site` в vault `C:\Users\vitya\obsidian\main\.obsidian\plugins\remotely-save\data.json` (rev+base64 обфускация), bucket `obsidian`, s3Region `us-east-1`, forcePathStyle. Verified деобфускацией config-блока. См. memory `obsidian-remotely-save-endpoint-after-mirror` (менять ТОЛЬКО после B1 миррора — что и было). |
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ Post-migration 2026-05-25 (см. [[../concepts/portainer-stack-management-books-
|
|||||||
| 27 | `chrome` | chrome | — | Puppeteer browser for PDFs / scraping |
|
| 27 | `chrome` | chrome | — | Puppeteer browser for PDFs / scraping |
|
||||||
| 28 | `proxy-chain` | proxy-chain | `/usr/docker/proxy-chain/config` | upstream HTTP-proxy chain, internal-only |
|
| 28 | `proxy-chain` | proxy-chain | `/usr/docker/proxy-chain/config` | upstream HTTP-proxy chain, internal-only |
|
||||||
| 29 | `imgproxy` | imgproxy + imgproxy-nginx | `/usr/docker/imgproxy/nginx/{cache,nginx.conf}` | serves `imgproxy.kzntsv.site`, S3→minio |
|
| 29 | `imgproxy` | imgproxy + imgproxy-nginx | `/usr/docker/imgproxy/nginx/{cache,nginx.conf}` | serves `imgproxy.kzntsv.site`, S3→minio |
|
||||||
| 30 | `minio` | minio | `/usr/docker/minio/data` | S3 blob store, `minio.kzntsv.site` |
|
| 30 | `minio` | minio | `/usr/docker/minio/data-new` | S3 blob store, `minio.kzntsv.site` (MinIO 2025 upgrade 2026-08-03; old `/usr/docker/minio/data` kept 48h for rollback) |
|
||||||
| 31 | `mongo` | mongo | `/usr/docker/mongo/data/{db,configdb}` | shared MongoDB 4.2 |
|
| 31 | `mongo` | mongo | `/usr/docker/mongo/data/{db,configdb}` | shared MongoDB 4.2 |
|
||||||
| 32 | `books-db` | books-db | `/usr/docker/books-db/data` | MariaDB latest, books application DB |
|
| 32 | `books-db` | books-db | `/usr/docker/books-db/data` | MariaDB latest, books application DB |
|
||||||
| 33 | `elasticsearch` | elasticsearch | `/usr/docker/elasticsearch/{data,snapshots}` | ES 7.10.0 + `path.repo=/snapshots` для backup + `reindex.remote.whitelist=elasticold.kzntsv.site:443` (added 2026-05-25 для migration) |
|
| 33 | `elasticsearch` | elasticsearch | `/usr/docker/elasticsearch/{data,snapshots}` | ES 7.10.0 + `path.repo=/snapshots` для backup + `reindex.remote.whitelist=elasticold.kzntsv.site:443` (added 2026-05-25 для migration) |
|
||||||
@@ -116,7 +116,7 @@ Daily 06:00 MSK → kreknin. См. [[../sources/books-vds-backup-daily-kreknin-2
|
|||||||
- DB dumps (slovo): books-db (mariadb), mongo (shared), books-job-scheduler-mongo
|
- DB dumps (slovo): books-db (mariadb), mongo (shared), books-job-scheduler-mongo
|
||||||
- DB dumps (bookva, added 2026-06-12): bookva-db (mariadb, тот же root pw что books-db), bookva-mongo (no-auth)
|
- DB dumps (bookva, added 2026-06-12): bookva-db (mariadb, тот же root pw что books-db), bookva-mongo (no-auth)
|
||||||
- ES snapshots via REST API (file repo `kreknin`): slovo `elasticsearch` + `bookva-es` (раздельные репо/каталоги)
|
- ES snapshots via REST API (file repo `kreknin`): slovo `elasticsearch` + `bookva-es` (раздельные репо/каталоги)
|
||||||
- rsync bind paths + dumps + `bookva-minio-data` (named volume, raw) + `/usr/docker/bookva-es` (snapshot repo) + `/opt/books/` + `/etc/{ssh,hosts,cron.d}` + `/root/.ssh` → `vitya@kreknin:/volume1/NetBackup/books-vds/<date>/`
|
- rsync bind paths + dumps + `bookva-minio-data-new` (named volume, raw; live after 2026-08-03 upgrade — old `bookva-minio-data` kept 48h) + `/usr/docker/bookva-es` (snapshot repo) + `/opt/books/` + `/etc/{ssh,hosts,cron.d}` + `/root/.ssh` → `vitya@kreknin:/volume1/NetBackup/books-vds/<date>/`
|
||||||
- ntfy `BOOKS-VDS backup OK <date>` + email
|
- ntfy `BOOKS-VDS backup OK <date>` + email
|
||||||
- Retention 7 daily snapshots
|
- Retention 7 daily snapshots
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ Schedule: `0 6 * * *` Europe/Moscow (after VDS-infra at 05:00, after windows-hos
|
|||||||
| Mongo (shared) | `mongodump --archive` w/ root auth | container `mongo` |
|
| Mongo (shared) | `mongodump --archive` w/ root auth | container `mongo` |
|
||||||
| Mongo (job-scheduler) | `mongodump --archive` no-auth | container `books-job-scheduler-mongo` |
|
| Mongo (job-scheduler) | `mongodump --archive` no-auth | container `books-job-scheduler-mongo` |
|
||||||
| Elasticsearch | REST snapshot API → fs repo `kreknin` → rsync | container `elasticsearch` (path.repo=/snapshots) |
|
| Elasticsearch | REST snapshot API → fs repo `kreknin` → rsync | container `elasticsearch` (path.repo=/snapshots) |
|
||||||
| MinIO blobs | rsync direct (immutable content-addressed) | `/usr/docker/minio/data` |
|
| MinIO blobs | rsync direct (immutable content-addressed) | `/usr/docker/minio/data-new` |
|
||||||
| App configs | rsync | `/opt/books/{api,job-scheduler,task-runner,ntfy,books-ops-mcp}` |
|
| App configs | rsync | `/opt/books/{api,job-scheduler,task-runner,ntfy,books-ops-mcp}` |
|
||||||
| Traefik state | rsync | `/usr/docker/traefik/{letsencrypt,data}` (acme.json + config) |
|
| Traefik state | rsync | `/usr/docker/traefik/{letsencrypt,data}` (acme.json + config) |
|
||||||
| System config | rsync | `/etc/{ssh,hosts,cron.d}`, `/root/.ssh` |
|
| System config | rsync | `/etc/{ssh,hosts,cron.d}`, `/root/.ssh` |
|
||||||
|
|||||||
@@ -202,8 +202,8 @@ rsync -aHh --info=stats2 --delete $LINK_DEST_ARG \
|
|||||||
/opt/books \
|
/opt/books \
|
||||||
/usr/docker/elasticsearch/snapshots \
|
/usr/docker/elasticsearch/snapshots \
|
||||||
/usr/docker/bookva-es \
|
/usr/docker/bookva-es \
|
||||||
/usr/docker/minio/data \
|
/usr/docker/minio/data-new \
|
||||||
/var/lib/docker/volumes/bookva-minio-data \
|
/var/lib/docker/volumes/bookva-minio-data-new \
|
||||||
/usr/docker/traefik/letsencrypt \
|
/usr/docker/traefik/letsencrypt \
|
||||||
/usr/docker/traefik/data \
|
/usr/docker/traefik/data \
|
||||||
/etc/ssh \
|
/etc/ssh \
|
||||||
@@ -244,11 +244,11 @@ Dest: kreknin:$DEST_PATH
|
|||||||
|
|
||||||
Components:
|
Components:
|
||||||
- /opt/books/{api,job-scheduler,task-runner,ntfy,books-ops-mcp}
|
- /opt/books/{api,job-scheduler,task-runner,ntfy,books-ops-mcp}
|
||||||
- /usr/docker/{minio/data, elasticsearch/snapshots, traefik/{letsencrypt,data}}
|
- /usr/docker/{minio/data-new, elasticsearch/snapshots, traefik/{letsencrypt,data}}
|
||||||
- /etc/{ssh,hosts,cron.d}
|
- /etc/{ssh,hosts,cron.d}
|
||||||
- /root/.ssh
|
- /root/.ssh
|
||||||
- DB dumps: books-db (mariadb), mongo (shared), books-job-scheduler-mongo, bookva-db (mariadb), bookva-mongo
|
- DB dumps: books-db (mariadb), mongo (shared), books-job-scheduler-mongo, bookva-db (mariadb), bookva-mongo
|
||||||
- bookva-minio: raw volume (bookva-minio-data)
|
- bookva-minio: raw volume (bookva-minio-data-new)
|
||||||
- ES snapshots: $ES_SNAP (slovo elasticsearch + bookva-es, separate repos)
|
- ES snapshots: $ES_SNAP (slovo elasticsearch + bookva-es, separate repos)
|
||||||
|
|
||||||
Log: $LOG"
|
Log: $LOG"
|
||||||
|
|||||||
Reference in New Issue
Block a user