deploy: add optional valkey community profile
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
@@ -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`
|
||||
|
||||
Reference in New Issue
Block a user