Golang 项目部署
本篇文档介绍如何在 Rainbond 平台上通过源代码部署 Golang 项目。
项目识别
Rainbond 会按以下规则识别 Golang 项目:
go.mod:源码根目录存在此文件,识别为 Golang 项目
支持的项目类型
Rainbond 当前不会像 Node.js 那样按 Gin、Echo、Fiber 等框架做单独识别,核心是项目能否被 Go buildpack 编译为可执行文件。
| 项目类型 | 说明 |
|---|---|
| 单模块项目 | 根目录存在 go.mod,默认构建当前模块 |
| 多入口项目 | 可通过构建目标参数指定要编译的 main 包 |
| 私有模块项目 | 可通过 GOPROXY 和 GOPRIVATE 配置私有依赖拉取 |
构建参数
在组件的 构建源 页面或构建环境变量中,可以配置以下常用参数:
| 参数 | 说明 | 默认值 |
|---|---|---|
| Go 版本 | 指定 Go 运行时版本 | 自动识别,未识别时为 1.25 |
| 模块代理 | Go Modules 代理地址 | https://goproxy.cn |
| 私有模块 | 私有模块匹配规则 | 空 |
| 构建目标 | 指定需要编译的 main 包或包路径 | 空则自动识别 |
| 构建参数 | 透传给 go build 的 flags | 空 |
| 链接参数 | 透传给 go build -ldflags | 空 |
| 启动方式 | 默认或自定义 | 默认 |
支持的 Go 版本
1.24、1.25
其中平台默认版本为 1.25。
模块代理默认值
Rainbond 在源码识别阶段会为 Golang 项目默认注入国内代理:
- GOPROXY:
https://goproxy.cn
如果项目依赖私有仓库,建议同时配置 GOPRIVATE,并确保构建环境能够访问对应的 Git 服务或模块代理。
多入口项目示例
如果项目有多个 main 包,可以通过构建目标指定入口,例如:
./cmd/manage-server
启动命令
如果需要自定义启动命令,可以通过以下任一方式提供:
- 在源码根目录添加
Procfile - 在源码构建参数中选择自定义启动方式并填写启动命令
例如:
web: ./your-binary
单模块项目部署
部署步骤
- 进入目标团队,点击 新建应用
- 选择 从源码构建
- 按表单填写:
- 组件名称
- 组件英文名称
- 仓库地址
- 子目录路径
- 代码版本
- 点击 确认创建
- Rainbond 自动识别为 Golang 项目
- 保持默认构建目标为空,直接构建并部署
示例仓库:
| 配置项 | 内容 |
|---|---|
| 仓库地址 | https://gitee.com/rainbond/sourcecode-examples.git |
| 代码分支 | master |
| 子目录 | go/single-module |
多入口项目部署
部署步骤
- 进入目标团队,点击 新建应用
- 选择 从源码构建
- 按表单填写:
- 组件名称
- 组件英文名称
- 仓库地址
- 子目录路径
- 代码版本
- 点击 确认创建
- Rainbond 自动识别为 Golang 项目
- 在构建源中填写正确的
构建目标,必要时确认自定义启动命令 - 构建并部署
示例仓库:
| 配置项 | 内容 |
|---|---|
| 仓库地址 | 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 版本差异较大,可能会导致依赖解析或编译行为不一致。