Разбор 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>
3.4 KiB
[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)