File size: 7,461 Bytes
8da62af 6fb275e 8da62af 6fb275e 8da62af 6fb275e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 | ---
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) |