openclaw / Dockerfile
brucever's picture
Update Dockerfile
c510ad2 verified
# ๆ ธๅฟƒ้•œๅƒ๏ผš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"]