docs: гайд по локальному демо-стенду + ссылка из CLAUDE.md #23

Merged
vvzvlad merged 1 commits from docs/dev-stand into develop 2026-07-01 18:32:07 +03:00
Collaborator

Что

Дока «как поднимать демо-стенд» для портейнера (docs/dev-stand.md) + ссылка на неё из CLAUDE.md. По аналогии с dev-stand в gitmost. Написана по свежим граблям — сегодня на этих же граблях завис стенд со всеми PR.

Покрывает: как собрать образ из одной/нескольких feature-веток (интеграционная ветка + merge каждой PR), запуск контейнера, сидинг админа и локального docker-окружения через API.

Грабли (главное):

  1. make build-image без ENV=production тащит клиент в dev-режиме (webpack devtool: eval-source-map → каждый модуль в eval()), а дефолтный CSP портейнера (script-src без unsafe-eval) их блокирует → UI навсегда висит на «Loading Portainer…», ноль API-запросов (при этом вся статика грузится 200 — выглядит как проблема бэка/сети, но нет). Всегда собирать образ с ENV=production.
  2. CSP включён по умолчанию (--csp=true) и не содержит unsafe-eval; прод-бандл CSP-safe, dev-бандл — нет.
  3. Первичная инициализация админа требует setup-token → для демо запускать с --no-setup-token.
  4. Пароль админа: простой и без спецсимволов, но минимум 12 символов (портейнер короче не принимает), напр. portainer1234.

Как проверил

  • Прогнал ровно этот сценарий: собрал образ с обеими открытыми PR (#6+#19), напоролся на dev-бандл → «Loading Portainer…», подтвердил причину headless-браузером (0 API, pageerror про unsafe-eval) и грепом eval( в бандле; пересобрал с ENV=production — грузится до формы логина, 5 API-запросов, ошибок нет.
  • Ссылка CLAUDE.md → docs/dev-stand.md относительная от корня репы, валидна.

Только доки, кода не трогал.

## Что Дока «как поднимать демо-стенд» для портейнера (`docs/dev-stand.md`) + ссылка на неё из `CLAUDE.md`. По аналогии с dev-stand в gitmost. Написана по свежим граблям — сегодня на этих же граблях завис стенд со всеми PR. Покрывает: как собрать образ из одной/нескольких feature-веток (интеграционная ветка + merge каждой PR), запуск контейнера, сидинг админа и локального docker-окружения через API. **Грабли (главное):** 1. `make build-image` **без `ENV=production`** тащит клиент в dev-режиме (webpack `devtool: eval-source-map` → каждый модуль в `eval()`), а дефолтный CSP портейнера (`script-src` без `unsafe-eval`) их блокирует → UI навсегда висит на «Loading Portainer…», ноль API-запросов (при этом вся статика грузится 200 — выглядит как проблема бэка/сети, но нет). Всегда собирать образ с `ENV=production`. 2. CSP включён по умолчанию (`--csp`=true) и не содержит `unsafe-eval`; прод-бандл CSP-safe, dev-бандл — нет. 3. Первичная инициализация админа требует setup-token → для демо запускать с `--no-setup-token`. 4. Пароль админа: простой и без спецсимволов, но **минимум 12 символов** (портейнер короче не принимает), напр. `portainer1234`. ## Как проверил - Прогнал ровно этот сценарий: собрал образ с обеими открытыми PR (#6+#19), напоролся на dev-бандл → «Loading Portainer…», подтвердил причину headless-браузером (0 API, pageerror про unsafe-eval) и грепом `eval(` в бандле; пересобрал с `ENV=production` — грузится до формы логина, 5 API-запросов, ошибок нет. - Ссылка `CLAUDE.md → docs/dev-stand.md` относительная от корня репы, валидна. Только доки, кода не трогал.
agent_coder added 1 commit 2026-07-01 18:15:30 +03:00
Documents building a Portainer image from one or more feature branches and
running it, with the gotchas that bite: build-image must get ENV=production
(else it ships a dev eval-source-map client bundle that the default CSP blocks,
hanging the UI on "Loading Portainer…"), CSP is on by default, first-run admin
init needs --no-setup-token, and the admin password must be simple but >=12
chars. Referenced from CLAUDE.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
vvzvlad merged commit 8366f4d25c into develop 2026-07-01 18:32:07 +03:00
Sign in to join this conversation.