title: OpenClaw HF Space
emoji: 🦞
colorFrom: blue
colorTo: indigo
sdk: docker
sdk_version: 29.0.4
app_port: 7860
app_file: mian.py
pinned: false
OpenClaw HF Space 部署工具(中文版)
本项目提供在 Hugging Face Space 上部署 OpenClaw 的完整解决方案。
功能特性
- 基于
ubuntu:24.04构建 OpenClaw 容器镜像 - 默认通过 BT Panel(宝塔面板)管理服务,端口
7860 - OpenClaw Gateway 运行在独立端口
18789(默认) - 默认使用第三方 OpenAI 兼容接口(
base_url + api_key),通过环境变量注入 - OpenClaw 配置和工作目录存储在
/root/.openclaw - 启动时自动从 Hugging Face Dataset 恢复状态
- 通过
cron定时备份 OpenClaw 数据到 Hugging Face Dataset - 预装工具:
python3、uv、vim、neovim、chromium(Chrome for Testing)、gh、hf、opencode、codex、claude(Claude Code CLI)、@larksuite/cli、sshx - 内置 DDNS-GO,支持动态 DNS 更新(非关键功能,安装失败不影响构建)
项目结构
Dockerfile: Space 运行时镜像scripts/openclaw-entrypoint.sh: 主启动流程(恢复、配置生成、cron 设置、gateway 启动)scripts/hf-entrypoint.sh: HF Spaces 容器入口(管理 supervisord + PM2)scripts/supervisord.conf: Supervisord 配置,管理 cron 和 openclaw-gatewayopenclaw_hf/backup.py: 备份/恢复实现scripts/openclaw-backup-cron.sh: Cron 备份任务入口scripts/openclaw-restore.sh: 启动恢复入口scripts/openclaw-gateway-restart: 重启 openclaw-gateway 进程scripts/bt_install_panel.sh: BT Panel 安装脚本scripts/bootstrap-hf.sh: 交互式引导脚本(macOS/Linux)scripts/bootstrap-hf.ps1: 交互式引导脚本(Windows PowerShell)tests/test_backup.py: 备份模块单元测试tests/test_entrypoint_config.py: Gateway 配置生成行为单元测试
必填变量(Space Settings)
在 Hugging Face Space 的 Settings -> Variables and secrets 中配置:
- 变量:
OPENCLAW_BACKUP_DATASET_REPO: 备份目标 Dataset,格式username/dataset-name - 密钥:
HF_TOKEN: 用于向 Dataset 写入备份(必须对该 Dataset 有写权限) - 密钥:
OPENCLAW_GATEWAY_TOKEN: Gateway 令牌(建议填写;留空则自动生成 32 位随机值) - 密钥:
OPENCLAW_GATEWAY_PASSWORD: Gateway 密码(可选;留空则自动生成 16 位随机值)
使用 ./scripts/bootstrap-hf.sh 或 ./scripts/bootstrap-hf.ps1 时,这些值会自动配置到目标 Space。
BT Panel 变量
BT_PANEL_PORT(默认:7860): BT Panel 监听端口BT_PANEL_USERNAME(默认:btadmin): BT Panel 用户名,必须以小写字母开头,只能包含小写字母和数字,长度 3-32 位BT_PANEL_PASSWORD: BT Panel 密码,留空则使用默认随机密码
可选 LLM 变量(全有或全无)
只有在需要 OpenClaw 预配置自定义第三方模型时才设置这三个:
- 变量:
OPENCLAW_LLM_BASE_URL: 第三方 base URL(如 OpenAI 兼容的/v1) - 变量:
OPENCLAW_LLM_MODEL: 第三方模型 ID - 密钥:
OPENCLAW_LLM_API_KEY: 第三方 API key
三者任一缺失则跳过自定义模型生成,此时仍可在容器内通过 sshx 配置 LLM。
常用可选变量
| 变量 | 默认值 | 说明 |
|---|---|---|
OPENCLAW_VERSION |
latest |
OpenClaw 版本,用于 Docker 安装步骤 |
OPENCLAW_GATEWAY_PORT |
18789 |
Gateway 监听端口(避免与 BT Panel 的 7860 冲突) |
OPENCLAW_GATEWAY_BIND |
lan |
Gateway 绑定方式(lan/local) |
OPENCLAW_STATE_DIR |
/root/.openclaw |
OpenClaw 状态目录 |
OPENCLAW_USER |
root |
Gateway 和 cron 任务的运行时用户 |
OPENCLAW_GROUP |
root |
运行时用户组 |
OPENCLAW_CONFIG_PATH |
/root/.openclaw/openclaw.json |
Gateway 配置文件路径 |
OPENCLAW_WORKSPACE_DIR |
/root/.openclaw/workspace |
工作目录 |
OPENCLAW_BACKUP_CRON |
*/30 * * * * |
备份 cron 表达式(默认每 30 分钟) |
OPENCLAW_BACKUP_SOURCE_DIR |
/root/.openclaw |
备份/恢复基础目录 |
OPENCLAW_BACKUP_ROOT_*_DIR |
各有默认值 | 额外备份目录(config、codex、claude、agents、ssh、npm、lark-cli) |
OPENCLAW_BACKUP_PATH_PREFIX |
backups |
备份路径前缀 |
OPENCLAW_BACKUP_KEEP_COUNT |
24 |
保留的最新备份数量 |
OPENCLAW_SSHX_AUTO_START |
false |
设为 true 启动时自动后台运行 sshx |
OPENCLAW_GATEWAY_AUTH_MODE |
token |
认证模式(token/password) |
OPENCLAW_GATEWAY_CONTROLUI_ALLOW_INSECURE_AUTH |
false |
允许不安全认证 |
OPENCLAW_GATEWAY_CONTROLUI_DANGEROUSLY_DISABLE_DEVICE_AUTH |
false |
禁用设备配对(强烈不建议在公网开启) |
快速部署
从仓库根目录运行交互式引导脚本:
./scripts/bootstrap-hf.sh
powershell -ExecutionPolicy ByPass -File .\scripts\bootstrap-hf.ps1
bootstrap-hf.sh / bootstrap-hf.ps1 会执行以下操作:
- 检查/安装
hfCLI - 解析 HF 认证状态(未登录则提示输入
HF_TOKEN并登录;已登录则询问是否使用当前用户) - 询问
space_name、dataset_name、OPENCLAW_VERSION、Gateway 令牌/密码及可选 LLM 配置 - 自动生成
OPENCLAW_GATEWAY_TOKEN(32 位)和OPENCLAW_GATEWAY_PASSWORD(16 位) - 创建私有 Space + Dataset 并上传仓库
- 自动配置 Space 的
Variables and secrets - 显示部署设置并要求确认
- 输出 Hugging Face Space 页面地址、应用地址和
/healthz健康检查地址
如自动生成了令牌/密码,脚本结束时会自动显示。
Hugging Face Space 保活策略
Space 保活策略取决于硬件套餐:
- 免费
cpu-basic:Space 在不活跃后进入休眠(约 48 小时),无法配置为永久运行 - 付费硬件:Space 默认持续运行。在
Settings -> Hardware中将Sleep time设为Never可实现真正的 24/7 可用性 - 付费硬件节能模式:设置自定义
Sleep time(如3600秒),实现自动休眠和自动唤醒
Space URL 构成:
- Space Repo ID 格式:
<owner>/<space_name>(示例:username/openclaw-hf) - 公开运行时地址:
https://<owner>-<space_name>.hf.space - 健康检查地址:
https://<owner>-<space_name>.hf.space/healthz
定时健康检查保持活跃:
*/12 * * * * HF_TOKEN=hf_xxx /path/to/repo/scripts/check-space-health.sh username/openclaw-hf >/dev/null || true
注意:
- 私有 Space 的
https://<owner>-<space_name>.hf.space/healthz返回 Hub 404,这是正常的访问控制行为 - 私有 Space 请求需要包含
Authorization: Bearer <HF_TOKEN>
备份/恢复流程
启动恢复:容器启动时从 Dataset 获取
latest-backup.json来定位最新备份并恢复:openclaw-state->OPENCLAW_BACKUP_SOURCE_DIR(默认/root/.openclaw)root-config->OPENCLAW_BACKUP_ROOT_CONFIG_DIR(默认/root/.config)root-codex->OPENCLAW_BACKUP_ROOT_CODEX_DIR(默认/root/.codex)root-claude->OPENCLAW_BACKUP_ROOT_CLAUDE_DIR(默认/root/.claude)root-agents->OPENCLAW_BACKUP_ROOT_AGENTS_DIR(默认/root/.agents)root-ssh->OPENCLAW_BACKUP_ROOT_SSH_DIR(默认/root/.ssh)root-env->OPENCLAW_BACKUP_ROOT_ENV_DIR(默认/root/.env.d)root-npm->OPENCLAW_BACKUP_ROOT_NPM_DIR(默认/root/.npm)root-lark-cli->OPENCLAW_BACKUP_ROOT_LARK_CLI_DIR(默认/root/.lark-cli)
定时备份:根据
OPENCLAW_BACKUP_CRON执行关机备份:容器收到停止信号时,执行最后一次备份后再退出
保留策略:上传后只保留最新的
OPENCLAW_BACKUP_KEEP_COUNT(默认 24 个)带时间戳的备份归档,自动删除更旧的
在容器内使用 sshx
sshx 已预装在镜像中。
通过环境变量自动启动:
OPENCLAW_SSHX_AUTO_START=true启用后入口脚本会在后台启动
sshx,输出直接发送到容器 stdout/stderr在容器内手动启动:
sshx通过 OpenClaw 终端/工具启动:
nohup sshx >/proc/1/fd/1 2>/proc/1/fd/2 &使用完毕后及时关闭:
pgrep -fa sshx pkill -TERM -f '(^|/)sshx($| )'
本地测试
python3 -m unittest discover -s tests -p 'test_*.py'
CI/CD
向 main 分支提交 Pull Request 后,GitHub Actions CI 会自动运行(.github/workflows/pr-ci.yml):
- 单元测试:
python3 -m unittest discover -s tests -p 'test_*.py' - Docker 镜像构建:
docker build(通过 Buildx),使用OPENCLAW_VERSION=latest
架构说明
容器启动顺序:
PID 1 (bt-panel)
└── supervisord
├── cron
└── openclaw-gateway (via openclaw-entrypoint.sh)
└── node hf-server.js (PID 1 替代)
进程管理使用 Supervisord 而非 PM2,原因:
- Supervisord 是为"进程管理者"设计的,适合 PID 1 下运行
- 信号传递正确,SIGTERM 能正确传递给子进程
- 相比 PM2 更轻量,职责单一
License
MIT. See LICENSE.