| --- |
| 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) |