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"]