axonhub / Dockerfile
llzai's picture
Upload 2 files
bf86ba9 verified
Raw
History Blame Contribute Delete
3.46 kB
# AxonHub Hugging Face Spaces Dockerfile
#
# 此 Dockerfile 专为 Hugging Face Spaces 部署优化
# 使用 PostgreSQL 作为数据库(需要配置外部数据库)
#
# 重要:此文件需要复制到项目根目录使用
# cp hf/Dockerfile ./Dockerfile
# ============================================
# Stage 1: 构建前端
# ============================================
FROM --platform=$BUILDPLATFORM node:20-alpine AS frontend-builder
WORKDIR /build
# 启用 pnpm
RUN corepack enable && corepack prepare pnpm@latest --activate
# 复制前端目录
COPY frontend ./frontend
WORKDIR /build/frontend
# 安装依赖
RUN --mount=type=cache,target=/root/.local/share/pnpm/store \
pnpm install --frozen-lockfile
# 构建前端(增加 Node.js 内存限制)
ENV NODE_OPTIONS="--max-old-space-size=4096"
RUN pnpm build
# ============================================
# Stage 2: 复制前端构建产物
# ============================================
FROM alpine AS frontend-dist
COPY --from=frontend-builder /build/frontend/dist /dist
# ============================================
# Stage 3: 构建后端
# ============================================
FROM golang:alpine AS backend-builder
WORKDIR /build
# 安装必要工具
RUN apk add --no-cache git ca-certificates tzdata
# 复制 Go 模块文件
COPY go.mod go.sum ./
# 下载依赖
RUN --mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \
GOTOOLCHAIN=auto go mod download
# 复制源码
COPY . .
# 复制前端构建产物到静态文件目录
COPY --from=frontend-dist /dist /build/internal/server/static/dist
# 设置构建环境变量
ENV GO111MODULE=on \
CGO_ENABLED=0 \
GOOS=linux
# 构建二进制文件
RUN --mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \
GOTOOLCHAIN=auto go build \
-tags=nomsgpack \
-ldflags "-s -w -X 'github.com/looplj/axonhub/internal/build.Version=$(cat internal/build/VERSION 2>/dev/null || echo dev)' -X 'github.com/looplj/axonhub/internal/build.BuildTime=$(date -u +%Y-%m-%dT%H:%M:%SZ)'" \
-o axonhub \
./cmd/axonhub
# ============================================
# Stage 4: 最终运行镜像
# ============================================
FROM alpine
# 安装运行时依赖
RUN apk add --no-cache ca-certificates tzdata
# Hugging Face Spaces 要求使用非 root 用户运行
# 创建 uid=1000 的用户(HF 标准)
RUN adduser -D -u 1000 user
# 切换到非 root 用户
USER user
# 设置工作目录
WORKDIR /home/user/app
# 复制二进制文件
COPY --from=backend-builder --chown=user:user /build/axonhub /home/user/app/axonhub
# 创建数据目录(用于日志等)
RUN mkdir -p /home/user/app/data /home/user/app/logs
# ============================================
# 环境变量配置
# ============================================
# 服务器配置
ENV AXONHUB_SERVER_HOST=0.0.0.0
ENV AXONHUB_SERVER_PORT=7860
ENV AXONHUB_SERVER_DEBUG=false
# 数据库配置(PostgreSQL)
# 注意:实际的 DSN 应通过 HF Secrets 配置,这里只是默认值
ENV AXONHUB_DB_DIALECT=postgres
ENV AXONHUB_DB_DSN=""
# 日志配置
ENV AXONHUB_LOG_LEVEL=info
ENV AXONHUB_LOG_ENCODING=json
# Hugging Face Spaces 使用端口 7860
EXPOSE 7860
# 启动应用
ENTRYPOINT ["/home/user/app/axonhub"]