--- title: Grok2API emoji: 🤖 colorFrom: blue colorTo: purple sdk: docker pinned: false license: mit --- # 🤖 Grok2API on HuggingFace Spaces > 基于 FastAPI 重构的 Grok 反向代理,提供 OpenAI 兼容接口。 > 支持流式/非流式对话、图像生成/编辑、视频生成、深度推理、Token 池并发与负载均衡。 --- ## 📁 仓库文件结构 部署到 HuggingFace Space 只需以下文件: ``` your-space/ ├── README.md # 本文件(含 HF metadata) ├── Dockerfile # 容器构建配置 └── entrypoint.sh # 启动脚本(注入环境变量生成 config.toml) ``` --- ## 📄 Dockerfile ```dockerfile FROM python:3.12-slim # 安装系统依赖 RUN apt-get update && apt-get install -y git curl && rm -rf /var/lib/apt/lists/* # 安装 uv 包管理器 RUN pip install uv --no-cache-dir # 克隆 grok2api 源码 RUN git clone https://github.com/chenyme/grok2api /app WORKDIR /app # 安装 Python 依赖 RUN uv sync # HuggingFace 文件系统只读,所有写入必须走 /tmp RUN mkdir -p /tmp/data /tmp/logs # 复制启动脚本 COPY entrypoint.sh /app/entrypoint.sh RUN chmod +x /app/entrypoint.sh # 环境变量默认值 ENV DATA_DIR=/tmp/data ENV LOG_FILE_ENABLED=false ENV LOG_LEVEL=INFO ENV SERVER_PORT=7860 ENV SERVER_HOST=0.0.0.0 # HuggingFace Spaces 固定使用 7860 端口 EXPOSE 7860 CMD ["/app/entrypoint.sh"] ``` --- ## 📄 entrypoint.sh ```bash #!/bin/sh set -e echo "[entrypoint] Starting grok2api on HuggingFace Space..." # 确保 /tmp 目录存在 mkdir -p /tmp/data /tmp/logs # 从环境变量生成 config.toml # APP_KEY → 管理后台密码(默认 grok2api,强烈建议修改) # API_KEY → 调用 API 时需携带的访问密钥(留空则不鉴权) # APP_URL → 对外访问的完整 URL,用于生成文件链接 # 格式: https://你的用户名-grok2api.hf.space cat > /tmp/data/config.toml << EOF [app] app_key = "${APP_KEY:-grok2api}" api_key = "${API_KEY:-}" app_url = "${APP_URL:-}" image_format = "url" video_format = "html" temporary = true disable_memory = true stream = true thinking = true [server] storage_type = "${SERVER_STORAGE_TYPE:-local}" storage_url = "${SERVER_STORAGE_URL:-}" EOF echo "[entrypoint] config.toml generated." echo "[entrypoint] admin panel: ${APP_URL:-http://localhost:7860}/admin" # 启动 FastAPI 服务 exec uv run granian \ --interface asgi \ --host 0.0.0.0 \ --port 7860 \ --workers 1 \ main:app ``` --- ## ⚙️ 环境变量配置 在 HuggingFace Space **Settings → Variables and secrets** 中配置以下变量: ### 🔐 Secrets(敏感信息,加密存储) | 变量名 | 必填 | 说明 | 示例 | |--------|:----:|------|------| | `APP_KEY` | ✅ | 管理后台登录密码,**务必修改默认值** | `my-secure-password` | | `API_KEY` | ⬜ | 调用 `/v1/chat/completions` 时需携带的密钥,留空则不鉴权 | `sk-my-api-key` | | `SERVER_STORAGE_URL` | ⬜ | 外部数据库 DSN(推荐 Neon PostgreSQL,见下方说明) | `postgresql+asyncpg://user:pass@host/db?sslmode=require` | ### 🌐 Variables(普通变量) | 变量名 | 必填 | 说明 | 示例 | |--------|:----:|------|------| | `APP_URL` | ⬜ | Space 对外 URL,用于生成图片/视频访问链接 | `https://你的用户名-grok2api.hf.space` | | `SERVER_STORAGE_TYPE` | ⬜ | 存储类型,使用外部数据库时填 `pgsql` | `pgsql` / `local` | | `LOG_LEVEL` | ⬜ | 日志级别 | `INFO` | --- ## 🗄️ 持久化存储(强烈推荐) HuggingFace Space **重启后 `/tmp` 数据会丢失**,导致已导入的 Grok Token 全部清空。 推荐使用 **Neon PostgreSQL 免费版** 做持久化: 1. 前往 [neon.tech](https://neon.tech) 注册,创建一个数据库 2. 复制 Connection String,格式如下: ``` postgresql+asyncpg://user:password@ep-xxx.us-east-2.aws.neon.tech/neondb?sslmode=require ``` 3. 在 HF Space Secrets 中设置: - `SERVER_STORAGE_TYPE` = `pgsql` - `SERVER_STORAGE_URL` = 上方连接字符串 > **为什么选 Neon 而非 Supabase?** > Supabase 免费项目 7 天无活动会自动暂停,Neon 不会,更适合低频使用场景。 --- ## 🚀 部署步骤 ### 第一步:创建 Space 1. 登录 [huggingface.co](https://huggingface.co) 2. 点击右上角头像 → **New Space** 3. 填写: - Space name: `grok2api` - SDK: **Docker**(必须选这个) - Hardware: CPU Basic(免费) 4. 点击 **Create Space** ### 第二步:上传文件 ```bash # 克隆 Space 仓库 git clone https://huggingface.co/spaces/你的用户名/grok2api cd grok2api # 创建 README.md、Dockerfile、entrypoint.sh(内容见上方) # 推送 git add . git commit -m "deploy grok2api" git push ``` 推送后 HuggingFace 自动构建镜像,约 3~5 分钟后服务启动。 ### 第三步:配置 Secrets 在 Space 页面 → **Settings → Variables and secrets** 中添加上方表格中的变量。 > 修改 Secrets 后需点击 **Restart Space** 使配置生效。 ### 第四步:访问管理后台 ``` https://你的用户名-grok2api.hf.space/admin ``` 默认密码为 `grok2api`,首次登录后请立即在 Secrets 中设置 `APP_KEY` 修改密码。 --- ## 🔑 导入 Grok Token 服务启动后,在管理后台 `/admin` 中: 1. 点击 **Token Management** 2. 点击 **Add Token**,粘贴你的 Grok SSO Token 3. 等待状态变为 **Active** 即可使用 --- ## 📡 API 使用示例 将你客户端的 Base URL 替换为 Space 地址即可: ### cURL ```bash curl https://你的用户名-grok2api.hf.space/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $API_KEY" \ -d '{ "model": "grok-3", "stream": true, "messages": [{"role": "user", "content": "你好!"}] }' ``` ### Python(OpenAI SDK) ```python from openai import OpenAI client = OpenAI( api_key="你的 API_KEY", # 未设置则填任意字符串 base_url="https://你的用户名-grok2api.hf.space/v1", ) response = client.chat.completions.create( model="grok-3", messages=[{"role": "user", "content": "你好!"}], stream=True, ) for chunk in response: print(chunk.choices[0].delta.content or "", end="") ``` --- ## 📊 支持的模型 | 模型 | 类型 | 账号要求 | |------|------|---------| | `grok-3` | 对话 / 图像 | Basic / Super | | `grok-3-mini` | 对话 / 图像 | Basic / Super | | `grok-3-thinking` | 深度推理 | Basic / Super | | `grok-imagine-1.0` | 图像生成 | Basic / Super | | `grok-imagine-1.0-edit` | 图像编辑 | Basic / Super | | `grok-imagine-1.0-video` | 视频生成 | Basic / Super | --- ## ⚠️ 注意事项 | 限制 | 说明 | |------|------| | **端口** | HF Space 固定使用 `7860`,不可更改 | | **休眠** | 免费版 48 小时无访问后自动休眠,首次访问需约 30 秒唤醒 | | **数据持久化** | 不接外部数据库则重启丢失所有 Token,强烈建议配置 Neon | | **文件系统只读** | 所有配置/日志必须写入 `/tmp`,entrypoint 已处理 | | **免责声明** | 本项目仅供学习研究,请遵守 Grok 使用条款及当地法律法规 | --- ## 🔗 相关链接 - [grok2api 源码](https://github.com/chenyme/grok2api) - [Neon 免费 PostgreSQL](https://neon.tech) - [HuggingFace Spaces 文档](https://huggingface.co/docs/hub/spaces)