邪修,福利来了!HuggingFace免费OpenClaw养虾记,姿势很另类,绝对好用~

42 阅读6分钟

最近发现不少朋友在养虾的道路上跌跌撞撞,被各种问题搞得头大。
Huggingface提供的容器2c16g的配置养上20只大龙蜥非常轻松,但是每次容器一休眠或者重启,辛辛苦苦攒的配置和进度全没了。

这就好比在沙滩上建大厦,浪一打,啥都不剩。今天咱就来整点“邪道”手段,教你如何在 Hugging Face 这个大池塘里,把龙虾,养肥、养久。

核心装备:

在开始“养虾”前,咱得先选个好鱼缸。普通的 Ubuntu 镜像调试起来能把人急死,咱直接祭出神器:codercom/code-server

为什么选 code-server?不认识它?VS Code网页版本知道了吗?熟悉的味道!!

为什么要选它?

  1. 打破端口封印:Hugging Face Space 只给开一个 7860 端口。如果你跑了 OpenClaw,还想开个面板,端口根本不够分。用 code-server,它就是一个全能网关,所有的代码修改、日志查看、甚至预览,全都挤在 7860 这一个口子上就能搞定。
  2. 白嫖全功能 IDE:直接在浏览器里改代码、翻文件。OpenCode , Gemini Cli,Claude Code各种神器随便安装。
  3. 内置终端 (Terminal) :我们可以在 IDE 里直接开终端跑命令,操作感拉满。

核心思路:把 Dataset 当成“云端硬盘”

既然磁盘是临时的,那咱就找个仓库。Hugging Face 自己的 Dataset(数据集) 仓库就是最好的“冷备份”场所。

我们的策略:自动备份(后台每 10 分钟搬一次)+ 手动恢复(重启后一键从云端捞回)。


huggingface.co/new-space

Docker容器 -- Blank空模板 -- Private 私有化,不公开访问

第一步:准备“鱼塘”(Dataset)

去 Hugging Face 新建一个 Dataset(比如 ds)。一定要设为 Private,不然你的密钥全暴露了。

https://huggingface.co/new-dataset

keeply/ds

. 创建具有 Write 权限的 Access Token。

https://huggingface.co/settings/tokens/new?tokenType=write

hf_W*******sdfsee*******T

然后在 Space 的 Settings -> Variables and Secrets 里填上:

  • DATASET_ID你的用户名/数据集名
  • HF_TOKEN: 你的 Write 权限 Token
  • PASSWORD: 进入 IDE 用的登录密码

第二步:祭出“邪修”三件套

1. Dockerfile —— 筑基(环境配置)

这里我们不仅要装 Python,还要用最新的 NVM v0.40.3 装上 Node.js 24,给 OpenClaw 提供最强的动力。

dockerfile

FROM codercom/code-server:latest
USER root

