File size: 15,346 Bytes
17e971c | 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 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 | # Deploying OpenClaw on Hugging Face Spaces (with Auto Backup & Restore)
> **Source**: [tenfy's blog - Deploying OpenClaw on Hugging Face Spaces](https://tenfy.cn/posts/openclaw-hf-space-deploy/) (adapted for this project)
>
> **Original Author**: tenfyzhongοΌ[https://tenfy.cn](https://tenfy.cn)οΌ
>
> **Adapted by**: ClawCopilot TeamοΌ[https://github.com/ClawCopilot/Openclaw-Hf-Docker](https://github.com/ClawCopilot/Openclaw-Hf-Docker)οΌ
>
> **Original Post Date**: 2026-03-25
---
## What This Solution Solves
This project builds on tenfy's `openclaw-hf` by adding **BT Panel (Baota)** as PID 1, providing a user-friendly web management interface:
- Build OpenClaw container image on top of `ubuntu:24.04`
- **BT Panel (Baota)** as container PID 1, listening on port `7860` (default HF Space port), provides web management interface
- **OpenClaw Gateway** runs on separate port `18789` (default)
- Support pre-configuring third-party OpenAI-compatible models via environment variables (`base_url + api_key`)
- OpenClaw config and workspace stored in `/root/.openclaw`
- Auto-restore latest backup from HF Dataset on startup
- Periodic backup to HF Dataset via `cron`
- **Supervisord** manages `cron` and `openclaw-gateway` processes
- Pre-installed tools: `vim`, `opencode`, `codex`, `claude`, `sshx` for debugging and interaction inside the container
- Built-in DDNS-GO for dynamic DNS updates (non-critical, installation failure doesn't break the build)
---
## Container Architecture
```
PID 1 (bt-panel)
βββ /usr/local/bin/hf-entrypoint.sh
βββ /usr/bin/supervisord
β βββ cron (scheduled backup tasks)
β βββ openclaw-gateway (OpenClaw Gateway, port 18789)
βββ node hf-server.js (container health check)
```
- **BT Panel**: port `7860`, web management interface
- **OpenClaw Gateway**: port `18789`, AI Gateway API
- **Supervisord**: process manager, manages both `cron` and `openclaw-gateway`
- **Health check**: `curl http://localhost:7860`, called by Hugging Face platform
---
## 1. Register Hugging Face & Generate HF_TOKEN
If you don't have a Hugging Face account yet, sign up first: [https://huggingface.co/join](https://huggingface.co/join)
After preparing your account, create a token following these steps:
1. Open Hugging Face Token page: [https://huggingface.co/settings/tokens](https://huggingface.co/settings/tokens)
2. Create a new token (recommended name: `deploy-openclaw`)
3. Grant the required permissions (need ability to create Spaces and write to Datasets)
4. Copy the token (format: `hf_xxx...`)
Login locally and verify:
```bash
hf auth login
hf auth whoami
```
When `bootstrap-hf.sh` prompts for `HF_TOKEN for backup dataset`:
- You can paste the newly created token directly
- Or leave it empty to let the script reuse the current `hf auth login` local credentials
---
## 2. One-Click Deployment (Recommended)
The repository provides an interactive script. It's recommended to use the script instead of manual setup.
### 1. Clone the Repository
```bash
git clone https://github.com/ClawCopilot/Openclaw-Hf-Docker.git
cd Openclaw-Hf-Docker
```
### 2. Run the Bootstrap Script
macOS / Linux:
```bash
./scripts/bootstrap-hf.sh
```
Windows PowerShell:
```powershell
powershell -ExecutionPolicy ByPass -File .\scripts\bootstrap-hf.ps1
```
### 3. What the Script Does Automatically
- Check and install `hf` CLI if missing
- Check Hugging Face login status (trigger `hf auth login` if needed)
- Ask for and confirm deployment parameters (including final `Proceed with these settings?` confirmation)
- Ask for BT Panel port, username, and password
- Create private Space and private backup Dataset, upload current repository to Space
- Auto-write Variables / Secrets (including backup, gateway credentials, BT Panel config, etc.)
- Write security-related variables by default:
- `OPENCLAW_GATEWAY_CONTROLUI_ALLOW_INSECURE_AUTH=false`
- `OPENCLAW_GATEWAY_CONTROLUI_DANGEROUSLY_DISABLE_DEVICE_AUTH=false`
### 4. BT Panel Username Rules
**Must satisfy the following**:
- Start with a lowercase letter
- Can only contain lowercase letters and numbers
- Length 3-32 characters
Examples: `btadmin`, `mypanel123`, `openclawspace`
---
## 3. Use Agent for Auto Deployment
Suitable for users who don't want to manually configure. You can directly send this to an AI Agent:
```
Please deploy OpenClaw to Hugging Face by strictly following the deployment skill in https://github.com/tenfyzhong/openclaw-hf/blob/main/SKILL.md
```
Agent usually does:
1. Check dependencies first (`git`, `hf`, `python3`, `huggingface_hub`)
2. Collect deployment parameters from you in fixed order
3. Call `bootstrap-hf.sh` / `bootstrap-hf.ps1` to execute deployment
4. Report Space / Dataset / App / Health URLs and version info
5. If gateway credentials are auto-generated, also report them
If you want to provide all parameters at once, send this template to the Agent:
```
space_name: openclaw-hf
dataset_name: openclaw-hf-backup
openclaw_version: latest
gateway_token: <leave empty to auto-generate, or fill manually>
gateway_password: <leave empty to auto-generate, or fill manually>
hf_token: <your HF_TOKEN, or leave empty to reuse local login>
configure_custom_llm: no
openclaw_sshx_auto_start: true
bt_panel_port: 7860
bt_panel_username: btadmin
bt_panel_password: <leave empty to auto-generate, or fill manually>
proceed_with_settings: yes
```
---
## 4. Pre-Deployment Requirements
The script depends on the following commands:
```bash
git --version
hf version
python3 --version
```
Also requires Python package:
```bash
python3 -c "import huggingface_hub" >/dev/null 2>&1 || \
python3 -m pip install --user 'huggingface_hub[cli]'
```
---
## 5. Key Variables & Secrets
In Space's `Settings -> Variables and secrets`, at minimum you need:
- Variable: `OPENCLAW_BACKUP_DATASET_REPO` (format: `username/dataset-name`)
- Secret: `HF_TOKEN` (needs write permission to the backup Dataset)
- Secret: `OPENCLAW_GATEWAY_TOKEN` (recommended)
- Secret: `OPENCLAW_GATEWAY_PASSWORD` (optional)
- Variable: `BT_PANEL_PORT` (default `7860`)
- Variable: `BT_PANEL_USERNAME` (default `btadmin`)
- Secret: `BT_PANEL_PASSWORD` (BT Panel password)
If you use `bootstrap-hf.sh` / `bootstrap-hf.ps1`, the above will be configured automatically.
### Optional: Pre-configure LLM (all three must be provided together)
- `OPENCLAW_LLM_BASE_URL`
- `OPENCLAW_LLM_MODEL`
- `OPENCLAW_LLM_API_KEY`
If only 1-2 of them are filled, the entrypoint script will skip model pre-configuration.
### Common Optional Variables
| Variable | Default | Description |
|----------|---------|-------------|
| `OPENCLAW_VERSION` | `latest` | OpenClaw version |
| `OPENCLAW_BACKUP_CRON` | `*/30 * * * *` | Backup interval (every 30 min by default) |
| `OPENCLAW_BACKUP_KEEP_COUNT` | `48` | Number of latest backups to keep |
| `OPENCLAW_SSHX_AUTO_START` | `false` | Set to `true` to auto-start sshx |
| `OPENCLAW_GATEWAY_PORT` | `18789` | Gateway listening port |
| `BT_PANEL_PORT` | `7860` | BT Panel listening port |
| `BT_PANEL_USERNAME` | `btadmin` | BT Panel username (lowercase letter start) |
| `BT_PANEL_PASSWORD` | auto-generated | BT Panel password |
---
## 6. What the Script Will Ask You
Following the flow, main inputs are:
1. `space_name` (default `openclaw-hf`)
2. `dataset_name` (default `<space_name>-backup`)
3. `OPENCLAW_VERSION` (default auto-detect latest version)
4. `OPENCLAW_GATEWAY_TOKEN` (can leave empty for auto-generated 32-char random value)
5. `OPENCLAW_GATEWAY_PASSWORD` (can leave empty for auto-generated 16-char random value)
6. `HF_TOKEN` (can leave empty, reuse locally logged-in token)
7. Whether to configure LLM immediately (all three must be filled for it to take effect)
8. If not configuring LLM, whether to enable `OPENCLAW_SSHX_AUTO_START`
9. **BT Panel port** (default `7860`)
10. **BT Panel username** (must start with lowercase letter, only lowercase letters and numbers, 3-32 chars)
11. **BT Panel password** (can leave empty for auto-generation)
12. Final confirmation: `Proceed with these settings?` (selecting `no` will exit without remote changes)
If token/password is auto-generated by the script, it will be printed at the end. Please save it promptly.
---
## 7. How to Verify After Deployment
Assuming Space repo is `<owner>/<space_name>`, available URLs:
| Service | URL |
|---------|-----|
| BT Panel Admin | `https://<owner>-<space_name>.hf.space:7860` |
| BT Panel Health | `https://<owner>-<space_name>.hf.space` |
| OpenClaw Gateway | `https://<owner>-<space_name>.hf.space:18789` |
| Space Page | `https://huggingface.co/spaces/<owner>/<space_name>` |
For example:
```bash
OPENCLAW_HF_SPACE_ID="yourname/openclaw-hf"
SPACE_HOST="${OPENCLAW_HF_SPACE_ID/\//-}.hf.space"
echo "BT Panel: https://${SPACE_HOST}:7860"
echo "Gateway: https://${SPACE_HOST}:18789"
```
> **Note**: Some network environments may restrict direct access to port `:18789`. The BT Panel admin interface (7860) is the primary access entry point.
---
## 8. BT Panel Usage Guide
### Login to BT Panel
1. After deployment completes, wait for container to start (~2-5 minutes)
2. Visit `https://<owner>-<space_name>.hf.space:7860`
3. Login with the `BT_PANEL_USERNAME` and `BT_PANEL_PASSWORD` set during deployment
> On first login, you may need to wait for BT Panel service to fully start. If the page is inaccessible, please try again later.
### BT Panel Security Recommendations
- After deployment, it is recommended to modify `BT_PANEL_PASSWORD` in `Settings -> Variables and secrets`
- Avoid exposing BT Panel admin interface to the public internet
- `BT_PANEL_USERNAME` must conform to rules: start with lowercase letter, only lowercase letters and numbers
---
## 9. How to Do OpenClaw Initial Configuration
1. Open Hugging Face Space page, go to container logs, find the temporary access link output by `sshx`
2. Open that link in browser to enter container shell, execute `openclaw onboard` and follow the guide
3. During onboarding, OpenClaw may restart, and the `sshx` link may also change; if current link expires, go back to logs to get the new link and continue
4. Official wizard reference: [https://docs.openclaw.ai/start/wizard](https://docs.openclaw.ai/start/wizard)
5. After configuration is complete, remember to go back to `Settings -> Variables and secrets`, change `OPENCLAW_SSHX_AUTO_START` to `false` (or delete this variable), then restart Space to turn off `sshx`
If you modified OpenClaw configuration and want it to take effect immediately, you can restart the corresponding process (example):
```bash
ps -ef | grep 'openclaw-gateway' | grep -v 'grep' | awk '{print $2}' | xargs -I{} kill {}
```
---
## 10. Backup & Restore Mechanism
The data lifecycle of this project is as follows:
- **Startup Restore**: On container startup, it fetches `latest-backup.json` from Dataset to locate the latest backup and restore
- **Scheduled Backup**: Upload periodically based on `OPENCLAW_BACKUP_CRON` (every 30 minutes by default)
- **Shutdown Backup**: Do a final backup when container receives stop signal before exiting
- **Artifacts include**:
- `backups/openclaw-backup-<timestamp>.tar.gz`
- `latest-backup.json`
- **Retention Policy**: Only keep the latest `OPENCLAW_BACKUP_KEEP_COUNT` timestamped archives (default `48`)
---
## 11. Keep-Alive & 24/7 Running Suggestions
- Free `cpu-basic` will sleep (currently after about 48 hours of no access)
- Strict 24/7 requires paid hardware, set `Sleep time` to `Never`
- For private Space health checks, must include `Authorization: Bearer <HF_TOKEN>`, otherwise you'll see 404 (normal access control behavior)
If you just want to reduce cold start probability, you can periodically request the BT Panel health check address; but on free tier, this is not an officially guaranteed always-on solution.
### Using cron-job.org for Keep-Alive
If you don't want to maintain scheduled tasks yourself, you can use [https://cron-job.org/](https://cron-job.org/).
According to their official FAQ ([https://cron-job.org/faq/](https://cron-job.org/faq/)), they support custom headers, HTTPS, and up to once per minute calls. For OpenClaw Space, pinging once every 10-15 minutes is usually sufficient.
#### 1. Create a Task
1. Open [https://cron-job.org/](https://cron-job.org/) and register/login (console is at `console.cron-job.org`)
2. Create new HTTP cron job
3. URL: `https://<owner>-<space_name>.hf.space` (BT Panel health check)
4. Method: `GET`
5. Schedule: recommend once every 10-15 minutes
#### 2. Add Header for Private Space
```
Authorization: Bearer <HF_TOKEN>
```
It's recommended to create a separate low-permission token for keep-alive only, don't reuse the high-permission backup token.
#### 3. Do Test Run Before Enabling Alerts
After creating the task, test it manually once first, then enable failure notifications (email, etc.) to be notified promptly when Space is unavailable or token expires.
---
## 12. sshx Usage (Optional)
`sshx` is pre-installed in the image (along with `vim`, `opencode`, `codex`, `claude`).
### 1. Auto Start (Environment Variable)
```bash
OPENCLAW_SSHX_AUTO_START=true
```
### 2. Manual Start Inside Container
```bash
sshx
```
### 3. Start via OpenClaw Terminal in Background
```bash
nohup sshx >/proc/1/fd/1 2>/proc/1/fd/2 &
```
If you temporarily need `sshx` later, you can also let OpenClaw start it via IM; after use, remember to let OpenClaw turn off `sshx` via IM as well.
### Cleanup After Use
```bash
pgrep -fa sshx
pkill -TERM -f '(^|/)sshx($| )'
```
---
## 13. Process Management
This project uses **Supervisord** to manage processes (PM2 has been removed):
```
PID 1 (bt-panel)
βββ supervisord
βββ cron
βββ openclaw-gateway
```
- **Supervisord**: as a child process of bt-panel, correctly managed
- **cron**: scheduled backup tasks (runs every 30 minutes by default)
- **openclaw-gateway**: OpenClaw Gateway service, listening on port 18789
- **PM2**: removed from this project, no longer used for managing Gateway
### Check Process Status
Inside container:
```bash
supervisorctl status
```
### View Logs
```bash
# supervisord logs
tail -f /var/log/hf-entrypoint/supervisord-stdout.log
# cron logs
tail -f /var/log/hf-entrypoint/cron-stdout.log
# openclaw-gateway logs
tail -f /var/log/hf-entrypoint/openclaw-gateway-stdout.log
```
---
## 14. Summary
If your goal is "quickly running a restorable OpenClaw instance on Hugging Face", this project has covered the key aspects: deployment, configuration, backup, restore, keep-alive, and remote debugging, with BT Panel providing a more user-friendly web management interface.
It's recommended to first use the repository's `bootstrap-hf` script to get the default configuration working, then add LLM, keep-alive, and `sshx` strategies as needed.
---
## Related Links
- Repository: [https://github.com/ClawCopilot/Openclaw-Hf-Docker](https://github.com/ClawCopilot/Openclaw-Hf-Docker)
- Original Article: [https://tenfy.cn/posts/openclaw-hf-space-deploy/](https://tenfy.cn/posts/openclaw-hf-space-deploy/)
- OpenClaw Official Wizard: [https://docs.openclaw.ai/start/wizard](https://docs.openclaw.ai/start/wizard)
- BT Panel Official Site: [https://www.bt.cn/](https://www.bt.cn/)
|