后台项目结构
项目启动时 读取 ./config 文件夹下的 config.yaml 前提是在 根目录下 跑 ,并且 命令是 go run ./cmd/post/ 这样 就 和 configs 文件夹平级了 ,可以 找到 config.yaml
config.yaml 内容如下
# user 微服务
user:
db:
host: 'localhost'
port: ':3306'
user: 'root'
password: '123456'
name: 'users'
server:
host: 'localhost'
port: ':50051' # 端口
# post 微服务
post:
db:
host: 'localhost'
port: ':3306' # 端口
user: 'root'
password: '123456'
name: 'posts'
server:
host: 'localhost'
port: ':50052' # 端口
# comment 微服务
comment:
db:
host: 'localhost'
port: ':3306' # 端口
user: 'root'
password: '123456'
name: 'comments'
server:
host: 'localhost'
port: ':50053' # 端口
# auth 微服务
auth:
server:
host: 'localhost'
port: ':50054' # 端口
jwt:
# jwt 密钥
secret: 'secret'
# jwt 超时时间
expires: 36000
这些 端口号和 ip 都是 开发时候的配置
dockerfile 配置
# syntax=docker/dockerfile:1
FROM golang:1.17-alpine as builder
# 启用 Go Modules 功能
RUN go env -w GO111MODULE=on
# go 设置国内源
RUN go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
# cd 到 /workspace 里面
WORKDIR /workspace
COPY go.mod go.mod
COPY go.sum go.sum
# 复制库
COPY api/ api/
COPY cmd/ cmd/
COPY internal/ internal/
COPY pkg/ pkg/
# 执行 go build 从./cmd/user/server.go 输出到 ./app 可执行文件
# 最终 app 可执行文件 路径 为 /workspace/app
RUN CGO_ENABLED=0 go build -a -o app ./cmd/post/
# 多段编译
FROM alpine
# cd 到 / 目录
WORKDIR /
# 复制 configs 配置文件夹
COPY configs/ configs/
# 把builder 阶段 的 成功 /workspace/app 可执行文件 复制到 当前目录来 (/workspace)
COPY --from=builder /workspace/app .
## 暴露容器端口 50051
EXPOSE 50052
#执行 /app 命令 运行 app 启动服务
ENTRYPOINT ["/app"]
/
/
配置 configMap 来 做 生产环境的配置
写 k8s yaml 的时候 给 pod 配置 volume , volume 的来源 选择 configMap
如图
- docker 里面 的 /configs 文件夹
- /configs 目录被 k8s configMap 配置 覆盖 (就是说原来开发环境 的 config.yaml 被覆盖了 不起作用 )
- configMap 的名称
- 覆盖开发环境 的 生产环境 config.yaml 配置
这样就实现了 生产环境 和 开发环境 配置分离啦