- go 配置中心的代码编写
- go 用户微服务的编写
- 登录
- 注册
- 用户信息修改
- 用户信息查询
- 第三方登录(后期计划)
- JWT 鉴权
- ai 智核微服务的编写
- 通用 ai 的接口编写
- 反射机制调用函数
- 工作流
- 前端的编写
- go 用户部署的配置文件
- 编写thrift模板代码来配置自己的模板文件
- java demo 的编写
.
├── README.md
├── api-test // 请求接口测试
├── compose.yaml // docker-compose 配置文件
├── go-common // 存放公共的go代码
│ ├── conf // 配置文件
│ ├── error_code // 错误码
│ ├── go.mod // go 依赖包
│ ├── middleware // 中间件
│ │ └── jwt.go // jwt中间件
│ ├── nacos // nacos配置,含配置中心和服务发现
│ └── utils // 工具类
├── go-service // 存放go的微服务
│ ├── run.sh // 一键运行所有微服务
│ └── user // 用户微服务
│ ├── biz //业务逻辑相关的代码,主要修改这里
│ │ ├── dal // 数据访问层,用于初始化数据库和数据库相关的业务逻辑
│ │ ├── handler //(http 相关的)相当于 mvc 中的 controller,用于处理请求和返回响应
│ │ │ └── user_microservice
│ │ │ └── user_service.go
│ │ ├── router //路由相关的代码,用于初始化路由和中间件
│ │ │ ├── register.go
│ │ │ └── user_microservice
│ │ │ ├── middleware.go
│ │ │ └── user-service.go // 这种文件不要修改,因为每次生成代码都会覆盖
│ │ └── service //业务逻辑层,用于处理业务逻辑
│ ├── build.sh // 一键编译当前微服务
│ ├── conf // 配置文件,是单个微服务的配置文件,其中 nacos 相关配置是公共的,不在这里配置
│ │ ├── conf.go
│ │ ├── dev // 开发环境配置
│ │ ├── online // 线上环境配置
│ │ └── test // 测试环境配置
│ ├── docker-compose.yaml // 构建当前微服务所需的docker环境
│ ├── go.mod // go 依赖包
│ ├── handler.go //业务逻辑入口,更新时会覆盖
│ ├── hex_trans_handler.go // 业务逻辑入口,更新时不会覆盖
│ ├── kitex_gen // 生成的代码,这里不要修改
│ ├── main.go // 主函数
│ ├── model // 数据模型
│ ├── readme.md // 当前微服务说明文档
│ ├── script // 脚本文件
├── go.work //存放go的工作目录
├── idl //存放用于生成代码的thrift文件
├── k8s-config //k8s的配置文件
│ ├── auth.yaml //创建服务账号和角色
│ ├── cluster-config.yaml //创建服务
│ ├── database.yaml //创建数据库
│ ├── ingress.yaml //创建ingress规则
│ └── namespace.yaml //创建命名空间
├── redis // redis 数据存放的目录,用于持久化
└── some-think.md // 项目说明文档,整个项目的构思
使用 dockcer-compose 部署本地开发环境
docker-compose up -d
进入到 go-service 目录下,运行如下命令
bash run.sh
这个命令会自动运行 go 的所有微服务,如果需要查看日志,可以使用如下命令
tail -f 微服务名称/微服务名称.log
但是这里有个问题,就是每次关闭得手动关闭,使用以下步骤:
- 查看所有相关端口的进程:
lsof -i:端口号
- 杀掉进程
kill -9 进程号
进入到 go-service 目录下,这个目录下全部都是微服务的代码,可以进入到对应的微服务目录下,运行如下命令
go run .
这个命令会自动运行 go 的所有微服务,如果需要查看日志,可以使用如下命令
- 将微服务目录的Dockerfile拷贝到根目录下
- 构建镜像
docker build -t 微服务名称:版本号 .
- (可选)推送镜像
或者其实也可以使用我编写的脚本来自动构建镜像
sh deploy.sh
windows电脑点击deploy.bat即可运行
- 安装helm,参考在线教程
- 安装nginx-ingress
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install ingress-nginx ingress-nginx/ingress-nginx
- 运行
k8s-config/auth.yaml
文件,创建服务账号和角色,以保证服务的pod可以正确被创建
kubectl create namespace go-zero-demo
kubectl apply -f k8s-config/auth.yaml
- 运行
k8s-config/cluster-config.yaml
文件,将服务跑起来
这里需要注意一下,使用配置中的镜像名称,需要修改配置文件中的镜像名称
kubectl apply -f k8s-config/cluster-config.yaml
- 运行
k8s-config/ingress.yaml
文件,创建ingress规则,以保证服务可以被外部访问
kubectl apply -f k8s-config/ingress.yaml
可以运行如下命令查看服务是否正常运行
kubectl get pods --all-namespaces
mac 电脑使用 minikube 发现不能访问时,可以使用如下命令查看是否是因为ip地址不对导致的
minikube tunnel
- 安装 cwgo,教程:cwgo
- 在 go-service 目录下创建一个新的目录存放新的微服务代码
- 进入到新的目录下,运行如下命令生成一个新的 RPC 相关微服务
cwgo server --type RPC --module github.com/AdrianWangs/ai-nexus/go-service/{微服务名称} --server_name {微服务名称} --idl ../../idl/{相关 idl 文件} --template ../../idl/tpl/kitex/server/standard
- 运行如下命令生成一个新的 HTTP 相关微服务
cwgo server --type HTTP --module github.com/AdrianWangs/ai-nexus/go-service/{微服务名称} --server_name {微服务名称} --idl ../../idl/{相关 idl 文件}
- 修改 go.mod 文件,添加一个替换
replace github.com/AdrianWangs/ai-nexus/go-common => ../../go-common
如果该微服务还依赖其他微服务,需要添加其他微服务的替换
- 运行如下命令下载依赖包
go mod tidy
- 安装 cwgo,教程:cwgo
- 在 go-service 目录下创建一个新的目录存放新的微服务代码
- 进入到新的目录下,运行如下命令生成一个新的微服务(同时在一个端口开启 RPC 和 HTTP 服务)
cwgo server --type RPC --module github.com/AdrianWangs/ai-nexus/go-service/{微服务名称} --server_name {微服务名称} --idl ../../idl/{相关 idl 文件} --hex
- 在 main.go 中添加如下代码:
// nacos 注册中心
r := nacos.GetNacosRegistry()
opts = append(opts, server.WithRegistry(r))
上述代码用于向 nacos 注册中心注册服务
- 在 conf/conf.go 中添加如下代码以使用注册中心配置:
import (
common_config "github.com/AdrianWangs/ai-nexus/go-common/conf"
)
// 获取当前环境配置
env := GetEnv()
klog.Infof("当前环境: %s", env)
conf = new(Config)
// 从公共配置中加载 Nacos 配置
nacos_config := common_config.GetConf().Nacos
client, err := nacos.NewClient(nacos.Options{
Address: nacos_config.Address,
Port: nacos_config.Port,
NamespaceID: nacos_config.Namespace,
Group: nacos_config.Group,
})
if err != nil {
panic(err)
}
client.RegisterConfigCallback(vo.ConfigParam{
DataId: "{配置文件名称}.yaml",
Group: env,
Type: "yaml",
OnChange: nil,
}, func(s string, parser nacos.ConfigParser) {
err = yaml.Unmarshal([]byte(s), conf)
if err != nil {
klog.Error("转换配置失败 - %v", err)
panic(err)
}
klog.Info("重启配置")
// 打印配置
klog.Infof("配置:")
pretty.Printf("%# v\n", conf)
klog.Info("配置加载成功")
}, 100)
- 修改 go.mod 文件,添加一个替换
replace github.com/AdrianWangs/ai-nexus/go-common => ../../go-common
如果该微服务还依赖其他微服务,需要添加其他微服务的替换
- 运行如下命令下载依赖包
go mod tidy