Files
junhong_cmp_fiber/Dockerfile.api
huang 1e979cf017
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Failing after 1m42s
重构部署流程:使用私有镜像仓库和标准化配置
核心改进:
1. 使用私有仓库基础镜像(极速拉取)
   - registry.boss160.cn/base/golang:1.25.6-alpine
   - registry.boss160.cn/base/alpine:3.19

2. 移除 Docker Compose 安装步骤(已在服务器永久安装)
   - 减少 51 行复杂逻辑
   - 构建时间减少 10-60 秒

3. 移除文件复制步骤(configs 已在服务器部署目录)
   - 减少 20+ 行代码
   - 简化维护流程

4. 极简化部署逻辑
   - 只保留:拉取镜像 → 重启服务 → 显示状态
   - 从 ~30 行减少到 7 行

效果:
- 净减少 68 行代码
- 工作流清晰易懂
- 构建速度提升(基础镜像从内网拉取)
- 维护成本大幅降低
2026-01-20 10:13:50 +08:00

82 lines
2.1 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ================================
# 阶段 1: 构建阶段
# ================================
FROM registry.boss160.cn/base/golang:1.25.6-alpine AS builder
# 使用阿里云镜像源加速
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 设置工作目录
WORKDIR /build
# 设置 Go 代理(必须在所有 go 命令前)
ENV GOPROXY=https://goproxy.cn,direct \
GO111MODULE=on \
CGO_ENABLED=0
# 安装必要的构建工具
RUN apk add --no-cache git ca-certificates tzdata
# 复制 go.mod 和 go.sum利用 Docker 缓存)
COPY go.mod go.sum ./
RUN go mod download
# 复制源代码
COPY . .
# 编译 API 服务(静态链接,使用并行编译)
RUN GOOS=linux GOARCH=amd64 go build \
-ldflags="-w -s" \
-o /build/api \
./cmd/api
# 下载 golang-migrate 工具(使用 GOPROXY 加速)
RUN go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest
# ================================
# 阶段 2: 运行阶段
# ================================
FROM registry.boss160.cn/base/alpine:3.19
# 使用阿里云镜像源加速
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 安装运行时依赖
RUN apk add --no-cache ca-certificates tzdata bash
# 设置时区
ENV TZ=Asia/Shanghai
# 创建非 root 用户
RUN addgroup -g 1000 appuser && \
adduser -D -u 1000 -G appuser appuser
# 设置工作目录
WORKDIR /app
# 从构建阶段复制二进制文件
COPY --from=builder /build/api /app/api
COPY --from=builder /go/bin/migrate /usr/local/bin/migrate
# 复制配置文件和迁移文件
COPY configs /app/configs
COPY migrations /app/migrations
# 复制启动脚本
COPY docker/entrypoint-api.sh /app/entrypoint.sh
RUN chmod +x /app/entrypoint.sh
# 切换到非 root 用户
USER appuser
# 暴露端口
EXPOSE 8088
# 健康检查(使用 Alpine 自带的 wget
HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:8088/health || exit 1
# 启动命令
ENTRYPOINT ["/app/entrypoint.sh"]