本文档涵盖了fuel-core的部署策略、容器化、CI/CD流水线以及运维方面。它详细介绍了fuel-core如何在从本地开发到生产系统的不同环境中进行打包、测试和部署。
有关核心服务架构和生命周期管理的信息,请参见服务生命周期。有关Kubernetes部署模式和容器编排的详细信息,请参见Docker和Kubernetes部署。
fuel-core项目提供了多个Docker镜像,以支持不同的部署场景和用例。
主要的部署工件是一个多阶段Docker镜像,它生成一个最小运行时容器。
Docker构建过程实施了多项优化策略
多阶段构建过程
chef 阶段:设置Rust工具链和cargo-chef用于依赖缓存planner 阶段:从 Cargo.lock 生成依赖配方builder 阶段:分别编译依赖项和应用程序run 阶段:仅包含所需组件的最小Ubuntu运行时构建特性
FEATURES="production" 构建参数实现默认生产特性DEBUG_SYMBOLS=false 构建参数实现可选调试符号tonistiigi/xx 实现多架构交叉编译支持该项目为特定用例构建了额外的专用镜像
E2E 客户端镜像:一个独立的镜像,包含用于集成测试场景的端到端测试客户端。
调试/性能分析镜像:一个增强版本,启用了调试符号,用于性能分析和故障排除。
来源:deployment/e2e-client.Dockerfile1-56 .github/workflows/docker-images.yml196-297
fuel-core项目实现了一个全面的CI/CD流水线,确保代码质量,进行广泛测试,并自动化部署流程。
CI系统运行一个涵盖多种场景的全面测试矩阵
| 命令 | 参数 | 目的 |
|---|---|---|
clippy | --all-targets --all-features | 所有特性下的Lint检查 |
clippy | -p fuel-core-wasm-executor --target wasm32-unknown-unknown | WASM执行器验证 |
nextest | --workspace | 快速并行测试执行 |
nextest | --all-features --workspace | 启用所有特性的测试 |
nextest | -p fuel-core --no-default-features | 最小特性集测试 |
nextest | --features fault-proving --test integration_tests | 故障证明集成 |
check | 核心包的WASM目标 | WebAssembly 兼容性 |
来源:.github/workflows/ci.yml102-200
该流水线为多个平台生成发布二进制文件
来源:.github/workflows/ci.yml308-452
该项目将镜像发布到多个容器注册表,以提高可用性和冗余性
| 注册表 | 目的 | 镜像名称 |
|---|---|---|
ghcr.io/fuellabs/fuel-core | 主要的GitHub注册表 | Latest、SHA、分支标签 |
public.ecr.aws/fuellabs/fuel-core | AWS ECR 公共 | Latest、SHA、分支标签 |
docker.io/fuellabs/fuel-core | Docker Hub | 只读镜像 |
来源:.github/workflows/docker-images.yml171-184
fuel-core项目会自动为带有 preview/ 前缀的分支部署临时测试环境。
临时环境配置如下:
preview/feature-x → feature-x)latest 或用于测试的特定SHAfuel-dev1 环境设置来源:.github/workflows/deploy-test-env.yml1-39 .github/workflows/delete-test-env.yml1-39
该项目提供了在推送更改之前在本地运行CI检查的工具。
ci_checks.sh 脚本在本地复现了大多数CI流水线步骤
本地开发环境需要
1.85.0(在 rust-toolchain.toml 中指定)rustfmt 的 Nightly 格式化器cargo-sort、cargo-make、cargo-nextestprettier 和 prettier-plugin-toml 的Node.js来源:ci_checks.sh1-40 rust-toolchain.toml1-4
容器规格
ubuntu:22.04,以实现最小攻击面ca-certificates4000 (API), 30333 (P2P)DB_PATH 配置数据库路径构建要求
依赖管理
cargo update 自动更新依赖容器安全
来源:deployment/Dockerfile67-99 .github/workflows/dependencies.yml1-116
部署基础设施支持
SLACK_WEBHOOK_NOTIFY_BUILD 进行构建状态的Slack通知来源:.github/workflows/ci.yml195-199 .github/workflows/docker-images.yml293-297