Spaces:
Paused
Paused
| # 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"] |