Files
huobao-drama/Dockerfile
ShellMonster 3d6dda8a17 feat: 添加Docker国内镜像源配置支持
- 使用Build Args方式保持Dockerfile通用性
- 支持Docker Hub、npm、Go代理、Alpine apk镜像源配置
- 添加.env.example配置示例文件
- 更新README添加镜像源使用说明

配置方式:
1. 复制 .env.example 为 .env
2. 取消注释需要的镜像源配置
3. 运行 docker compose build

支持的镜像源:
- DOCKER_REGISTRY: Docker Hub 镜像前缀
- NPM_REGISTRY: npm 包镜像源
- GO_PROXY: Go 模块代理
- ALPINE_MIRROR: Alpine apk 镜像源
2026-01-20 11:06:30 +08:00

132 lines
3.3 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.
# 多阶段构建 Dockerfile for Huobao Drama
# ==================== 阶段1: 构建前端 ====================
# 声明构建参数(支持镜像源配置)
ARG DOCKER_REGISTRY=
ARG NPM_REGISTRY=
FROM ${DOCKER_REGISTRY:-}node:20-alpine AS frontend-builder
# 重新声明 ARGFROM 之后 ARG 作用域失效,需要重新声明)
ARG NPM_REGISTRY=
# 配置 npm 镜像源(条件执行)
ENV NPM_REGISTRY=${NPM_REGISTRY:-}
RUN if [ -n "$NPM_REGISTRY" ]; then \
npm config set registry "$NPM_REGISTRY" || true; \
fi
WORKDIR /app/web
# 复制前端依赖文件
COPY web/package*.json ./
# 安装前端依赖(包括 devDependencies构建需要
RUN npm install
# 复制前端源码
COPY web/ ./
# 构建前端
RUN npm run build
# ==================== 阶段2: 构建后端 ====================
# 每个阶段前重新声明构建参数
ARG DOCKER_REGISTRY=
ARG GO_PROXY=
ARG ALPINE_MIRROR=
FROM ${DOCKER_REGISTRY:-}golang:1.23-alpine AS backend-builder
# 重新声明 ARGFROM 之后 ARG 作用域失效,需要重新声明)
ARG GO_PROXY=
ARG ALPINE_MIRROR=
# 配置 Alpine 镜像源(条件执行)
ENV ALPINE_MIRROR=${ALPINE_MIRROR:-}
RUN if [ -n "$ALPINE_MIRROR" ]; then \
sed -i "s@dl-cdn.alpinelinux.org@$ALPINE_MIRROR@g" /etc/apk/repositories 2>/dev/null || true; \
fi
# 配置 Go 代理(使用 ENV 持久化到运行时)
ENV GOPROXY=${GO_PROXY:-https://proxy.golang.org,direct}
ENV GO111MODULE=on
# 安装必要的构建工具(纯 Go 编译,无需 CGO
RUN apk add --no-cache \
git \
ca-certificates \
tzdata
WORKDIR /app
# 复制 Go 模块文件
COPY go.mod go.sum ./
# 下载依赖
RUN go mod download
# 复制后端源码
COPY . .
# 复制前端构建产物
COPY --from=frontend-builder /app/web/dist ./web/dist
# 构建后端可执行文件(纯 Go 编译,使用 modernc.org/sqlite
RUN CGO_ENABLED=0 go build -ldflags="-w -s" -o huobao-drama .
# ==================== 阶段3: 运行时镜像 ====================
# 每个阶段前重新声明构建参数
ARG DOCKER_REGISTRY=
ARG ALPINE_MIRROR=
FROM ${DOCKER_REGISTRY:-}alpine:latest
# 重新声明 ARGFROM 之后 ARG 作用域失效,需要重新声明)
ARG ALPINE_MIRROR=
# 配置 Alpine 镜像源(条件执行)
ENV ALPINE_MIRROR=${ALPINE_MIRROR:-}
RUN if [ -n "$ALPINE_MIRROR" ]; then \
sed -i "s@dl-cdn.alpinelinux.org@$ALPINE_MIRROR@g" /etc/apk/repositories 2>/dev/null || true; \
fi
# 安装运行时依赖
RUN apk add --no-cache \
ca-certificates \
tzdata \
ffmpeg \
wget \
&& rm -rf /var/cache/apk/*
# 设置时区
ENV TZ=Asia/Shanghai
WORKDIR /app
# 从构建阶段复制可执行文件
COPY --from=backend-builder /app/huobao-drama .
# 复制前端构建产物
COPY --from=frontend-builder /app/web/dist ./web/dist
# 复制配置文件模板并创建默认配置
COPY configs/config.example.yaml ./configs/
RUN cp ./configs/config.example.yaml ./configs/config.yaml
# 复制数据库迁移文件
COPY migrations ./migrations/
# 创建数据目录root 用户运行,无需权限设置)
RUN mkdir -p /app/data/storage
# 暴露端口
EXPOSE 5678
# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:5678/health || exit 1
# 启动应用
CMD ["./huobao-drama"]