- 创建Repository接口定义(UserRepository、ProfileRepository、TextureRepository等) - 创建Repository接口实现 - 创建依赖注入容器(container.Container) - 改造Handler层使用依赖注入(AuthHandler、UserHandler、TextureHandler) - 创建新的路由注册方式(RegisterRoutesWithDI) - 提供main.go示例文件展示如何使用依赖注入 同时包含之前的安全修复: - CORS配置安全加固 - 头像URL验证安全修复 - JWT algorithm confusion漏洞修复 - Recovery中间件增强 - 敏感错误信息泄露修复 - 类型断言安全修复
64 lines
1.3 KiB
Docker
64 lines
1.3 KiB
Docker
# ==================== 构建阶段 ====================
|
|
FROM golang:latest AS builder
|
|
|
|
# 安装构建依赖
|
|
RUN apk add --no-cache git ca-certificates tzdata
|
|
|
|
# 设置工作目录
|
|
WORKDIR /build
|
|
|
|
# 复制依赖文件
|
|
COPY go.mod go.sum ./
|
|
|
|
# 配置 Go 代理并下载依赖
|
|
ENV GOPROXY=https://goproxy.cn,direct
|
|
RUN go mod download
|
|
|
|
# 复制源代码
|
|
COPY . .
|
|
|
|
# 构建应用
|
|
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
|
|
-ldflags="-w -s -X main.Version=$(git describe --tags --always --dirty 2>/dev/null || echo 'dev')" \
|
|
-o server ./cmd/server
|
|
|
|
# ==================== 运行阶段 ====================
|
|
FROM alpine:3.19
|
|
|
|
# 安装运行时依赖
|
|
RUN apk add --no-cache ca-certificates tzdata
|
|
|
|
# 设置时区
|
|
ENV TZ=Asia/Shanghai
|
|
|
|
# 创建非 root 用户
|
|
RUN adduser -D -g '' appuser
|
|
|
|
# 设置工作目录
|
|
WORKDIR /app
|
|
|
|
# 从构建阶段复制二进制文件
|
|
COPY --from=builder /build/server .
|
|
|
|
# 复制配置文件目录结构
|
|
COPY --from=builder /build/configs ./configs
|
|
|
|
# 设置文件权限
|
|
RUN chown -R appuser:appuser /app
|
|
|
|
# 切换到非 root 用户
|
|
USER appuser
|
|
|
|
# 暴露端口
|
|
EXPOSE 8080
|
|
|
|
# 健康检查
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
|
CMD wget --no-verbose --tries=1 --spider http://localhost:8080/api/health || exit 1
|
|
|
|
# 启动应用
|
|
ENTRYPOINT ["./server"]
|
|
|
|
|
|
|