# 1. 安装基础工具
RUN apt-get update && apt-get install -y python3 python3-pip python3-full curl git sudo \
    && rm -rf /var/lib/apt/lists/*

# 2. 使用最新的 NVM v0.40.3 安装 Node.js 24
ENV NVM_DIR=/root/.nvm
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash \
    && . "$NVM_DIR/nvm.sh" \
    && nvm install 24 \
    && nvm use 24 \
    && nvm alias default 24

# 3. 强制挂载 Node 路径到系统环境
ENV PATH="/root/.nvm/versions/node/v24.14.0/bin/:${PATH}"

# 4. 安装 OpenClaw 和 同步库
RUN npm install -g openclaw --unsafe-perm=true \
    && pip3 install huggingface_hub --break-system-packages

# 5. 预设关键目录
RUN mkdir -p /root/.openclaw /root/project/data /root/project/config

# 6. 脚本进场
COPY sync.py /sync.py
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

# 骚操作:配置快捷命令别名
RUN echo "alias sync='PYTHONPATH=/ python3 -c "from sync import upload_all; upload_all()"'" >> /root/.bashrc && \
    echo "alias restore='PYTHONPATH=/ python3 -c "from sync import download_all; download_all()"'" >> /root/.bashrc


ENV PORT=7860
EXPOSE 7860
CMD ["/bin/bash", "/entrypoint.sh"]

2. sync.py —— 搬砖工(同步逻辑)

python

import os, time, threading, shutil
from huggingface_hub import HfApi, snapshot_download

# 路径对齐
SYNC_CONFIG = {"/root/.openclaw": "openclaw_settings", "/root/project/data": "data"}
IGNORE_LIST = ["*.tmp", "__pycache__/*", "*.log.lock", "node_modules/*", "pkg/*", ".cache/*", ".npm/*"]

DATASET_ID, HF_TOKEN = os.getenv("DATASET_ID"), os.getenv("HF_TOKEN")
api = HfApi()

def upload_all():
    if not DATASET_ID or not HF_TOKEN: return
    print(f"🚀 正在把虾存进冷库...")
    for local_path, repo_path in SYNC_CONFIG.items():
        if os.path.exists(local_path) and os.listdir(local_path):
            try:
                api.upload_folder(folder_path=local_path, path_in_repo=repo_path,
                    repo_id=DATASET_ID, repo_type="dataset", token=HF_TOKEN, 
                    delete_patterns="*", ignore_patterns=IGNORE_LIST)
                print(f"✅ {repo_path} 备份成功")
            except Exception as e: print(f"❌ 备份翻车: {e}")

def download_all():
    if not DATASET_ID or not HF_TOKEN: return
    print("📥 正在从云端捞虾...")
    for local_path, repo_path in SYNC_CONFIG.items():
        try:
            temp_dir = f"/tmp/hf_{repo_path}"
            os.makedirs(local_path, exist_ok=True)
            snapshot_download(repo_id=DATASET_ID, repo_type="dataset", local_dir=temp_dir, 
                              allow_patterns=f"{repo_path}/*", token=HF_TOKEN, local_dir_use_symlinks=False)
            source_dir = os.path.join(temp_dir, repo_path)
            if os.path.exists(source_dir):
                for item in os.listdir(source_dir):
                    s, d = os.path.join(source_dir, item), os.path.join(local_path, item)
                    if os.path.isdir(s):
                        if os.path.exists(d): shutil.rmtree(d)
                        shutil.copytree(s, d)
                    else: shutil.copy2(s, d)
            shutil.rmtree(temp_dir, ignore_errors=True)
            print(f"✅ {local_path} 恢复成功")
        except Exception as e: print(f"ℹ️ {repo_path} 恢复跳过")

if __name__ == "__main__":
    threading.Thread(target=lambda: [time.sleep(600) or upload_all() for _ in iter(int, 1)], daemon=True).start()
    while True: time.sleep(1)

3. entrypoint.sh —— 领路人

bash

#!/bin/bash
# 激活 NVM 环境变量
export NVM_DIR="/root/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

# 启动备份服务
python3 /sync.py &

# 启动 IDE
exec code-server --bind-addr 0.0.0.0:7860 --auth password --disable-telemetry /root

Space -- Files -- +Contribute -- Upload Files
直接把这三个文件拖拽上去, Commit 提交, 镜像就开始自动构建了。

image.png


第三步:怎么“玩”这套系统?

登录:开网页输密码(环境变量配置的PASSWORD)。

image.png

设置VSCode 快捷键回吧?搜索Ctrl + P 的快捷键,随便改成其他的,因为我们要在opencode里使用这个最关键的快捷键。

image.png 在终端里输入

source .bashrc
opencode

然后 Ctrl + P 选择官方提供的免费模型 Minimax 2.5 Free, 然后输入下方的提示词开工:

帮我安装OpenClaw (参考https://docs.openclaw.ai   并且配置两个Agent, 一个叫 xiabing, 一个叫 xiejiang, 
他们都使用LLM enpoint: https://coding.dashscope.aliyuncs.com/v1
模型: qwen3.5-plus
xiabing 其他配置
	llm api key : sk-sp-ccddddddddddddddddd
	feishu api id: cli_a9211111111111
	feishu app secret: Qz1111111111111111

xiejiang 其他配置
	llm api key : sk-sp-f9ddddddddddd
	feishu api id: cli_a9233333333333
	feishu app secret: Uri833333333333333333333

飞书channel不要使用webhook回调,需要使用websocket长连接回调的方式,如果遇到问题请参考文档https://open.feishu.cn/document/server-docs/event-subscription-guide/event-subscription-configure-/request-url-configuration-case#d286cc88      https://docs.openclaw.ai/zh-CN/channels/feishu

Channel的配置 飞书/QQ/钉钉都差不多 不需要教了吧?我这里只是新建了两个Agent,这台机器的配置跑上20个Agent没问题的。前提你得有足够的Token去烧。。我两个Coding Plan就先弄两只虾养着。 等待opencode跑完提示你ok,然后发消息给agent 开始配对,复制命令到 Code Server的Terminal下面执行配对命令 image.png

image.png

dashboard.uptimerobot.com/login

增加 你的 aa-bb.hf.space/ 到监控列表里,记得取消邮件通知,默认5分钟扫描一次。有效防止容器休眠。当然,休眠咱也不怕了,进系统一个 restore 命令,直接满血复活。

捞虾(手动恢复) :新容器启动后,开终端敲 restore。这一步是把云端存好的配置刷回 /root/.openclaw
实时监控:分屏一个终端,输入命令,看着 AI Agent 跑。
存虾(手动备份) :配置改爽了,终端敲个 sync 走人。

这套“准持久化”方案不仅零成本,还给了你一个随处可用的云端 IDE。虾苗撒下去了,各位道友,开冲!

文章转自本人公众号,欢迎转载。 邪修,福利来了!HuggingFace免费OpenClaw养虾记

欢迎关注,持续更新更多没用的信息

qrcode_for_gh_57e1c6036816_258.jpg