update
This commit is contained in:
29
Dockerfile
29
Dockerfile
@ -2,13 +2,18 @@
|
||||
FROM golang:1.26-alpine AS build
|
||||
WORKDIR /src
|
||||
|
||||
# 先拉依赖,利用层缓存
|
||||
# 国内构建默认走 goproxy.cn:服务器上没有本地模块缓存,直连 proxy.golang.org 常常超时。
|
||||
# 换环境时用 --build-arg GOPROXY=https://proxy.golang.org,direct 覆盖。
|
||||
ARG GOPROXY=https://goproxy.cn,direct
|
||||
ENV GOPROXY=$GOPROXY
|
||||
|
||||
# 先拉依赖,利用层缓存(改业务代码时不会重复下载模块)
|
||||
COPY go.mod go.sum ./
|
||||
RUN go mod download
|
||||
|
||||
COPY . .
|
||||
# 静态链接,便于在 alpine 运行时直接运行
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -o /out/server ./cmd/server
|
||||
# -trimpath 去掉构建机的绝对路径;-s -w 去掉符号表与调试信息(约 50MB -> 32MB)
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags "-s -w" -o /out/server ./cmd/server
|
||||
|
||||
# ---- 运行阶段 ----
|
||||
FROM alpine:3.20
|
||||
@ -16,12 +21,24 @@ RUN apk add --no-cache ca-certificates tzdata
|
||||
|
||||
WORKDIR /app
|
||||
COPY --from=build /out/server /app/server
|
||||
# 模板与后台静态资源已用 go:embed 打进二进制,这里只需要配置
|
||||
COPY configs ./configs
|
||||
|
||||
# 上传目录(容器外挂 volume)
|
||||
# 本地存储兜底目录:启用 S4 时图片在对象存储,此目录只承接临时/兜底文件
|
||||
RUN mkdir -p /app/uploads
|
||||
|
||||
ENV CONFIG_PATH=/app/configs/config.yml
|
||||
EXPOSE 8090
|
||||
ENV CONFIG_PATH=/app/configs/config.yml \
|
||||
GIN_MODE=release \
|
||||
UPLOAD_DIR=/app/uploads
|
||||
|
||||
# 三个端口的暴露面(详见 README):
|
||||
# 8090 公开 API(生产由前端 nginx 同源反代)
|
||||
# 8091 SSG 构建期内部接口(只绑回环,绝不对外)
|
||||
# 8092 管理后台(只绑回环)
|
||||
EXPOSE 8090 8091 8092
|
||||
|
||||
# busybox 自带 wget,无需额外安装
|
||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
|
||||
CMD wget -qO- http://127.0.0.1:8090/api/health || exit 1
|
||||
|
||||
CMD ["/app/server"]
|
||||
|
||||
Reference in New Issue
Block a user