Linera Protocol 项目中的 Docker Compose 部署架构解析
2025-07-05 05:02:07作者:秋泉律Samson
概述
本文将深入分析 Linera Protocol 项目中的 Docker Compose 部署架构,帮助开发者理解其微服务组成和交互方式。Linera Protocol 是一个分布式系统项目,其 Docker Compose 配置展示了现代区块链或分布式账本系统的典型架构设计。
核心服务组件
1. ScyllaDB 数据库服务
scylla:
image: scylladb/scylla:6.1.3
container_name: scylla
volumes:
- linera-scylla-data:/var/lib/scylla
environment:
SCYLLA_AUTO_CONF: 1
command:
- "--developer-mode"
- "0"
- "--overprovisioned"
- "1"
ScyllaDB 是一个高性能的 NoSQL 数据库,兼容 Apache Cassandra,但性能更高。在 Linera Protocol 中,它作为底层数据存储服务:
- 使用
scylladb/scylla:6.1.3
官方镜像 - 数据持久化通过命名卷
linera-scylla-data
实现 developer-mode
设置为 0 表示生产模式overprovisioned
设置为 1 允许在资源受限环境下运行
2. 网关服务 (Gateway)
gateway:
image: "${LINERA_IMAGE:-linera}"
container_name: gateway
ports:
- "19100:19100"
command: [ "./compose-gateway-entrypoint.sh", "1" ]
网关服务是系统的入口点:
- 使用可配置的
LINERA_IMAGE
环境变量或默认的 "linera" 镜像 - 暴露 19100 端口供外部访问
- 通过自定义脚本
compose-gateway-entrypoint.sh
启动 - 依赖
shard-init
服务完成初始化后才能启动
3. 分片服务 (Shard)
shard:
image: "${LINERA_IMAGE:-linera}"
deploy:
replicas: 4
command: [ "./compose-server-entrypoint.sh", "scylladb:tcp:scylla:9042", "1" ]
分片服务是系统的核心处理单元:
- 默认部署 4 个副本,实现高可用和负载均衡
- 通过
compose-server-entrypoint.sh
脚本启动 - 连接到 ScyllaDB 服务 (地址为
scylladb:tcp:scylla:9042
) - 同样依赖
shard-init
服务完成初始化
4. 分片初始化服务 (Shard-init)
shard-init:
image: "${LINERA_IMAGE:-linera}"
container_name: shard-init
command: [ "./compose-server-init.sh", "scylladb:tcp:scylla:9042", "1" ]
此服务负责系统初始化工作:
- 运行
compose-server-init.sh
脚本 - 连接到 ScyllaDB 进行必要的数据库初始化
- 必须在 ScyllaDB 服务就绪后才能启动
监控与运维组件
1. Prometheus 监控
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
提供系统指标监控:
- 使用最新版 Prometheus 镜像
- 通过挂载自定义配置文件
prometheus.yml
- 暴露 9090 端口访问监控界面
2. Grafana 可视化
grafana:
image: grafana/grafana:latest
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
ports:
- "3000:3000"
volumes:
- grafana-storage:/var/lib/grafana
- ./provisioning/dashboards:/etc/grafana/provisioning/dashboards
- ./dashboards:/var/lib/grafana/dashboards
提供监控数据可视化:
- 预设管理员密码为 "admin"
- 暴露 3000 端口访问 Grafana 界面
- 持久化存储 Grafana 数据
- 预置自定义仪表板配置
3. Watchtower 自动更新
watchtower:
image: containrrr/watchtower:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: [ "--interval", "30"]
实现容器自动更新:
- 每 30 秒检查一次镜像更新
- 需要访问 Docker 守护进程套接字
- 特别为 gateway 和 shard 服务启用了自动更新功能
部署架构特点
- 服务依赖管理:通过
depends_on
确保服务启动顺序 - 配置管理:使用卷挂载实现配置外部化
- 可扩展性:分片服务默认部署 4 个副本
- 可观测性:完整的监控解决方案 (Prometheus + Grafana)
- 自动化运维:集成 Watchtower 实现自动更新
部署建议
- 根据实际需求调整分片服务的副本数量
- 生产环境应考虑配置 ScyllaDB 的集群模式而非单节点
- 监控组件的配置应根据实际监控需求进行调整
- 自动更新功能在生产环境应谨慎使用
通过这个 Docker Compose 配置,Linera Protocol 实现了一个完整的、可观测的分布式系统部署方案,既适合开发测试环境,也为生产环境部署提供了基础架构。