li / docs /HUGGINGFACE.md
hf-deploy
Deploy Grok2API v3.0.7 to Hugging Face Space
0208fd2
|
Raw
History Blame Contribute Delete
5.35 kB
<!-- 适配版本: Grok2API v3.0.7 + HF entrypoint -->
# 部署到 Hugging Face Spaces(个人使用)
本仓库已适配 **Docker Space**:无需挂载 `config.yaml`,用 Space Secrets 即可启动。
> 仅供个人学习研究。请遵守 Grok 使用条款与当地法律;不要把管理员密码、API Key、账号凭据写进公开 README。
## 1. 创建 Space
1. 打开 [Hugging Face Spaces](https://huggingface.co/spaces)
2. **Create new Space**
3. SDK 选 **Docker**
4. 可见性建议 **Private**(个人用)
5. 硬件:**CPU basic** 通常够用(个人低频)
## 2. 推送代码
把本仓库推到该 Space 的 Git 仓库(HF 会按根目录 `Dockerfile` 构建)。
## 3. 配置 Secrets(必须)
在 Space 页面:**Settings → Variables and secrets → New secret**
| Secret 名称 | 是否必须 | 说明 |
| --- | --- | --- |
| `BOOTSTRAP_ADMIN_PASSWORD` | **必须** | 管理端初始密码(强密码) |
| `JWT_SECRET` | 强烈建议 | ≥32 字符随机串;不设则首次自动生成并写入数据目录 |
| `CREDENTIAL_ENCRYPTION_KEY` | 强烈建议 | `openssl rand -base64 32`**一旦写入账号后不要更换** |
可选:
| 名称 | 说明 |
| --- | --- |
| `BOOTSTRAP_ADMIN_USERNAME` | 默认 `admin` |
| `PUBLIC_API_BASE_URL` | 一般不用;HF 会注入 `SPACE_HOST` 并自动拼 `https://...` |
| `SECURE_COOKIES` | HF 默认 `true`;几乎不用改 |
| `DATABASE_DRIVER` | 默认 `sqlite` |
| `POSTGRES_DSN` | 仅当 `DATABASE_DRIVER=postgres` |
| `GROK2API_DATA_DIR` | 数据目录,默认优先 `/data`(HF 持久盘)再 `/app/data` |
| `PORT` | HF 通常注入;未注入时 env 模式会监听 `7860` |
本地生成密钥示例:
```bash
openssl rand -hex 32
openssl rand -base64 32
```
## 4. 启动与登录
1. 等待 Space **Building / Running**
2. 打开 Space 地址(形如 `https://<user>-<space>.hf.space`
3. 使用 `admin` + 你设的 `BOOTSTRAP_ADMIN_PASSWORD` 登录
4. 导入上游账号 → 创建客户端密钥 `g2a_...` → 调用 `/v1/*`
健康检查:`https://你的域名/healthz`
## 5. 数据与休眠(个人用必看)
| 点 | 说明 |
| --- | --- |
| 免费 Space 休眠 | 闲置会 sleep,首次访问冷启动较慢;流式长请求可能中断 |
| 无持久盘 | 重启可能丢 SQLite / 媒体 / 自动生成的密钥 |
| 有 Persistent Storage | 把盘挂到 `/data`;本入口会自动把库和媒体写到 `/data` |
| 密钥稳定性 | 请把 `JWT_SECRET``CREDENTIAL_ENCRYPTION_KEY` 固定写在 Secrets 里,避免重建后无法解密旧账号 |
个人建议:
1. Space 设为 **Private**
2. 配齐三个 Secrets(密码 + JWT + 加密密钥)
3. 尽量开通 **Persistent Storage** 挂到 `/data`
4. 不要公开分享管理端密码和 `g2a_` 密钥
## 6. 环境变量一览
| 变量 | 默认 | 作用 |
| --- | --- | --- |
| `BOOTSTRAP_ADMIN_PASSWORD` | (空) | env 模式必需 |
| `BOOTSTRAP_ADMIN_USERNAME` | `admin` | 初始管理员用户名 |
| `JWT_SECRET` / `GROK2API_JWT_SECRET` | 自动生成 | JWT 签名密钥 |
| `CREDENTIAL_ENCRYPTION_KEY` / `GROK2API_CREDENTIAL_ENCRYPTION_KEY` | 自动生成 | 凭据 AES 密钥(Base64 32 字节) |
| `PORT` | HF 注入 / 否则 7860 | 监听端口 |
| `GROK2API_LISTEN` | (空) | 覆盖监听,如 `0.0.0.0:7860` |
| `PUBLIC_API_BASE_URL` | `https://$SPACE_HOST` | 文档里的公开 API 地址 |
| `DATABASE_DRIVER` | `sqlite` | `sqlite``postgres` |
| `SQLITE_PATH` | `$data/backend.db` | SQLite 路径 |
| `MEDIA_PATH` | `$data/media` | 媒体目录 |
| `GROK2API_DATA_DIR` | `/data``/app/data` | 数据根目录 |
| `SECURE_COOKIES` | HF 下 `true` | 管理端 Cookie Secure |
| `SWAGGER_ENABLED` | `false` | 是否开 Swagger |
| `GROK2API_CONFIG_SOURCE` | `/run/grok2api/config.yaml` | 若存在该文件则优先用挂载配置(Compose 兼容) |
兼容原有 Docker Compose:继续挂载 `config.yaml``/run/grok2api/config.yaml` 即可,行为与以前一致。
## 7. 调用示例
```bash
export GROK2API_API_KEY="g2a_xxx_xxx"
export BASE="https://你的用户名-空间名.hf.space"
curl "$BASE/v1/chat/completions" \
-H "Authorization: Bearer $GROK2API_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "grok-chat-auto",
"messages": [{"role":"user","content":"你好"}],
"stream": false
}'
```
## 8. 常见问题
**构建失败 / Go 1.26**
HF 构建机需能拉取 `golang:1.26-alpine``node:22-alpine`。若镜像源慢,可稍后重试。
**一直无法打开管理端**
看 Space Logs:是否缺少 `BOOTSTRAP_ADMIN_PASSWORD`;是否仍卡在 Building。
**登录后 Cookie 异常**
确认走 HTTPS(HF 默认是),不要手动把 `SECURE_COOKIES=false`
**账号导入后重启全部失效**
多半是加密密钥变了或数据目录被清空。固定 Secrets,并使用持久盘 `/data`
**上游请求失败 / 风控**
HF 出口 IP 可能不稳定。个人用可在管理端「设置 → 出口代理」配置你自己的 HTTP/SOCKS 代理(HF 上无法跑 WARP 的 `NET_ADMIN` 方案)。
## 9. 与本地 Compose 的关系
| 方式 | 配置 | 端口 |
| --- | --- | --- |
| Docker Compose | 挂载 `config.yaml` | `8000` |
| Hugging Face | Secrets / 环境变量 | `7860``$PORT` |
同一套镜像两种模式都支持。