File size: 3,931 Bytes
e32d817 6354206 98d3a2e 6354206 2b7e3c5 524434d 6354206 e32d817 6354206 524434d 6354206 524434d 6354206 e32d817 6354206 2b7e3c5 6354206 98d3a2e 6354206 2b7e3c5 e32d817 2b7e3c5 6354206 2b7e3c5 6354206 524434d 6354206 2b7e3c5 98d3a2e 2b7e3c5 6354206 2b7e3c5 524434d d91fa6c 524434d 6354206 e32d817 2b7e3c5 6354206 e32d817 | 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 | # 核心镜像:Node 22 slim
FROM node:22-slim
# 1. 安装系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
git openssh-client build-essential \
g++ make ca-certificates socat \
&& rm -rf /var/lib/apt/lists/*
# 2. 构建环境优化
RUN update-ca-certificates && \
git config --global http.sslVerify false && \
git config --global url."https://github.com/".insteadOf ssh://git@github.com/
# 3. 全局安装 OpenClaw 最新版
RUN npm install -g openclaw@latest --unsafe-perm
# 4. 环境与权限设置
ENV PORT=7860 \
HOME=/home/node
RUN mkdir -p /home/node/.openclaw/sessions \
&& mkdir -p /home/node/.openclaw/workspace \
&& mkdir -p /home/node/data \
&& chown -R node:node /home/node
# 5. 容器入口脚本
RUN echo "#!/bin/bash\n\
set -e\n\
\n\
if [ -n \"\$HF_TOKEN\" ] && [ -n \"\$DATASET_REPO\" ]; then\n\
echo \"🚀 初始化 Git 自动备份...\"\n\
git config --global user.email \"openclaw-bot@huggingface.co\"\n\
git config --global user.name \"OpenClaw Bot\"\n\
cd /home/node/data\n\
if [ ! -d \".git\" ]; then\n\
echo \"📥 克隆数据集: \$DATASET_REPO\"\n\
git clone https://user:\$HF_TOKEN@huggingface.co/datasets/\$DATASET_REPO .\n\
else\n\
echo \"📥 拉取最新数据...\"\n\
git pull origin main\n\
fi\n\
if [ \"\$(ls -A /home/node/data)\" ]; then\n\
echo \"♻️ 正在恢复历史数据...\"\n\
cp -r /home/node/data/* /home/node/.openclaw/ 2>/dev/null || true\n\
fi\n\
fi\n\
\n\
CLEAN_BASE=\$(echo \"\$OPENAI_API_BASE\" | sed \"s|/chat/completions||g\" | sed \"s|/v1/|/v1|g\" | sed \"s|/v1\$|/v1|g\")\n\
\n\
echo \"⚙️ 正在生成 OpenClaw 配置文件...\"\n\
cat > /home/node/.openclaw/openclaw.json <<EOF\n\
{\n\
\"models\": {\n\
\"providers\": {\n\
\"siliconflow\": {\n\
\"baseUrl\": \"\$CLEAN_BASE\",\n\
\"apiKey\": \"\$OPENAI_API_KEY\",\n\
\"api\": \"openai-completions\",\n\
\"models\": [{ \"id\": \"\$MODEL\", \"name\": \"DeepSeek\", \"contextWindow\": 128000 }]\n\
}\n\
}\n\
},\n\
\"agents\": { \"defaults\": { \"model\": { \"primary\": \"siliconflow/\$MODEL\" } } },\n\
\"gateway\": {\n\
\"mode\": \"local\", \"bind\": \"loopback\", \"port\": 25808,\n\
\"trustedProxies\": [\"127.0.0.1/32\", \"0.0.0.0/0\", \"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"],\n\
\"auth\": { \"mode\": \"token\", \"token\": \"\$OPENCLAW_GATEWAY_PASSWORD\" },\n\
\"controlUi\": { \"allowInsecureAuth\": true }\n\
}\n\
}\n\
EOF\n\
\n\
if [ -n \"\$HF_TOKEN\" ] && [ -n \"\$DATASET_REPO\" ]; then\n\
(while true; do \n\
sleep 300;\n\
cp -r /home/node/.openclaw/sessions /home/node/data/ 2>/dev/null || true;\n\
cp -r /home/node/.openclaw/workspace /home/node/data/ 2>/dev/null || true;\n\
\n\
# 👇 核心修复:干掉嵌套的 .git 文件夹,防止 Git 变异成子模块崩溃\n\
rm -rf /home/node/data/workspace/.git 2>/dev/null || true;\n\
\n\
cd /home/node/data;\n\
if [[ \$(git status --porcelain) ]]; then\n\
echo \"💾 [自动同步] 发现数据变动,正在上传...\"\n\
git add .;\n\
git commit -m \"Auto sync: \$(date)\";\n\
git push https://user:\$HF_TOKEN@huggingface.co/datasets/\$DATASET_REPO main > /dev/null 2>&1;\n\
fi;\n\
done) &\n\
fi\n\
\n\
cd /home/node/.openclaw\n\
echo \"🔌 启动端口转发引擎...\"\n\
socat TCP4-LISTEN:7860,fork,reuseaddr TCP4:127.0.0.1:25808 &\n\
\n\
openclaw browser start
echo \"🚀 启动 OpenClaw Gateway...\"\n\
exec openclaw gateway run --port 25808 --allow-unconfigured\n\
" > /usr/local/bin/start-openclaw && chmod +x /usr/local/bin/start-openclaw
# 6. 切换到普通用户运行
USER node
WORKDIR /home/node
EXPOSE 7860
CMD ["/usr/local/bin/start-openclaw"] |