用 Docker Compose 上手
仓库在 deploy/compose/ 下随附一个 Compose 栈:一个加固的单节点部署(嵌入式 SQLite、零外部依赖),
外加两个 overlay——一个 Postgres 多租户 override 和一个灾难恢复备份 profile。本教程带你从
up -d 到一个已配置且带备份的 control plane。
容器包装的是与其他每种安装相同的单一二进制文件;仅打包方式不同。下面的命令是该栈自己有文档记录的入口点
(deploy/compose/*.yml),它们驱动的首次运行流程,与单节点教程中
针对二进制端到端验证过的流程相同。
1. 启动单节点栈(SQLite)
Section titled “1. 启动单节点栈(SQLite)”-
启动它:
如果 AppArmor 管控用户命名空间的创建,请先在 Docker 守护进程所在主机上按
deploy/compose/README.md中的“Session confinement on AppArmor hosts”完成配置,再启动服务。终端窗口 docker compose -f deploy/compose/docker-compose.yml up --wait --wait-timeout 120你按设计会得到:
属性 值 端口 8443(HTTPS:REST + web UI)、8444(gRPC)——发布在所有主机接口上,因为这是一台服务器。在.env中设置OLIVARES_BIND=127.0.0.1可将其限制在本机数据 命名卷 olivares-data→/var/lib/olivares(SQLite 存储、审计签名密钥、TLS 材料)加固 以 65532:65532运行,root 只读,丢弃所有 capability,no-new-privileges,tmpfs/tmp健康检查 直接执行内置的 olivares readyz命令——无需 shell、curl 或 wget。只有本地/readyz返回 HTTP 200 才算健康 -
询问引擎它在哪里,并从日志中读取一次性安装 token:
终端窗口 # where the console answers, and whether setup is still pending. It runs the binary# directly and needs no shell.docker compose -f deploy/compose/docker-compose.yml exec olivares olivares first-boot# the one-time setup token, printed once at first bootdocker compose -f deploy/compose/docker-compose.yml logs olivares \| sed -n '/FIRST-BOOT SETUP/,/========================/p' -
创建第一个管理员、登录,并创建你的组织——与 单节点教程中 完全一样(API 相同;TLS 证书在首次启动时自签名,因此引导阶段用
curl -k):终端窗口 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>"}'
2. 接入数据源
Section titled “2. 接入数据源”数据源在一个由 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:rodocker compose -f deploy/compose/docker-compose.yml \ -f deploy/compose/docker-compose.sources.yml up -ddocker 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):
将口令保存在仓库和镜像之外的私密文件中,并在这台主机之外的安全位置保留一份副本:
没有口令,任何备份包都无法恢复。让备份容器以只读方式访问该文件
(镜像以 UID 65532 运行):
sudo install -d -o 65532 -g 65532 -m 0700 /srv/olivares-drsudo install -o 65532 -g 65532 -m 0400 /path/to/private-passphrase /srv/olivares-dr/dr-pass
BACKUP_TS="$(date -u +%Y%m%dT%H%M%SZ)" \docker compose -f deploy/compose/docker-compose.yml \ -f deploy/compose/docker-compose.backup.yml \ -f - --profile backup run --rm backup <<'YAML'services: backup: volumes: - /srv/olivares-dr/dr-pass:/run/secrets/dr-pass:roYAML把该命令包进宿主机 cron 以获得定时 RPO,并将 olivares-backups 卷镜像到异地——同主机备份不是灾难恢复,
而且口令必须与 bundle 分开传输(3-2-1)。完整流程,包括恢复演练(olivares dr verify),见
备份与恢复。
4. 可选:Postgres 多租户 override
Section titled “4. 可选:Postgres 多租户 override”对于多租户拓扑,叠加 Postgres override。它会启动一个 Postgres 16,配置最小权限的 olivares_app 角色
(无 superuser、无 BYPASSRLS——引擎拒绝针对一个特权角色启动,因为行级安全是租户兜底),并让引擎指向它:
覆盖文件还会创建 olivares_admin,这是一个独立的 NOSUPERUSER BYPASSRLS
角色,对引擎表只有只读访问权限。引擎通过 --admin-dsn 使用它进行跨租户读取,
包括首次设置。
首先设置三个不同的密码。此 Compose 演示只允许使用 A-Z a-z 0-9 . _ ~ -,
然后启动栈:
cp deploy/compose/.env.example deploy/compose/.env# set three distinct passwords in deploy/compose/.env:# POSTGRES_SUPERUSER_PASSWORD, OLIVARES_DB_PASSWORD, OLIVARES_ADMIN_PASSWORD
docker compose -f deploy/compose/docker-compose.yml \ -f deploy/compose/docker-compose.postgres.yml up -dcurl -ks https://localhost:8443/readyz# {"leader":true,"setup_required":false,"status":"ok","store":"up"}curl -ks https://localhost:8443/metrics | grep olivares_store_up- 接入真实信号: connector 指南。
- 调度并演练备份: 备份与恢复。
- 监控它: Prometheus 指标、SLO 与告警。
- 要走向多节点? 用 Helm 的 Kubernetes, 包括 HA 与 collectors DaemonSet。