feat: harden community production foundation through story 1.5

This commit is contained in:
2026-08-14 00:21:59 +03:00
parent c30461cc92
commit f6fc2e5c9b
161 changed files with 16758 additions and 2515 deletions
+10 -7
View File
@@ -2,11 +2,12 @@
Документ описывает поддерживаемый путь запуска Crank на сервере.
Crank запускается как три контейнера за reverse proxy:
Crank запускает три long-running контейнера за reverse proxy и один обязательный one-shot migration job:
- `ui`
- `admin-api`
- `mcp-server`
- `migrate` (завершается до readiness Admin/MCP)
Можно использовать внешний PostgreSQL или локальный PostgreSQL из compose-профиля `local-db`.
@@ -18,8 +19,10 @@ reverse proxy
/api/admin/ -> admin-api:3001
/mcp/ -> mcp-server:3002
admin-api -> PostgreSQL
mcp-server -> PostgreSQL
migrate -> PostgreSQL -> exit 0
|
+-> admin-api readiness
+-> mcp-server readiness
admin-api -> Valkey/Redis, опционально
mcp-server -> Valkey/Redis, опционально
admin-api -> внешний OTLP endpoint, опционально
@@ -105,7 +108,7 @@ docker compose \
config -q
```
Запуск с внешним PostgreSQL:
Перед обновлением существующей установки выполните preflight и проверенный backup по [migration runbook](migrations.md). Source Compose по умолчанию поднимает локальный PostgreSQL 16. После безопасной последовательности запустите:
```bash
docker compose \
@@ -143,7 +146,7 @@ cp .env.example .env
docker compose --profile local-db up -d
```
Если используется внешний PostgreSQL, заполните `POSTGRES_HOST`, `POSTGRES_PORT`, `POSTGRES_DB`, `POSTGRES_USER`, `POSTGRES_PASSWORD` и запустите:
Если используется внешний PostgreSQL, заполните `POSTGRES_HOST`, `POSTGRES_PORT`, `POSTGRES_DB`, `POSTGRES_USER`, `POSTGRES_PASSWORD`, сначала выполните preflight и backup по [migration runbook](migrations.md), затем запустите:
```bash
docker compose up -d
@@ -182,9 +185,9 @@ curl -I http://127.0.0.1:3000/
CRANK_RESTORE_CONFIRM=restore ./scripts/restore-community.sh /opt/crank /opt/crank/backups/20260721T120000Z
```
- Обновления схемы выполняются под блокировкой, одной транзакцией и фиксируются в `__crank_core_migrations`. Миграции Community должны оставаться обратно совместимыми с предыдущей версией приложения.
- Обновления схемы выполняет только one-shot `crank-migrate apply` под canonical transaction advisory lock. `admin-api` и `mcp-server` выполняют read-only compatibility check и не стартуют до успешного migration job. Canonical sequence фиксируется в `__crank_migrations`, legacy ledgers остаются readable; подробности — в [migrations.md](migrations.md).
- Не храните реальные секреты в Git.
- CD использует неизменяемые теги коммитов и автоматически возвращает прежнюю конфигурацию и образы при провале readiness.
- CD использует неизменяемые теги коммитов. После schema migration автоматический возврат старых образов запрещён, пока N/N-1 window не квалифицирован Story 7.2: оператор сохраняет backup и выбирает matching forward image либо доказанное восстановление согласованного комплекта.
- `CRANK_PUBLISH_BIND=0.0.0.0` нужен только если reverse proxy работает на другом host.
- OTLP Collector и хранилище трасс не входят в Community Compose. Для
внешнего приёмника задайте `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT`; секретные