菜单

部署与运维

相关源文件

本文档涵盖了fuel-core的部署策略、容器化、CI/CD流水线以及运维方面。它详细介绍了fuel-core如何在从本地开发到生产系统的不同环境中进行打包、测试和部署。

有关核心服务架构和生命周期管理的信息,请参见服务生命周期。有关Kubernetes部署模式和容器编排的详细信息,请参见Docker和Kubernetes部署

容器镜像与Docker部署

fuel-core项目提供了多个Docker镜像,以支持不同的部署场景和用例。

主 fuel-core 镜像

主要的部署工件是一个多阶段Docker镜像,它生成一个最小运行时容器。

Docker构建过程实施了多项优化策略

多阶段构建过程

  • chef 阶段:设置Rust工具链和cargo-chef用于依赖缓存
  • planner 阶段:从 Cargo.lock 生成依赖配方
  • builder 阶段:分别编译依赖项和应用程序
  • run 阶段:仅包含所需组件的最小Ubuntu运行时

构建特性

  • 通过 FEATURES="production" 构建参数实现默认生产特性
  • 通过 DEBUG_SYMBOLS=false 构建参数实现可选调试符号
  • 使用 tonistiigi/xx 实现多架构交叉编译支持
  • 积极缓存Cargo注册表、git依赖项和构建工件

来源:deployment/Dockerfile1-99

专用镜像

该项目为特定用例构建了额外的专用镜像

E2E 客户端镜像:一个独立的镜像,包含用于集成测试场景的端到端测试客户端。

调试/性能分析镜像:一个增强版本,启用了调试符号,用于性能分析和故障排除。

来源:deployment/e2e-client.Dockerfile1-56 .github/workflows/docker-images.yml196-297

CI/CD 流水线

fuel-core项目实现了一个全面的CI/CD流水线,确保代码质量,进行广泛测试,并自动化部署流程。

流水线阶段

验证矩阵

CI系统运行一个涵盖多种场景的全面测试矩阵

命令参数目的
clippy--all-targets --all-features所有特性下的Lint检查
clippy-p fuel-core-wasm-executor --target wasm32-unknown-unknownWASM执行器验证
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-coreAWS ECR 公共Latest、SHA、分支标签
docker.io/fuellabs/fuel-coreDocker Hub只读镜像

标签策略

来源:.github/workflows/docker-images.yml171-184

临时测试环境

fuel-core项目会自动为带有 preview/ 前缀的分支部署临时测试环境。

环境生命周期

环境配置

临时环境配置如下:

  • 命名空间:派生自分支名称(例如,preview/feature-xfeature-x
  • 镜像标签latest 或用于测试的特定SHA
  • 配置fuel-dev1 环境设置
  • 基础设施:带有自动清理功能的AWS EKS

来源:.github/workflows/deploy-test-env.yml1-39 .github/workflows/delete-test-env.yml1-39

本地开发工作流

该项目提供了在推送更改之前在本地运行CI检查的工具。

本地CI脚本

ci_checks.sh 脚本在本地复现了大多数CI流水线步骤

所需工具

本地开发环境需要

  • Rust 1.85.0(在 rust-toolchain.toml 中指定)
  • 用于 rustfmt 的 Nightly 格式化器
  • cargo-sortcargo-makecargo-nextest
  • 带有 prettierprettier-plugin-toml 的Node.js

来源:ci_checks.sh1-40 rust-toolchain.toml1-4

运营注意事项

资源要求

容器规格

  • 基础镜像:ubuntu:22.04,以实现最小攻击面
  • 运行时依赖:仅 ca-certificates
  • 暴露端口:4000 (API), 30333 (P2P)
  • 卷挂载:通过 DB_PATH 配置数据库路径

构建要求

  • 多架构交叉编译支持
  • Cargo构建缓存优化
  • WASM目标编译能力

安全措施

依赖管理

  • 通过每周 cargo update 自动更新依赖
  • OpenSSL预防检查以避免供应链问题
  • 集成Cargo audit用于漏洞扫描

容器安全

  • 不包含构建工具的最小运行时镜像
  • 非root执行上下文
  • 通过依赖固定实现可复现构建

来源:deployment/Dockerfile67-99 .github/workflows/dependencies.yml1-116

监控与可观测性

部署基础设施支持

  • 通过 SLACK_WEBHOOK_NOTIFY_BUILD 进行构建状态的Slack通知
  • GitHub Actions 状态报告
  • 容器注册表健康监控
  • 临时环境的自动化清理

来源:.github/workflows/ci.yml195-199 .github/workflows/docker-images.yml293-297