chore(deploy): mappa v0.29.0 (4e013bd) — issue/entity-version/attachment-E2 + gotcha upload-boundary

This commit is contained in:
2026-08-28 15:57:34 +03:00
parent 4def67cd0d
commit 5801ca90cf
2 changed files with 13 additions and 2 deletions

View File

@@ -22,7 +22,7 @@ mappa (#985). Не делать чужую часть.
- **Образ:** `registry.kzntsv.site/mappa:<version>` — тег = version из package.json, GIT_SHA передаётся - **Образ:** `registry.kzntsv.site/mappa:<version>` — тег = version из package.json, GIT_SHA передаётся
`--build-arg GIT_SHA=<sha>` (Dockerfile в корне репо, multi-stage node:22-alpine; `--build-arg GIT_SHA=<sha>` (Dockerfile в корне репо, multi-stage node:22-alpine;
**обязательный COPY `src/lib/schema.sql` → `dist/src/lib/schema.sql`** — tsc не копирует .sql, **обязательный COPY `src/lib/schema.sql` → `dist/src/lib/schema.sql`** — tsc не копирует .sql,
без него migrate() падает «schema.sql not found»). Прод на 2026-08-28 = **v0.28.0** (GIT_SHA f1ba4e9). без него migrate() падает «schema.sql not found»). Прод на 2026-08-28 = **v0.29.0** (GIT_SHA 4e013bd).
Deploy-паттерн: релизная ветка `deploy/vX.Y.Z` из батч-tip → бамп package.json → merge в master. Deploy-паттерн: релизная ветка `deploy/vX.Y.Z` из батч-tip → бамп package.json → merge в master.
- **Стек Portainer:** `mappa` (Id 27, endpoint 1). Source-of-truth compose: - **Стек Portainer:** `mappa` (Id 27, endpoint 1). Source-of-truth compose:
`admin/host-stacks/vds-kzntsv/mappa.compose.yml`. `admin/host-stacks/vds-kzntsv/mappa.compose.yml`.
@@ -112,3 +112,14 @@ ssh vds.kzntsv.site 'docker ps --filter name=mappa --format "{{.Status}}"'
миграция создаёт PG-конфиг `mappa` (гейт newly_created) и перестраивает tsvec ВСЕХ сущностей миграция создаёт PG-конфиг `mappa` (гейт newly_created) и перестраивает tsvec ВСЕХ сущностей
(~13.5k коммитов). Старт после деплоя дольше обычного; health может отвечать 404/не стартовать (~13.5k коммитов). Старт после деплоя дольше обычного; health может отвечать 404/не стартовать
до ~1 мин — это ожидаемо, не паника. Проверять `docker ps` (health: starting) + повторять /health. до ~1 мин — это ожидаемо, не паника. Проверять `docker ps` (health: starting) + повторять /health.
9. **attachment upload: boundary регистрозависим, content-type lowercases (v0.29.0, 2026-08-28)**
сервер приводит content-type к lowercase (`ct.toLowerCase()`), а boundary в multipart —
регистрозависим (RFC 2046). Клиент с boundary, содержащим ЗАГЛАВНЫЕ (напр. `----LV0290`),
получает 400 «file field required»: delimiter не матчится. Рабочий вариант — lowercase-boundary
(`----lv0290`). Плюс: curl на Windows (mingw) шлёт multipart с LF-разделителями — серверный
парсер ждёт CRLF; надёжно — собрать multipart с CRLF вручную (`--data-binary`). Кандидат на
фикс в mappa: не lowercasing'ить boundary / матчить регистронезависимо.
8. **Одноразовый ре-индекс tsvec при создании конфига токенизатора (v0.28.0, 2026-08-28)**
миграция создаёт PG-конфиг `mappa` (гейт newly_created) и перестраивает tsvec ВСЕХ сущностей
(~13.5k коммитов). Старт после деплоя дольше обычного; health может отвечать 404/не стартовать
до ~1 мин — это ожидаемо, не паника. Проверять `docker ps` (health: starting) + повторять /health.

View File

@@ -5,7 +5,7 @@
services: services:
mappa: mappa:
image: registry.kzntsv.site/mappa:v0.28.0 image: registry.kzntsv.site/mappa:v0.29.0
container_name: mappa container_name: mappa
restart: unless-stopped restart: unless-stopped
mem_limit: 512m mem_limit: 512m