用 Docker Compose 搭建 Linera Indexer 与 Block Exporter 全链路测试环境

发布时间:2026/9/10 22:25:19
用 Docker Compose 搭建 Linera Indexer 与 Block Exporter 全链路测试环境 用 Docker Compose 搭建 Linera Indexer 与 Block Exporter 全链路测试环境【免费下载链接】linera-protocolMain repository for the Linera protocol项目地址: https://gitcode.com/GitHub_Trending/li/linera-protocol本篇指南基于 Linera 协议仓库 docker/README.indexer-test.md 展开介绍如何在容器化环境中一键搭建用于测试Linera Indexer索引器与Block Exporter区块导出器的完整测试栈从存储服务、单验证者网络含 faucet 水龙头链、gRPC 索引器到区块导出器及其数据落盘目标一应俱全。读完本文你将掌握该测试环境的启动/验证/停止流程、全部可配置环境变量与依赖顺序并能结合仓库中的 Compose 编排与源码理解每条配置背后的实现细节直接复用于本地开发与 CI 验证。为什么需要一套容器化测试栈Linera 是一个面向多链microchain架构的协议验证者、索引器、区块导出器、水龙头等服务需要协同运行才能形成一条可观测、可消费的数据链路。单独手工启动这些组件非常繁琐而且难以保证依赖顺序与状态一致性。仓库中的 docker/docker-compose.indexer-test.yml 就是为了解决这个问题而设计的它用单个 Compose 文件编排起所有测试组件让开发者一条命令启动、一条命令清理可以反复验证索引器与区块导出器在真实网络上的行为。当前所有组件被打包进同一个名为linera-all-test的 Docker 镜像方便统一构建与分发。组件一览与启动顺序这套测试栈共包含以下组件按启动顺序排列顺序服务角色1Linera Storage Service / 数据库验证者与导出器的存储后端ScyllaDB PostgreSQL2Linera Indexer基于 gRPC 的索引器服务消费区块并将数据写入 PostgreSQL3Linera Block Exporter导出区块与 blob同时暴露 Prometheus 指标4Linera Network单验证者网络含 faucet 水龙头链需要注意Compose 文件中还包含linera-explorer前端 3001 / API 3002与storage-init等待 Scylla 命名空间初始化两个辅助服务用于可视化和保证导出器启动时机正确。快速开始1. 构建 Docker 镜像cd docker ./make-all-build.sh2. 启动全部服务# 在 /docker 目录下 ./make-all-up.sh这里有必要看一下脚本实际做了什么。docker/make-all-up.sh 会先清理上一次运行遗留的数据删除./exporter-data/、./indexer-data/、./scylla-data/目录随后执行docker system prune -f与docker volume prune -f清理孤儿容器与悬空卷最后以强制重建方式拉起服务docker-compose -f ./docker-compose.indexer-test.yml up --force-recreate --remove-orphans--force-recreate确保每个容器都用最新镜像重建--remove-orphans移除不再被 Compose 文件引用的旧容器。正因如此每次make-all-up.sh都是一次干净状态的启动。3. 验证服务是否就绪服务启动后可分别探测以下端口服务探测命令说明Storage Servicecurl http://localhost:1235存储服务Indexercurl http://localhost:8081索引器 gRPC 端口Block Exportercurl http://localhost:8882导出器服务端口Metricscurl http://localhost:9091/metricsPrometheus 指标端点Faucetcurl http://localhost:8080水龙头服务这些端口全部来自 docker/docker-compose.indexer-test.yml 中的端口映射可通过环境变量覆盖见下文。4. 停止服务# 在 /docker 目录下 ./make-all-down.shdocker/make-all-down.sh 执行docker-compose down --volumes --remove-orphans随后同样清理数据目录与悬空资源保证下次启动从全新状态开始。配置详解环境变量所有端口与路径均可通过.env.indexer-test环境变量配置变量默认值用途LINERA_STORAGE_SERVICE_PORT1235存储服务端口INDEXER_PORT8081索引器 gRPC 端口INDEXER_DATABASE_PATH/data/indexer.db索引器数据库路径SQLiteBLOCK_EXPORTER_PORT8882区块导出器端口METRICS_PORT9091指标端点端口FAUCET_PORT8080水龙头服务端口LINERA_INDEXER_IMAGElinera-all-testDocker 镜像名仓库中的 docker/.env.indexer-test 是实际生效的默认文件内容比 README 列出的变量更完整还包含# PostgreSQL Database configuration POSTGRES_USERpostgres POSTGRES_PASSWORDpostgres POSTGRES_DBlinera_indexer POSTGRES_PORT5432 # Explorer configuration EXPLORER_FRONTEND_PORT3001 EXPLORER_API_PORT3002 # Docker images LINERA_EXPLORER_IMAGElinera-explorer-newCompose 文件中的每个值都带有${VAR:-default}回退语法例如${INDEXER_PORT:-8081}:${INDEXER_PORT:-8081}意味着即使不设置任何环境变量服务也能用默认端口启动。自定义配置如需覆盖默认设置复制.env.indexer-test为.env.local修改.env.local中的值用显式指定环境文件的方式启动docker-compose -f docker-compose.indexer-test.yml --env-file .env.local up服务依赖与健康检查Compose 文件为每个服务都定义了healthcheck与depends_on形成一条严格的启动链Storage Service 最先启动postgres用pg_isready探测scylla用cqlsh -e SELECT now() FROM system.local探测两者就绪后索引器才能启动Indexer 等待 Storage 健康linera-indexer通过nc -z localhost 8081探测自身端口depends_on要求 scylla 与 postgres 均为service_healthyBlock Exporter 等待 Indexer 健康linera-block-exporter通过nc -z localhost 8882探测且依赖storage-init完成service_completed_successfullyNetwork 等待 Block Exporter 健康linera-network通过nc -z localhost 8080探测 faucet 端口depends_on要求linera-indexer健康。其中storage-init是一个等待器容器循环执行./linera storage check-existence --storage scylladb:tcp:scylla:9042:table_default_server_0_db直到 Scylla 中的存储命名空间被网络初始化成功才退出确保区块导出器连接的是已就绪的存储。这种多层健康检查 显式依赖的设计避免了导出器先于存储就绪导致连接失败的经典时序问题。ScyllaDB 的主机调优值得注意的一点是scylla-setup是一个以privileged: true运行的特权容器挂载宿主机的/proc、/sys与/etc/sysctl.d执行 docker/compose-scylla-setup.sh。该脚本按照 ScyllaDB 官方建议根据宿主机 CPU 核数与内存动态计算并设置内核参数包括fs.aio-max-nr异步 I/O 上限65536 × shard 数 × 1.5最低 1048576net.core.somaxconn/net.ipv4.tcp_max_syn_backlog套接字与 SYN 队列vm.max_map_count、vm.swappiness、vm.dirty_ratio等内存参数fs.file-max/fs.nr_open文件描述符上限关闭 Transparent Huge PagesTHP与 NUMA balancing。脚本支持--persist模式将计算出的参数写入/etc/sysctl.d/99-scylladb.conf以便重启后依然生效。容器内 Scylla 以--developer-mode 1 --overprovisioned 1启动适合在开发/测试机而非生产硬件上运行。区块导出器从 Compose 到源码linera-block-exporter的启动命令为./linera-exporter run \ --storage scylladb:tcp:scylla:9042:table_default_server_0_db \ --config-path /exporter-config.toml \ --metrics-port ${METRICS_PORT:-9091}其配置文件挂载自 docker/exporter-config.toml对应源码中的BlockExporterConfig见 linera-exporter/src/config.rs。该结构体包含id导出器状态标识service_config服务监听地址与端口0.0.0.0:8882destination_config导出目标列表committee_destination true表示同时向当前委员会导出limits资源限制metrics_port/metrics端点的监听端口。示例配置定义了两个导出目标一个是Logging类型把区块与 blob 记录追加到/data/linera-exporter.log另一个是Indexer类型通过明文 gRPCtls ClearText将数据推送到linera-indexer:8081。limits小节给出了缓存与队列的推荐值persistence_period_ms 10_000、work_queue_size 256、各缓存容量 1024 MB / 8192 条。这些配置项与 README 中exporter-data下的linera-exporter.log记录了它处理过的所有区块与 blob的描述一一对应。索引器gRPC 服务与存储linera-indexer的启动命令为./linera-indexer-grpc \ --port ${INDEXER_PORT:-8081} \ --postgres postgresql://postgres:postgrespostgres:5432/linera_indexer即索引器通过 gRPC 对外提供数据查询把区块数据持久化到 PostgreSQL。镜像构建方式见 docker/Dockerfile.indexer它从仓库根目录构建linera-indexer-examplecrate 的linera-indexer-grpc二进制cargo build -p linera-indexer-example --bin linera-indexer-grpc运行镜像基于debian:bookworm-slim并安装netcat-openbsd供健康检查使用与sqlite3等工具。Dockerfile 的构建参数target、build_flag、build_folder、build_features、binaries允许跨架构构建或直接注入预编译二进制以加速迭代。数据持久化Compose 文件定义了几个命名卷与绑定挂载目录postgres-dataPostgreSQL 数据命名卷postgres-datascylla-dataScyllaDB 数据命名卷scylla-dataexporter-data区块导出器日志与数据绑定挂载./exporter-data其中的linera-exporter.log是日志导出器目的地的落盘文件记录了它处理过的全部区块与 blob可直接查看当前导出进度network-data网络配置与状态挂载到容器的/data。README 中提到的indexer-data卷内含indexer.dbSQLite 文件用于查看索引器数据库的当前状态。需要说明的是当前 Compose 编排以 PostgreSQL 作为索引器的持久化后端SQLite 路径描述的是旧版/本地运行形态下索引器数据库的观察方式无论哪种形态数据落到宿主机可访问目录的设计意图是一致的。故障排查查看日志# 全部服务 docker-compose -f docker-compose.indexer-test.yml logs # 指定服务 docker-compose -f docker-compose.indexer-test.yml logs linera-indexer检查服务健康状态docker-compose -f docker-compose.indexer-test.yml ps重置数据docker-compose -f docker-compose.indexer-test.yml down -v-v会一并删除命名卷中的数据配合make-all-down.sh的目录清理可彻底回到初始状态。开发与调试代码变更后重建docker build -f Dockerfile.indexer-test -t linera-all-test .. docker-compose -f docker-compose.indexer-test.yml up --force-recreate进入容器调试docker-compose -f docker-compose.indexer-test.yml exec linera-indexer bash从跑起来到理解数据流最后梳理一下整条链路的数据流帮助你把 Compose 中的每个服务串起来linera-network启动单验证者网络与 faucet 链--with-block-exporter参数让网络连接导出器linera-block-exporter从 Scylla 存储中读取区块与 blob按exporter-config.toml的destination_config同时写入日志文件与推送 gRPC 索引器linera-indexer接收 gRPC 数据并写入 PostgreSQL对外提供索引查询能力linera-explorer连接 PostgreSQL把链上数据以 Web 界面呈现前端 3001、API 3002。这套测试栈既适合在本地快速验证索引器/导出器的行为也适合作为 CI 中的集成测试基座。结合 docker/ci-compose.sh 可以看到类似的编排思路被用于生成测试配置并拉起整套服务。相关的索引器代码位于 linera-indexergRPC 服务与插件与 linera-exporter导出器实现需要深入研究某一层时可以直接从这两个 crate 入手。【免费下载链接】linera-protocolMain repository for the Linera protocol项目地址: https://gitcode.com/GitHub_Trending/li/linera-protocol创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考