# 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.