65 lines
4.5 KiB
Markdown
65 lines
4.5 KiB
Markdown
# 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.
|
||
- Не вставляйте реальные токены в статические заголовки операции.
|
||
- Не меняйте `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.
|