Разбор 500 на /admin/assets/<owner>/delete → корень ACL (app pool RX-only на App_Data после scp-миграции) → полная развязка хранилища CMS: - S3 FileStorage провайдер (MoreThenCms.FileStorage.S3) построен (координация с интерн-сессией) и раскатан LIVE на прод RUVDS: 6 контентных классов web.config → S3/MinIO, кэши остались Local. Смок 7 тенантов 200/301, 0×500, S3-read byte-parity. Upload-гоча: UseChunkEncoding=false (MinIO ⊥ AWSSDK aws-chunked). - Весь локальный контент RUVDS → MinIO (galleries 5.3G, themes 2.7G, maxMind); imageCache-блоат (2.1G) выпилен из бакета themes. - stostayer.old определён как stale-копия (не мигрировать). Новый concept: snolla-admin-appdata-acl-500-after-scp-migration. Трекеры: morethencms-s3-filestorage-provider (LIVE), reconcile-local-assets-to-minio (done). Rollback: web.config.bak-pre-s3-2026-07-03 на хосте. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
29 lines
3.4 KiB
Markdown
29 lines
3.4 KiB
Markdown
# [reconcile-local-assets-to-minio] — залить всё локальное хранилище RUVDS в MinIO
|
||
|
||
**Status:** 🟢 done 2026-07-03 — залито и сверено. Parity чистая: assets 4750/4750 (0 diff checksum), galleries 9984/9984 (долито 9683), themes 27999/27999, maxMind 2/2. Job `b6qb8e10q` exit 0, DONE 10:31:30Z.
|
||
**Follow-up — ✅ closed 2026-07-03:** per-theme `<themeId>/imageCache/*` (легаси resize-кэш) выпилен из бакета `themes` после S3-cutover'а (17135 объектов / 2.1 ГБ → 0). Реальный контент тем цел (10864 / 671 MiB, счётчик 1:1). Бакет `themes` теперь только реальный контент.
|
||
|
||
## Задача
|
||
Перетащить всё контентное локальное хранилище `C:\sites\snolla\App_Data` (RUVDS IIS) в MinIO (`minio.kzntsv.site`, books-vds). Для уже мигрированных живых сайтов — только verify (все файлы на месте), не перезаписывать. Готовит estate к плану «все сайты → snolla, админка → локальный IIS + S3-провайдер».
|
||
|
||
## Разведка (2026-07-03)
|
||
| класс | диск (файлы/МиБ) | MinIO до | действие |
|
||
|---|---|---|---|
|
||
| assets | 4750 / 215.5 | 4750 / 216 | verify (`rclone check --one-way --checksum`) — по кол-ву сходится, ловим drift |
|
||
| galleries | 9984 / 5522 | 301 (pilorama98) | gap-fill `--ignore-existing` (~9683 файла / 5.4 ГБ) |
|
||
| themes | 27999 / 2847 | 317 (3 темы из 87) | gap-fill `--ignore-existing` (~2.8 ГБ) |
|
||
| maxMind | 2 / 34.6 | — | ✅ залито в bucket `maxmind` (по требованию user) verify 0 diff |
|
||
| uploadCache/contentCache/searchIndexes | кэши/индексы | — | НЕ мигрируем |
|
||
|
||
Конвенция ключей — **verbatim** диск→бакет (bucket = имя класса): assets `<ownerId>/<file>`, galleries `<siteId>/…`, themes `<themeId>/{css,images,js}/…`. Проверено на живых объектах.
|
||
|
||
## Метод
|
||
rclone на хосте (env-var remote `min:`), режим gap-fill `--ignore-existing` (живые объекты не трогаются). Логи: `C:\Windows\Temp\mig-*.log`, маркер `mig-DONE.txt`. Скрипт: scratchpad `mig-assets-to-minio.ps1` (+ `mig-maxmind.ps1`).
|
||
⚠️ Гоча: `Start-Process`-детач на Windows Server Core НЕ переживает закрытие ssh-сессии (процесс убивается с сессией) → запускать attached (ssh держит сессию) либо через Scheduled Task.
|
||
|
||
## Where I stopped / Next action
|
||
Ждать завершения bash-job `b6qb8e10q` → прочитать `mig-galleries-check.log` / `mig-themes-check.log` (post-verify one-way parity) + `mig-assets-check.log` (drift). Файлы «есть в обоих, но различаются» (drift после 13.06) — НЕ перезаписаны, вынести списком user'у (по живым сайтам перезапись — его решение). Финальная сверка counts/size диск vs MinIO. Затем close.
|
||
|
||
**Branch:** n/a (admin ops)
|
||
<!-- created-by: vitya@.admin-exec / 2026-07-03 / trigger: user-задача "перетащить все ассеты RUVDS в minio" -->
|