Вход, русский язык и оформление панелей
Панель контента и панель задач используют свои аккаунты и cookie-сессии. Общий значок и нейтральные названия относятся к оформлению интерфейса. Учебная документация сохраняет технические названия Strapi и Hatchet, чтобы можно было найти исходники, понять устройство системы и обновить зависимости.
Почему браузер больше не запрашивает пароль
Раньше Caddy проверял Basic Auth перед панелями. Strapi отправляет запросы с
Authorization: Bearer ...; два способа аутентификации конкурировали за один
заголовок. Запрос с Bearer не проходил внешнюю Basic-проверку, и браузер снова
показывал своё окно входа.
Теперь Caddy маршрутизирует запросы, а приложения выполняют вход и проверку прав. Пароль вводится в форме панели, затем приложение сохраняет сессию по своим правилам. Это также объясняет, почему хеш из старой Caddy-конфигурации нельзя было вводить как пароль: хеш служит для проверки исходного пароля и не является самим паролем.
На текущем стенде данные доступа записаны в .local/production-access.txt, который
исключён из Git. В коммиты не входят этот файл, .env, API tokens и приватные SSH-ключи.
Учётная запись администратора CMS отличается от read-only Content API token сайта.
Настройка Strapi
src/admin/app.ts задаёт русский язык, логотипы, переводы, отключение учебных подсказок и уведомлений о релизах. Язык профиля пользователь выбирает в настройках своего аккаунта: доступная локаль и выбранная локаль пользователя — разные настройки.
config/admin.ts отключает NPS, продвижение платных возможностей и ссылки на внешнюю документацию. Остальная конфигурация аутентификации и шифрования остаётся серверной.
brand-admin.mjs выполняется после
strapi build: меняет название HTML-документа, язык, favicon и суффикс заголовков.
Скрипт проверяет ожидаемую структуру сборки и прекращает работу, если upstream
изменил места замены. После обновления Strapi нельзя считать старый патч совместимым
только потому, что npm install завершился успешно.
Для проверки CMS отдельно от workspace:
npm run check:models --prefix infra/strapi
npm run test:import --prefix infra/strapi
STRAPI_TELEMETRY_DISABLED=true npm run build --prefix infra/strapi
bootstrap панели получает публичный API, который отличается от полного
внутреннего StrapiApp. Попытка вызвать отсутствующий app.widgets.register
приводила к падению входа; такой вызов удалён. Читайте API для закреплённой версии,
а не полагайтесь только на тип внутреннего объекта.
Что означает сообщение про strapi develop
Content-Type Builder меняет схему данных, поэтому для него нужен режим разработки
с автоматической перезагрузкой. Content Manager редактирует записи и работает
при strapi start. Чтобы публиковать новости и фотографии, включать develop на
стенде не нужно. Схемы меняйте локально, сохраняйте в Git и доставляйте новым образом.
Настройка панели задач
infra/hatchet содержит Dockerfile и исходники оформления. Сборка скачивает закреплённый архив upstream, проверяет SHA-256, применяет патч и собирает frontend. Финальный образ использует исходный сервер Hatchet Lite с заменёнными статическими ресурсами. HTTP API, gRPC, cookie-сессии и воркер не переписываются ради оформления.
HATCHET_IMAGE выбирает этот образ в production. CI публикует его вместе с другими
образами и записывает выбранный digest в release.env. Лицензии upstream сохраняются;
при обновлении проверяются патч, сборка и реальные сценарии входа и просмотра задач.
Обновление сайта теперь не зависит от этой панели: Strapi webhook напрямую инвалидирует кеш Next.js. Учебный воркер Hatchet остаётся примером очереди и повторов, которому событие отправляется отдельно.
Упражнение
Измените одну подпись в русских переводах и соберите CMS. Найдите, почему изменение JSON не появляется в уже собранном образе без rebuild. Затем проверьте отдельно: форму входа, выбранный язык профиля, переход в Content Manager и редактирование записи. Успешная сборка и работоспособная пользовательская сессия — разные проверки.