2026-08-09 16:20:13 +08:00
2026-08-09 16:20:13 +08:00
2026-08-09 16:20:13 +08:00
2026-08-09 16:20:13 +08:00
2026-08-09 16:20:13 +08:00
2026-08-09 16:20:13 +08:00

BSM Infra Full

BSM 后端服务的 Go workspace包含基础能力、电商、财务、社交服务以及可选择组件运行的单体入口。所有模块统一使用 Go 1.26.5

目录结构

目录 服务
module/base ads、cloud、cms、feedback、fts、initial、logs、mgt、passport、sender
module/ec address、delivery、mall、market、order
module/finance wallet
module/social feed、group、relation
protobuf 跨服务共享的 protobuf 定义,目前包含 blocks.proto
cmd 聚合上述服务的单体启动器
go.work 21 个 Go 模块的 workspace 定义

各服务的接口、配置和部署细节见对应 module/**/README.md

环境要求

  • Go 1.26.5
  • Git
  • 按所运行服务准备 PostgreSQL、Redis、etcd、MQ 或对象存储等外部依赖
  • 重新生成 protobuf 时可使用仓库内 .tools/ 的工具,或在 PATH 中安装 protocprotoc-gen-goprotoc-gen-go-grpcprotoc-gen-grpc-gateway

确认工具链:

go version
go work sync

统一重新生成 protobuf

bash scripts/generate-protobuf.sh

脚本以根目录 protobuf/blocks.proto 为共享定义,并为各服务生成 protobuf、gRPC 和 grpc-gateway 代码。生成后的兼容别名继续保留旧模块中的公共类型名。

更新所有 workspace 模块的依赖:

bash scripts/update-all.sh

脚本会为每个模块执行 go get -u ./...go mod tidy,最后运行 go work sync;它不会自动提交或推送 Git 变更。

编译全部 19 个独立服务:

bash scripts/build-all-linux.sh

脚本固定交叉编译 Linux x86-64GOOS=linuxGOARCH=amd64CGO_ENABLED=0),产物写入 builds/<领域>-<模块>builds/ 已加入 .gitignore,聚合入口 cmd 不包含在批量构建中。

配置

每个服务的 etc/ 目录包含 *_dev.yaml*_test.yaml*_prod.yaml 示例。提交到仓库的配置只能包含占位值;请在本地副本或部署系统的密钥管理中注入真实凭据,不要提交数据库密码、访问密钥、令牌或私钥。

本仓库审计时已移除过明文凭据。如果这些凭据曾在真实环境使用应立即在数据库、SMTP、对象存储及相关服务侧轮换。

运行

运行单个服务时,进入其模块目录。例如:

cd module/base/passport
go run ./cmd/main

运行聚合入口:

cd cmd
go run ./main

默认启动全部可聚合组件。通过 BSM_SERVICES 选择服务,名称以逗号分隔:

# Linux/macOS
BSM_SERVICES=passport,order,wallet go run ./main

# PowerShell
$env:BSM_SERVICES = "passport,order,wallet"
go run ./main

可选组件为:adscloudcmsfeedbackftsinitiallogsmgtpassportsenderaddressdeliverymallmarketorderwallet。社交服务目前作为独立模块运行,尚未接入聚合入口。

测试

根目录不是 Go module因此不要在根目录执行 go test ./...。应逐 workspace 模块测试。

PowerShell

go list -m -f '{{.Dir}}' | ForEach-Object {
    Push-Location $_
    try { go test ./... } finally { Pop-Location }
}

Linux/macOS

go list -m -f '{{.Dir}}' | while IFS= read -r module; do
  (cd "$module" && go test ./...)
done

依赖运行中服务或真实基础设施的测试带有 integration build tag默认测试不会访问外部系统。准备好测试环境和对应的 BSM_*_TOKEN 等变量后,在目标模块显式运行:

go test -tags=integration ./...

建议提交前执行:

gofmt -w .
go vet ./...
go test ./...

最后两条命令需在每个模块目录执行,可使用上面的 workspace 循环。

开发约定

  • Go 版本声明、Docker 构建镜像和 CI 构建镜像统一为 1.26.5
  • 新模块必须加入 go.work,并确保本地 replace 使用当前 module/... 目录结构。
  • protobuf 描述符必须包含服务命名空间,避免多个服务聚合到同一进程时发生全局文件名冲突。
  • 外部依赖测试使用 //go:build integration,不得让默认测试依赖网络或已启动服务。
  • 配置和测试数据中不得包含真实凭据或个人信息。
Description
all apps
Readme 5.3 MiB
Languages
Go 61.2%
TypeScript 38.4%
Shell 0.4%