首页
/ Linera Protocol 项目中的 Docker Compose 部署架构解析

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 服务启用了自动更新功能

部署架构特点

  1. 服务依赖管理:通过 depends_on 确保服务启动顺序
  2. 配置管理:使用卷挂载实现配置外部化
  3. 可扩展性:分片服务默认部署 4 个副本
  4. 可观测性:完整的监控解决方案 (Prometheus + Grafana)
  5. 自动化运维:集成 Watchtower 实现自动更新

部署建议

  1. 根据实际需求调整分片服务的副本数量
  2. 生产环境应考虑配置 ScyllaDB 的集群模式而非单节点
  3. 监控组件的配置应根据实际监控需求进行调整
  4. 自动更新功能在生产环境应谨慎使用

通过这个 Docker Compose 配置,Linera Protocol 实现了一个完整的、可观测的分布式系统部署方案,既适合开发测试环境,也为生产环境部署提供了基础架构。