deploy: add optional valkey community profile

This commit is contained in:
a.tolmachev
2026-05-03 21:36:14 +00:00
parent c5cd6c1526
commit 2eb2209e40
5 changed files with 51 additions and 2 deletions
+1 -1
View File
@@ -50,8 +50,8 @@ Progress:
- product/docs/runtime plan already define cache layer as optional and edition-aware
- public cache contracts and runtime cache config now exist in `crank-core` / `crank-runtime`
- Community fallback in-memory implementations now exist for response cache, rate-limit state, replay guard, and coordination state
- Community deployment manifest now includes optional `valkey` profile and cache env wiring without making cache mandatory
- pending:
- optional `Valkey` in Community manifests
- external cache backend for managed / enterprise contours
## Planned
+3
View File
@@ -24,6 +24,9 @@ CRANK_RUNTIME_MAX_CONCURRENT_UNARY=64
CRANK_RUNTIME_MAX_CONCURRENT_WINDOW=16
CRANK_RUNTIME_MAX_CONCURRENT_SESSIONS=16
CRANK_RUNTIME_MAX_CONCURRENT_JOBS=16
CRANK_CACHE_BACKEND=memory
CRANK_CACHE_URL=
CRANK_CACHE_DEFAULT_TTL_MS=
CRANK_LOG_LEVEL=info
CRANK_MASTER_KEY=change-me-master-key
CRANK_SESSION_SECRET=change-me-session-secret
+23
View File
@@ -16,6 +16,22 @@ services:
timeout: 5s
retries: 5
valkey:
image: valkey/valkey:8-alpine
restart: unless-stopped
profiles:
- cache
command: ["valkey-server", "--save", "", "--appendonly", "no"]
volumes:
- valkey_data:/data
ports:
- "127.0.0.1:6379:6379"
healthcheck:
test: ["CMD", "valkey-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
admin-api:
image: ${CRANK_ADMIN_API_IMAGE:-crank/admin-api:dev}
build:
@@ -30,6 +46,9 @@ services:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-crank}
CRANK_STORAGE_ROOT: ${CRANK_STORAGE_ROOT:-/var/lib/crank/storage}
CRANK_ADMIN_BIND: ${CRANK_ADMIN_BIND:-0.0.0.0:3001}
CRANK_CACHE_BACKEND: ${CRANK_CACHE_BACKEND:-memory}
CRANK_CACHE_URL: ${CRANK_CACHE_URL:-}
CRANK_CACHE_DEFAULT_TTL_MS: ${CRANK_CACHE_DEFAULT_TTL_MS:-}
CRANK_LOG_LEVEL: ${CRANK_LOG_LEVEL:-info}
CRANK_MASTER_KEY: ${CRANK_MASTER_KEY}
CRANK_BASE_URL: ${CRANK_BASE_URL:-http://localhost:3000}
@@ -68,6 +87,9 @@ services:
CRANK_STORAGE_ROOT: ${CRANK_STORAGE_ROOT:-/var/lib/crank/storage}
CRANK_MCP_BIND: ${CRANK_MCP_BIND:-0.0.0.0:3002}
CRANK_MCP_REFRESH_MS: ${CRANK_MCP_REFRESH_MS:-5000}
CRANK_CACHE_BACKEND: ${CRANK_CACHE_BACKEND:-memory}
CRANK_CACHE_URL: ${CRANK_CACHE_URL:-}
CRANK_CACHE_DEFAULT_TTL_MS: ${CRANK_CACHE_DEFAULT_TTL_MS:-}
CRANK_LOG_LEVEL: ${CRANK_LOG_LEVEL:-info}
CRANK_MASTER_KEY: ${CRANK_MASTER_KEY}
CRANK_BASE_URL: ${CRANK_BASE_URL:-http://localhost:3000}
@@ -101,3 +123,4 @@ services:
volumes:
postgres_data:
artifact_storage:
valkey_data:
+3
View File
@@ -38,6 +38,7 @@ Community release должен поставлять:
- `admin-api`
- `mcp-server`
- `postgres` как runtime dependency в compose-манифесте
- optional `valkey` profile как рекомендованный, но не обязательный cache layer
- healthchecks
- базовый self-hosted deployment path
- capability-gated UI, который не притворяется коммерческой редакцией
@@ -60,6 +61,7 @@ Community release должен поставлять:
1. `CI` зеленый.
2. Community deployment manifest валиден:
- `docker compose -f deploy/community/docker-compose.yml --env-file deploy/community/.env.example config -q`
- `docker compose -f deploy/community/docker-compose.yml --env-file deploy/community/.env.example --profile cache config -q`
3. Docker image build проходит для:
- `admin-api`
- `mcp-server`
@@ -101,6 +103,7 @@ Community release должен поставлять:
- UI не показывает рабочими premium-only сценарии;
- `admin-api` и `mcp-server` enforce capability limits на сервере;
- public deployment path воспроизводим на чистом хосте;
- базовый запуск и запуск с profile `cache` оба валидны;
- staging smoke записан в regression notes.
## 8. Связанные документы
+21 -1
View File
@@ -56,6 +56,7 @@
- `admin-api`
- `mcp-server`
- `postgres`
- optional `valkey` через compose profile `cache`
Persistent data:
@@ -172,7 +173,23 @@ services:
- публиковать `ui`, `admin-api` и `mcp-server` на loopback по умолчанию;
- позволять переопределить publish bind одним env для случаев, когда reverse proxy вынесен на отдельный хост;
- не публиковать внутренние сервисы наружу без необходимости;
- содержать healthchecks.
- содержать healthchecks;
- поддерживать optional cache profile без превращения `Valkey` в обязательную runtime dependency.
Для Community optional cache layer включается отдельно:
- profile: `cache`
- service: `valkey`
- базовый запуск без profile должен оставаться полностью рабочим
Пример:
```bash
docker compose \
-f deploy/community/docker-compose.yml \
--env-file deploy/community/.env.example \
--profile cache up -d
```
## 10. Healthchecks
@@ -250,6 +267,9 @@ Workflow доставляет именно `deploy/community/docker-compose.yml`
- `CRANK_LOG_LEVEL`
- `CRANK_MASTER_KEY`
- `CRANK_BASE_URL`
- `CRANK_CACHE_BACKEND`
- `CRANK_CACHE_URL`
- `CRANK_CACHE_DEFAULT_TTL_MS`
- `CRANK_SESSION_SECRET`
- `CRANK_PASSWORD_PEPPER`
- `CRANK_SESSION_TTL_HOURS`