Files
crank/docs/production-checklist.md
T

71 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Production checklist
Этот список помогает подготовить Crank к постоянной работе на сервере.
## Перед запуском
- Сгенерирован сильный `CRANK_MASTER_KEY` длиной не менее 32 bytes.
- Зафиксирована процедура хранения и восстановления `CRANK_MASTER_KEY` вне
product backup set; есть защищённый opaque `backup_ref` для rotation.
- Сгенерирован сильный `CRANK_SESSION_SECRET`.
- Сгенерирован сильный `CRANK_PASSWORD_PEPPER`.
- Подготовлена локальная процедура `crank-migrate admin-auth bootstrap-create`;
static startup-пароль администратора не используется в production.
- Подготовлены защищённые local files для `crank-migrate admin-auth recover`:
новый Admin password, текущий `CRANK_PASSWORD_PEPPER` и current master key.
- `CRANK_BASE_URL` указывает на публичный HTTPS URL.
- `CRANK_ENVIRONMENT=production`.
- Если используется внешний приёмник критических ошибок, задан корректный
`CRANK_SENTRY_DSN`; иначе значение оставлено пустым.
- PostgreSQL доступен с host, где запускаются контейнеры.
- Для PostgreSQL настроены бэкапы.
- Reverse proxy проксирует `/`, `/api/admin/` и `/mcp/`.
- Для `/mcp/` отключено proxy buffering.
- Порты опубликованы только там, где нужно: `127.0.0.1` или `0.0.0.0`.
## После запуска
- `curl /health` для `admin-api` возвращает `ok`.
- `curl /health` для `mcp-server` возвращает `ok`.
- `curl /ready` для `admin-api` и `mcp-server` возвращает `ready`.
- UI открывается по публичному домену.
- Создан первый admin через одноразовый bootstrap token, повтор token
отклоняется, обычный login работает.
- Demo seed создал Frankfurter-пример, если `CRANK_DEMO_SEED=true`.
- Тест операции `frankfurter_latest_rate` проходит.
- MCP-клиент видит инструмент через агента `currency-rates`.
- `admin-api` и `mcp-server` используют один active master-key identity; запуск
с неверным `CRANK_MASTER_KEY` проверен как fail-closed на staging.
- Каждая непустая строка stdout `admin-api` и `mcp-server` является
корректным JSON и содержит `service`, `environment` и `event`.
- При включённом канале контрольная критическая ошибка появляется у приёмника
без исходного текста ошибки, request, user, payload и секретов.
## Безопасность
- Не храните `.env` в Git.
- Не передавайте API-ключи агентов в чатах и тикетах.
- Выдавайте отдельный ключ на каждого MCP-клиента.
- Удаляйте или отзывайте ключи, которые больше не используются.
- Используйте secrets/auth profiles для токенов внешних API.
- Не вставляйте реальные токены в статические заголовки операции.
## OpenAPI import и release evidence
- Проверяйте реальный multipart upload из UI: один файл `.yaml|.yml|.json`, 1..256 KiB, preview и создание Draft.
- При сбое используйте только `Request ID`/`Trace ID`; не прикладывайте исходный OpenAPI-файл, digest, source ID, путь, Playwright trace/video или raw report к release evidence.
- Сохраняйте только JSON, сформированный `scripts/collect-capability-baseline.py`: он содержит revision, разрешённые flow IDs и агрегированные counts. Backup/retention исходных файлов OpenAPI координируются artifact lifecycle/reconciliation, а не UI или release-job.
- Не меняйте `CRANK_MASTER_KEY` напрямую. Для смены ключа выполняйте
`crank-migrate master-key preflight → rotate → verify → promote`, затем
перезапускайте secret-using процессы с target key.
## Эксплуатация
- Включите мониторинг контейнеров.
- Следите за свободным местом на диске.
- Проверяйте размер PostgreSQL и директории artifact storage.
- Храните полные комплекты PostgreSQL + artifact storage отдельно от application host.
- Регулярно выполняйте контрольное восстановление через `scripts/restore-community.sh` на чистом стенде.
- Перед обновлением фиксируйте текущие image tags.
- После обновления проверяйте UI, Admin API и MCP endpoint.