This commit is contained in:
toom1996
2026-10-19 00:33:25 +08:00
parent 3860e731db
commit 5db90af73a
17 changed files with 853 additions and 5244 deletions

View File

@ -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"]