后台项目结构

项目启动时 读取 ./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

如图

  1. docker 里面 的 /configs 文件夹
  2. /configs 目录被 k8s configMap 配置 覆盖 (就是说原来开发环境 的 config.yaml 被覆盖了 不起作用 )
  3. configMap 的名称
  4. 覆盖开发环境 的 生产环境 config.yaml 配置

这样就实现了 生产环境 和 开发环境 配置分离啦