0e8f1ca03a
Добавить структурированные журналы, метрики, трассировку и безопасный канал критических ошибок. Усилить границы рантайма, тесты, проверку зависимостей и сценарии развёртывания.
6.4 KiB
6.4 KiB
Развертывание
Документ описывает поддерживаемый путь запуска Crank на сервере.
Crank запускается как три контейнера за reverse proxy:
uiadmin-apimcp-server
Можно использовать внешний PostgreSQL или локальный PostgreSQL из compose-профиля local-db.
Схема
reverse proxy
/ -> ui:3000
/api/admin/ -> admin-api:3001
/mcp/ -> mcp-server:3002
admin-api -> PostgreSQL
mcp-server -> PostgreSQL
admin-api -> Valkey/Redis, опционально
mcp-server -> Valkey/Redis, опционально
admin-api -> внешний OTLP endpoint, опционально
mcp-server -> внешний OTLP endpoint, опционально
Файлы запуска
deploy/community/docker-compose.ymldeploy/community/.env.exampledeploy/community/docker-compose.images.ymldeploy/community/.env.images.example
Порты
Порты по умолчанию:
ui:3000admin-api:3001mcp-server:3002- optional
valkey:6379, только loopback
CRANK_PUBLISH_BIND управляет публикацией портов:
127.0.0.1, если reverse proxy работает на том же host;0.0.0.0, если reverse proxy работает на другом host.
Reverse proxy
Пример nginx:
server {
listen 80;
server_name crank.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name crank.example.com;
ssl_certificate /etc/letsencrypt/live/crank.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/crank.example.com/privkey.pem;
client_max_body_size 25m;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
location / {
proxy_pass http://192.168.1.106:3000;
}
location /api/admin/ {
proxy_pass http://192.168.1.106:3001/;
}
location /mcp/ {
proxy_pass http://192.168.1.106:3002/;
proxy_buffering off;
proxy_request_buffering off;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
}
Замените 192.168.1.106 на адрес deployment host.
Запуск из исходников
Проверка compose-файла:
docker compose \
-f deploy/community/docker-compose.yml \
--env-file deploy/community/.env.example \
config -q
Запуск с внешним PostgreSQL:
docker compose \
-f deploy/community/docker-compose.yml \
--env-file deploy/community/.env.example \
up -d
Запуск со встроенным Valkey:
docker compose \
-f deploy/community/docker-compose.yml \
--env-file deploy/community/.env.example \
--profile cache \
up -d
Для встроенного Valkey:
CRANK_CACHE_BACKEND=valkey
CRANK_CACHE_URL=redis://valkey:6379/0
CRANK_CACHE_DEFAULT_TTL_MS=60000
Запуск готовых образов
mkdir -p crank
cd crank
curl -fsSLo docker-compose.yml https://git.itexp.me/bsodfather/crank/raw/branch/main/deploy/community/docker-compose.images.yml
curl -fsSLo .env.example https://git.itexp.me/bsodfather/crank/raw/branch/main/deploy/community/.env.images.example
cp .env.example .env
docker compose --profile local-db up -d
Если используется внешний PostgreSQL, заполните POSTGRES_HOST, POSTGRES_PORT, POSTGRES_DB, POSTGRES_USER, POSTGRES_PASSWORD и запустите:
docker compose up -d
Проверка состояния
curl http://127.0.0.1:3001/health
curl http://127.0.0.1:3002/health
curl http://127.0.0.1:3001/ready
curl http://127.0.0.1:3002/ready
Ожидаемые ответы:
{"service":"admin-api","status":"ok"}
{"service":"mcp-server","status":"ok"}
UI должен возвращать 200 OK:
curl -I http://127.0.0.1:3000/
Эксплуатация
/healthпроверяет, что процесс жив;/readyдополнительно проверяет доступность PostgreSQL и используется Docker Compose.- CD перед каждым обновлением создаёт согласованный комплект в
backups/<UTC-время>: дамп PostgreSQL, том артефактов, окружение, Compose и контрольные суммы. Хранятся последние пять локальных комплектов. - Копируйте комплекты резервных копий на отдельный хост или в объектное хранилище.
- Проверенное восстановление выполняется только с явным подтверждением:
CRANK_RESTORE_CONFIRM=restore ./scripts/restore-community.sh /opt/crank /opt/crank/backups/20260721T120000Z
- Обновления схемы выполняются под блокировкой, одной транзакцией и фиксируются в
__crank_core_migrations. Миграции Community должны оставаться обратно совместимыми с предыдущей версией приложения. - Не храните реальные секреты в Git.
- CD использует неизменяемые теги коммитов и автоматически возвращает прежнюю конфигурацию и образы при провале readiness.
CRANK_PUBLISH_BIND=0.0.0.0нужен только если reverse proxy работает на другом host.- OTLP Collector и хранилище трасс не входят в Community Compose. Для
внешнего приёмника задайте
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT; секретные headers передавайте через OpenBao, а не через файлы репозитория. - GlitchTip и другие Sentry-совместимые приёмники также не входят в Community
Compose. Для отправки только критических ошибок передайте
CRANK_SENTRY_DSNчерез OpenBao; пустое значение отключает канал.