ohmyapi commited on
Commit
6fb275e
·
verified ·
1 Parent(s): 8da62af

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +278 -5
README.md CHANGED
@@ -1,10 +1,283 @@
1
  ---
2
- title: Grok2api
3
- emoji: 📈
4
- colorFrom: indigo
5
- colorTo: blue
6
  sdk: docker
7
  pinned: false
 
8
  ---
9
 
10
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: Grok2API
3
+ emoji: 🤖
4
+ colorFrom: blue
5
+ colorTo: purple
6
  sdk: docker
7
  pinned: false
8
+ license: mit
9
  ---
10
 
11
+ # 🤖 Grok2API on HuggingFace Spaces
12
+
13
+ > 基于 FastAPI 重构的 Grok 反向代理,提供 OpenAI 兼容接口。
14
+ > 支持流式/非流式对话、图像生成/编辑、视频生成、深度推理、Token 池并发与负载均衡。
15
+
16
+ ---
17
+
18
+ ## 📁 仓库文件结构
19
+
20
+ 部署到 HuggingFace Space 只需以下文件:
21
+
22
+ ```
23
+ your-space/
24
+ ├── README.md # 本文件(含 HF metadata)
25
+ ├── Dockerfile # 容器构建配置
26
+ └── entrypoint.sh # 启动脚本(注入环境变量生成 config.toml)
27
+ ```
28
+
29
+ ---
30
+
31
+ ## 📄 Dockerfile
32
+
33
+ ```dockerfile
34
+ FROM python:3.12-slim
35
+
36
+ # 安装系统依赖
37
+ RUN apt-get update && apt-get install -y git curl && rm -rf /var/lib/apt/lists/*
38
+
39
+ # 安装 uv 包管理器
40
+ RUN pip install uv --no-cache-dir
41
+
42
+ # 克隆 grok2api 源码
43
+ RUN git clone https://github.com/chenyme/grok2api /app
44
+
45
+ WORKDIR /app
46
+
47
+ # 安装 Python 依赖
48
+ RUN uv sync
49
+
50
+ # HuggingFace 文件系统只读,所有写入必须走 /tmp
51
+ RUN mkdir -p /tmp/data /tmp/logs
52
+
53
+ # 复制启动脚本
54
+ COPY entrypoint.sh /app/entrypoint.sh
55
+ RUN chmod +x /app/entrypoint.sh
56
+
57
+ # 环境变量默认值
58
+ ENV DATA_DIR=/tmp/data
59
+ ENV LOG_FILE_ENABLED=false
60
+ ENV LOG_LEVEL=INFO
61
+ ENV SERVER_PORT=7860
62
+ ENV SERVER_HOST=0.0.0.0
63
+
64
+ # HuggingFace Spaces 固定使用 7860 端口
65
+ EXPOSE 7860
66
+
67
+ CMD ["/app/entrypoint.sh"]
68
+ ```
69
+
70
+ ---
71
+
72
+ ## 📄 entrypoint.sh
73
+
74
+ ```bash
75
+ #!/bin/sh
76
+ set -e
77
+
78
+ echo "[entrypoint] Starting grok2api on HuggingFace Space..."
79
+
80
+ # 确保 /tmp 目录存在
81
+ mkdir -p /tmp/data /tmp/logs
82
+
83
+ # 从环境变量生成 config.toml
84
+ # APP_KEY → 管理后台密码(默认 grok2api,强烈建议修改)
85
+ # API_KEY → 调用 API 时需携带的访问密钥(留空则不鉴权)
86
+ # APP_URL → 对外访问的完整 URL,用于生成文件链接
87
+ # 格式: https://你的用户名-grok2api.hf.space
88
+ cat > /tmp/data/config.toml << EOF
89
+ [app]
90
+ app_key = "${APP_KEY:-grok2api}"
91
+ api_key = "${API_KEY:-}"
92
+ app_url = "${APP_URL:-}"
93
+ image_format = "url"
94
+ video_format = "html"
95
+ temporary = true
96
+ disable_memory = true
97
+ stream = true
98
+ thinking = true
99
+
100
+ [server]
101
+ storage_type = "${SERVER_STORAGE_TYPE:-local}"
102
+ storage_url = "${SERVER_STORAGE_URL:-}"
103
+ EOF
104
+
105
+ echo "[entrypoint] config.toml generated."
106
+ echo "[entrypoint] admin panel: ${APP_URL:-http://localhost:7860}/admin"
107
+
108
+ # 启动 FastAPI 服务
109
+ exec uv run granian \
110
+ --interface asgi \
111
+ --host 0.0.0.0 \
112
+ --port 7860 \
113
+ --workers 1 \
114
+ main:app
115
+ ```
116
+
117
+ ---
118
+
119
+ ## ⚙️ 环境变量配置
120
+
121
+ 在 HuggingFace Space **Settings → Variables and secrets** 中配置以下变量:
122
+
123
+ ### 🔐 Secrets(敏感信息,加密存储)
124
+
125
+ | 变量名 | 必填 | 说明 | 示例 |
126
+ |--------|:----:|------|------|
127
+ | `APP_KEY` | ✅ | 管理后台登录密码,**务必修改默认值** | `my-secure-password` |
128
+ | `API_KEY` | ⬜ | 调用 `/v1/chat/completions` 时需携带的密钥,留空则不鉴权 | `sk-my-api-key` |
129
+ | `SERVER_STORAGE_URL` | ⬜ | 外部数据库 DSN(推荐 Neon PostgreSQL,见下方说明) | `postgresql+asyncpg://user:pass@host/db?sslmode=require` |
130
+
131
+ ### 🌐 Variables(普通变量)
132
+
133
+ | 变量名 | 必填 | 说明 | 示例 |
134
+ |--------|:----:|------|------|
135
+ | `APP_URL` | ⬜ | Space 对外 URL,用于生成图片/视频访问链接 | `https://你的用户名-grok2api.hf.space` |
136
+ | `SERVER_STORAGE_TYPE` | ⬜ | 存储类型,使用外部数据库时填 `pgsql` | `pgsql` / `local` |
137
+ | `LOG_LEVEL` | ⬜ | 日志级别 | `INFO` |
138
+
139
+ ---
140
+
141
+ ## 🗄️ 持久化存储(强烈推荐)
142
+
143
+ HuggingFace Space **重启后 `/tmp` 数据会丢失**,导致已导入的 Grok Token 全部清空。
144
+ 推荐使用 **Neon PostgreSQL 免费版** 做持久化:
145
+
146
+ 1. 前往 [neon.tech](https://neon.tech) 注册,创建一个数据库
147
+ 2. 复制 Connection String,格式如下:
148
+ ```
149
+ postgresql+asyncpg://user:password@ep-xxx.us-east-2.aws.neon.tech/neondb?sslmode=require
150
+ ```
151
+ 3. 在 HF Space Secrets 中设置:
152
+ - `SERVER_STORAGE_TYPE` = `pgsql`
153
+ - `SERVER_STORAGE_URL` = 上方连接字符串
154
+
155
+ > **为什么选 Neon 而非 Supabase?**
156
+ > Supabase 免费项目 7 天无活动会自动暂停,Neon 不会,更适合低频使用场景。
157
+
158
+ ---
159
+
160
+ ## 🚀 部署步骤
161
+
162
+ ### 第一步:创建 Space
163
+
164
+ 1. 登录 [huggingface.co](https://huggingface.co)
165
+ 2. 点击右上角头像 → **New Space**
166
+ 3. 填写:
167
+ - Space name: `grok2api`
168
+ - SDK: **Docker**(必须选这个)
169
+ - Hardware: CPU Basic(免费)
170
+ 4. 点击 **Create Space**
171
+
172
+ ### 第二步:上传文件
173
+
174
+ ```bash
175
+ # 克隆 Space 仓库
176
+ git clone https://huggingface.co/spaces/你的用户名/grok2api
177
+ cd grok2api
178
+
179
+ # 创建 README.md、Dockerfile、entrypoint.sh(内容见上��)
180
+
181
+ # 推送
182
+ git add .
183
+ git commit -m "deploy grok2api"
184
+ git push
185
+ ```
186
+
187
+ 推送后 HuggingFace 自动构建镜像,约 3~5 分钟后服务启动。
188
+
189
+ ### 第三步:配置 Secrets
190
+
191
+ 在 Space 页面 → **Settings → Variables and secrets** 中添加上方表格中的变量。
192
+
193
+ > 修改 Secrets 后需点击 **Restart Space** 使配置生效。
194
+
195
+ ### 第四步:访问管理后台
196
+
197
+ ```
198
+ https://你的用户名-grok2api.hf.space/admin
199
+ ```
200
+
201
+ 默认密码为 `grok2api`,首次登录后请立即在 Secrets 中设置 `APP_KEY` 修改密码。
202
+
203
+ ---
204
+
205
+ ## 🔑 导入 Grok Token
206
+
207
+ 服务启动后,在管理后台 `/admin` 中:
208
+
209
+ 1. 点击 **Token Management**
210
+ 2. 点击 **Add Token**,粘贴你的 Grok SSO Token
211
+ 3. 等待状态变为 **Active** 即可使用
212
+
213
+ ---
214
+
215
+ ## 📡 API 使用示例
216
+
217
+ 将你客户端的 Base URL 替换为 Space 地址即可:
218
+
219
+ ### cURL
220
+
221
+ ```bash
222
+ curl https://你的用户名-grok2api.hf.space/v1/chat/completions \
223
+ -H "Content-Type: application/json" \
224
+ -H "Authorization: Bearer $API_KEY" \
225
+ -d '{
226
+ "model": "grok-3",
227
+ "stream": true,
228
+ "messages": [{"role": "user", "content": "你好!"}]
229
+ }'
230
+ ```
231
+
232
+ ### Python(OpenAI SDK)
233
+
234
+ ```python
235
+ from openai import OpenAI
236
+
237
+ client = OpenAI(
238
+ api_key="你的 API_KEY", # 未设置则填任意字符串
239
+ base_url="https://你的用户名-grok2api.hf.space/v1",
240
+ )
241
+
242
+ response = client.chat.completions.create(
243
+ model="grok-3",
244
+ messages=[{"role": "user", "content": "你好!"}],
245
+ stream=True,
246
+ )
247
+
248
+ for chunk in response:
249
+ print(chunk.choices[0].delta.content or "", end="")
250
+ ```
251
+
252
+ ---
253
+
254
+ ## 📊 支持的模型
255
+
256
+ | 模型 | 类型 | 账号要求 |
257
+ |------|------|---------|
258
+ | `grok-3` | 对话 / 图像 | Basic / Super |
259
+ | `grok-3-mini` | 对话 / 图像 | Basic / Super |
260
+ | `grok-3-thinking` | 深度推理 | Basic / Super |
261
+ | `grok-imagine-1.0` | 图像生成 | Basic / Super |
262
+ | `grok-imagine-1.0-edit` | 图像编辑 | Basic / Super |
263
+ | `grok-imagine-1.0-video` | 视频生成 | Basic / Super |
264
+
265
+ ---
266
+
267
+ ## ⚠️ 注意事项
268
+
269
+ | 限制 | 说明 |
270
+ |------|------|
271
+ | **端口** | HF Space 固定使用 `7860`,不可更改 |
272
+ | **休眠** | 免费版 48 小时无访问后自动休眠,首次访问需约 30 秒唤醒 |
273
+ | **数据持久化** | 不接外部数据库则重启丢失所有 Token,强烈建议配置 Neon |
274
+ | **文件系统只读** | 所有配置/日志必须写入 `/tmp`,entrypoint 已处理 |
275
+ | **免责声明** | 本项目仅供学习研究,请遵守 Grok 使用条款及当地法律法规 |
276
+
277
+ ---
278
+
279
+ ## 🔗 相关链接
280
+
281
+ - [grok2api 源码](https://github.com/chenyme/grok2api)
282
+ - [Neon 免费 PostgreSQL](https://neon.tech)
283
+ - [HuggingFace Spaces 文档](https://huggingface.co/docs/hub/spaces)