跳到主要内容

Golang 项目部署

本篇文档介绍如何在 Rainbond 平台上通过源代码部署 Golang 项目。

项目识别

Rainbond 会按以下规则识别 Golang 项目:

  • go.mod:源码根目录存在此文件,识别为 Golang 项目

支持的项目类型

Rainbond 当前不会像 Node.js 那样按 Gin、Echo、Fiber 等框架做单独识别,核心是项目能否被 Go buildpack 编译为可执行文件。

项目类型说明
单模块项目根目录存在 go.mod,默认构建当前模块
多入口项目可通过构建目标参数指定要编译的 main
私有模块项目可通过 GOPROXYGOPRIVATE 配置私有依赖拉取

构建参数

在组件的 构建源 页面或构建环境变量中,可以配置以下常用参数:

参数说明默认值
Go 版本指定 Go 运行时版本自动识别,未识别时为 1.25
模块代理Go Modules 代理地址https://goproxy.cn
私有模块私有模块匹配规则
构建目标指定需要编译的 main 包或包路径空则自动识别
构建参数透传给 go build 的 flags
链接参数透传给 go build -ldflags
启动方式默认或自定义默认

支持的 Go 版本

1.241.25

其中平台默认版本为 1.25

模块代理默认值

Rainbond 在源码识别阶段会为 Golang 项目默认注入国内代理:

  • GOPROXYhttps://goproxy.cn

如果项目依赖私有仓库,建议同时配置 GOPRIVATE,并确保构建环境能够访问对应的 Git 服务或模块代理。

多入口项目示例

如果项目有多个 main 包,可以通过构建目标指定入口,例如:

./cmd/manage-server

启动命令

如果需要自定义启动命令,可以通过以下任一方式提供:

  • 在源码根目录添加 Procfile
  • 在源码构建参数中选择自定义启动方式并填写启动命令

例如:

web: ./your-binary

单模块项目部署

部署步骤

  1. 进入目标团队,点击 新建应用
  2. 选择 从源码构建
  3. 按表单填写:
    • 组件名称
    • 组件英文名称
    • 仓库地址
    • 子目录路径
    • 代码版本
  4. 点击 确认创建
  5. Rainbond 自动识别为 Golang 项目
  6. 保持默认构建目标为空,直接构建并部署

示例仓库:

配置项内容
仓库地址https://gitee.com/rainbond/sourcecode-examples.git
代码分支master
子目录go/single-module

多入口项目部署

部署步骤

  1. 进入目标团队,点击 新建应用
  2. 选择 从源码构建
  3. 按表单填写:
    • 组件名称
    • 组件英文名称
    • 仓库地址
    • 子目录路径
    • 代码版本
  4. 点击 确认创建
  5. Rainbond 自动识别为 Golang 项目
  6. 在构建源中填写正确的 构建目标,必要时确认自定义启动命令
  7. 构建并部署

示例仓库:

配置项内容
仓库地址https://gitee.com/rainbond/sourcecode-examples.git
代码分支master
子目录go/multi-module

对于这个多入口示例,通常需要根据实际要运行的 main 包填写 构建目标。如果默认启动方式不符合预期,再通过 Procfile 或页面中的自定义启动命令覆盖。

常见问题

构建成功,但启动的不是我想要的服务

这通常发生在一个仓库里存在多个 main 包时。请优先检查:

  • 构建目标 是否填写为真正要运行的包路径
  • 是否误用了旧的 Procfile 或自定义启动命令

如果不确定,可以先查看构建日志中的编译目标,再回到构建源页面调整。

构建失败,提示无法下载私有依赖

这通常与私有模块访问配置有关。建议优先检查:

  • GOPRIVATE 是否包含私有模块的域名或路径前缀
  • GOPROXY 是否符合你的依赖拉取策略
  • 构建环境是否具备访问私有 Git 服务或私有代理的网络与凭据

修改了依赖或 go.mod,但构建结果没有变化

这通常与缓存有关。可以先尝试开启 禁用缓存 后重新构建。

需要自定义启动命令怎么办

你可以通过以下任一方式覆盖默认启动方式:

  • 在源码根目录添加 Procfile
  • 在构建源页面选择自定义启动方式并填写启动命令

如果启动前还需要执行额外脚本,也建议统一写进启动命令中。

Go 版本与本地开发环境不一致怎么办

建议先确认 go.mod 中声明的 Go 版本,再到构建源页面选择对应版本。如果本地和平台使用的 Go 版本差异较大,可能会导致依赖解析或编译行为不一致。