File size: 4,718 Bytes
e32d817
6354206
 
023735f
6354206
2b7e3c5
524434d
f61ac3f
6354206
 
e32d817
6354206
 
 
 
524434d
6354206
 
524434d
6354206
e32d817
6354206
2b7e3c5
 
 
 
6354206
98d3a2e
6354206
 
 
2b7e3c5
e32d817
2b7e3c5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6354206
c510ad2
 
 
 
6354206
 
80e516d
2b7e3c5
6354206
 
 
 
 
 
 
 
 
 
 
 
8fd2688
 
 
 
 
 
 
 
 
 
 
 
c510ad2
 
 
 
 
 
 
8fd2688
6354206
8fd2688
 
 
524434d
6354206
023735f
 
 
 
6354206
 
 
 
2b7e3c5
 
 
 
 
98d3a2e
2b7e3c5
 
 
 
 
 
 
 
 
6354206
2b7e3c5
524434d
 
 
80e516d
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
# ๆ ธๅฟƒ้•œๅƒ๏ผš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 \
    chromium fonts-noto-cjk python3 \
    && 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\
# ๐Ÿ‘‡ ๆ ธๅฟƒ้˜ฒๅ‘๏ผšๆฏๆฌกๅฏๅŠจๅ‰๏ผŒๆธ…็†ไธŠๆฌกๆต่งˆๅ™จๅดฉๆบƒ็•™ไธ‹็š„ๆญป้”ๆ–‡ไปถ๏ผ\n\
echo \"๐Ÿงน ๆญฃๅœจๆธ…็†ๅฏ่ƒฝๆฎ‹็•™็š„ๆต่งˆๅ™จๆญป้”ๆ–‡ไปถ...\"\n\
find /home/node/.openclaw -name SingletonLock -delete 2>/dev/null || true\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\
  \"channels\": {\n\
    \"telegram\": {\n\
      \"enabled\": true,\n\
      \"botToken\": \"\$TELEGRAM_BOT_TOKEN\",\n\
      \"dmPolicy\": \"allowlist\",\n\
      \"allowFrom\": [\"\$TELEGRAM_ADMIN_ID\"]\n\
    }\n\
  },\n\
  \"browser\": {\n\
    \"defaultProfile\": \"openclaw\",\n\
    \"headless\": true,\n\
    \"noSandbox\": true,\n\
    \"executablePath\": \"/usr/bin/chromium\",\n\
    \"args\": [\n\
      \"--disable-dev-shm-usage\",\n\
      \"--disable-gpu\",\n\
      \"--disable-software-rasterizer\",\n\
      \"--disable-setuid-sandbox\"\n\
    ]\n\
  },\n\
  \"gateway\": {\n\
    \"mode\": \"local\",\n\
    \"bind\": \"loopback\",\n\
    \"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\": { \n\
      \"allowInsecureAuth\": true,\n\
      \"dangerouslyDisableDeviceAuth\": true\n\
    }\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\
        rm -rf /home/node/data/workspace/.git 2>/dev/null || true;\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\
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"]