跳转到内容

用 Docker Compose 上手

仓库在 deploy/compose/ 下随附一个 Compose 栈:一个加固的单节点部署(嵌入式 SQLite、零外部依赖), 外加两个 overlay——一个 Postgres 多租户 override 和一个灾难恢复备份 profile。本教程带你从 up -d 到一个已配置且带备份的 control plane。

容器包装的是与其他每种安装相同的单一二进制文件;仅打包方式不同。下面的命令是该栈自己有文档记录的入口点 (deploy/compose/*.yml),它们驱动的首次运行流程,与单节点教程中 针对二进制端到端验证过的流程相同。

  1. 启动它:

    Terminal window
    docker compose -f deploy/compose/docker-compose.yml up -d

    你按设计会得到:

    | 属性 | 值 | |---|---| | 端口 | 127.0.0.1:8443(HTTPS:REST + web UI)、127.0.0.1:8444(gRPC)——绑定到宿主机上的 localhost;按需刻意暴露 | | 数据 | 命名卷 olivares-data/var/lib/olivares(SQLite 存储、审计签名密钥、TLS 材料) | | 加固 | 以 65532:65532 运行,root 只读,丢弃所有 capability,no-new-privileges,tmpfs /tmp | | 健康检查 | 容器内无(镜像为 distroless——无 shell)。请从宿主机探测 /livez/readyz |

  2. 从日志中读取一次性安装 token:

    Terminal window
    docker compose -f deploy/compose/docker-compose.yml logs olivares \
    | sed -n '/FIRST-BOOT SETUP/,/========================/p'
  3. 创建第一个管理员、登录,并创建你的组织——与 单节点教程中 完全一样(API 相同;TLS 证书在首次启动时自签名,因此引导阶段用 curl -k):

    Terminal window
    curl -ksf -X POST https://localhost:8443/v1/setup \
    -H 'Content-Type: application/json' \
    -d '{"token":"<olst_ token>","email":"you@example.com","password":"<strong-password>"}'

数据源在一个由 OLIVARES_SOURCES_CONFIG 命名的运算符文件中声明 (接入数据源)。对于容器,用一个小的 override 挂载该文件并设置变量:

# deploy/compose/docker-compose.sources.yml (yours — not shipped)
services:
olivares:
environment:
OLIVARES_SOURCES_CONFIG: /etc/olivares/sources.json
volumes:
- ./sources.json:/etc/olivares/sources.json:ro
Terminal window
docker compose -f deploy/compose/docker-compose.yml \
-f deploy/compose/docker-compose.sources.yml up -d
docker compose -f deploy/compose/docker-compose.yml logs olivares | grep "ingest: wired source"

记住 sources.json 内部的路径是容器路径——例如一个 pgAudit 日志尾部,需要把 Postgres 日志目录也 以只读方式挂载进容器。

3. 加密的 DR 备份(backup profile)

Section titled “3. 加密的 DR 备份(backup profile)”

该栈随附一个一次性(one-shot)备份服务,它产出一个加密的、ledger 连续性安全的 bundle (olivares dr backup),并修剪超过 14 天的 bundle:

Terminal window
# Write your KEK passphrase once (keep it OUT of the repo / image):
printf 'a strong DR passphrase' > deploy/compose/dr-pass
docker compose -f deploy/compose/docker-compose.yml \
-f deploy/compose/docker-compose.backup.yml \
--profile backup run --rm backup

把该命令包进宿主机 cron 以获得定时 RPO,并olivares-backups 卷镜像到异地——同主机备份不是灾难恢复, 而且口令必须与 bundle 分开传输(3-2-1)。完整流程,包括恢复演练(olivares dr verify),见 备份与恢复

对于多租户拓扑,叠加 Postgres override。它会启动一个 Postgres 16,配置最小权限的 olivares_app 角色 (无 superuser、无 BYPASSRLS——引擎拒绝针对一个特权角色启动,因为行级安全是租户兜底),并让引擎指向它:

Terminal window
cp deploy/compose/.env.example deploy/compose/.env
# set POSTGRES_SUPERUSER_PASSWORD and OLIVARES_DB_PASSWORD in .env
docker compose -f deploy/compose/docker-compose.yml \
-f deploy/compose/docker-compose.postgres.yml up -d
Terminal window
curl -ks https://localhost:8443/readyz
# {"leader":true,"setup_required":false,"status":"ok","store":"up"}
curl -ks https://localhost:8443/metrics | grep olivares_store_up