| # ---- 第一阶段:构建 ---- | |
| # 使用与项目匹配的 Go 版本 | |
| FROM golang:1.24-alpine AS builder | |
| # 为 CGO 安装构建依赖 (gcc, musl-dev等) | |
| RUN apk add --no-cache build-base | |
| # 设置工作目录 | |
| WORKDIR /app | |
| # 复制 go.mod 和 go.sum 文件 | |
| COPY go.mod go.sum ./ | |
| # 下载依赖 | |
| RUN go mod download | |
| # 复制所有源代码 | |
| COPY . . | |
| # 构建 Go 应用,启用 CGO 以支持 go-sqlite3 | |
| # 注意:已移除 CGO_ENABLED=0 | |
| RUN go build -ldflags="-w -s" -o /atlassian-proxy . | |
| # ---- 第二阶段:运行 ---- | |
| # 使用一个非常小的基础镜像 | |
| FROM alpine:latest | |
| # 设置工作目录 | |
| WORKDIR /app | |
| # 从构建阶段复制编译好的二进制文件 | |
| COPY --from=builder /atlassian-proxy /app/atlassian-proxy | |
| # 复制 Web 界面所需的 templates 和 static 目录 | |
| COPY --from=builder /app/templates /app/templates/ | |
| COPY --from=builder /app/static /app/static/ | |
| # 创建非 root 用户和数据目录 | |
| RUN addgroup -S appgroup && adduser -S appuser -G appgroup && \ | |
| mkdir -p /data && \ | |
| chown appuser:appgroup /data | |
| # 声明数据卷以实现持久化 | |
| VOLUME /data | |
| # 切换到非 root 用户 | |
| USER appuser | |
| # 暴露应用端口 | |
| EXPOSE 8000 | |
| # 启动应用 | |
| CMD ["./atlassian-proxy"] | |