This commit is contained in:
2026-01-25 21:59:00 +08:00
parent 7fd537bef3
commit 4cad3f0250
118 changed files with 30473 additions and 0 deletions

71
Dockerfile Normal file
View File

@@ -0,0 +1,71 @@
# 多阶段构建 - 后端 Dockerfile
# 阶段 1: 构建阶段
FROM golang:1.24-alpine AS builder
# 设置工作目录
WORKDIR /app
# 配置 Alpine 国内镜像源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 安装必要的构建工具
RUN apk add --no-cache git
# 配置 Go 国内代理
ENV GOPROXY=https://goproxy.cn,direct
# 复制 go mod 文件
COPY go.mod go.sum ./
# 下载依赖并更新 go.sum
RUN go mod download && go mod tidy
# 复制源代码
COPY . .
# 构建应用
# CGO_ENABLED=0 创建静态链接的二进制文件
# -ldflags="-w -s" 减小二进制文件大小
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
-ldflags="-w -s" \
-o server \
./cmd/server/main.go
# 阶段 2: 运行阶段
FROM alpine:latest
# 配置 Alpine 国内镜像源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 安装必要的运行时依赖
RUN apk --no-cache add ca-certificates tzdata
# 设置时区为上海
ENV TZ=Asia/Shanghai
# 创建非 root 用户
RUN addgroup -g 1000 appuser && \
adduser -D -u 1000 -G appuser appuser
# 设置工作目录
WORKDIR /app
# 从构建阶段复制二进制文件
COPY --from=builder /app/server .
# 创建数据目录
RUN mkdir -p /app/data && \
chown -R appuser:appuser /app
# 切换到非 root 用户
USER appuser
# 暴露端口
EXPOSE 2612
# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:2612/health || exit 1
# 启动应用
CMD ["./server"]