kyle-ai commited on
Commit
86df536
·
verified ·
1 Parent(s): d222094

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +16 -21
Dockerfile CHANGED
@@ -24,7 +24,7 @@ ENV TZ=Asia/Shanghai \
24
  OPENCLAW_TRUST_PROXY=true \
25
  NODE_ENV=production
26
 
27
- # 5. 同步引擎 (保持你逻辑,这是最稳妥的)
28
  RUN echo 'import os, sys, tarfile, time\n\
29
  from huggingface_hub import HfApi, hf_hub_download\n\
30
  from datetime import datetime, timedelta\n\
@@ -40,52 +40,49 @@ def restore():\n\
40
  now = datetime.now()\n\
41
  for i in range(5):\n\
42
  day = (now - timedelta(days=i)).strftime("%Y-%m-%d")\n\
43
- name = f"backup_{day}.tar.gz"\n\
44
  if name in files:\n\
45
  path = hf_hub_download(repo_id=repo_id, filename=name, repo_type="dataset", token=token)\n\
46
  with tarfile.open(path, "r:gz") as tar: tar.extractall(path=base_dir)\n\
47
- print(f"--- [Sync] ✅ 恢复成功: {day} ---")\n\
48
  return True\n\
49
- except Exception as e: print(f"--- [Sync] ❌ 恢复失败: {str(e)} ---")\n\
50
  \n\
51
  def backup():\n\
52
  if not repo_id or not token: return\n\
53
  try:\n\
54
  target_dir = "/root/.openclaw"\n\
55
  if not os.path.exists(target_dir): return\n\
56
- name = f"backup_{datetime.now().strftime(\"%Y-%m-%d\")}.tar.gz"\n\
57
- with tarfile.open(name, "w:gz") as tar: tar.add(target_dir, arcname=\".openclaw\")\n\
58
- api.upload_file(path_or_fileobj=name, path_in_repo=name, repo_id=repo_id, repo_type=\"dataset\", token=token)\n\
 
59
  if os.path.exists(name): os.remove(name)\n\
60
- except Exception as e: print(f"--- [Sync] 备份失败: {str(e)} ---")\n\
 
61
  \n\
62
  if __name__ == "__main__":\n\
63
  if len(sys.argv) > 1 and sys.argv[1] == "backup": backup()\n\
64
  else: restore()' > /usr/local/bin/sync.py
65
 
66
- # 6. 最终启动脚本优化
67
  RUN echo "#!/bin/bash\n\
68
  set -e\n\
69
- \n\
70
- # 环境与目录准备\n\
71
  mkdir -p /root/.openclaw\n\
72
  ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime\n\
73
  \n\
74
- # 恢复备份并强制清理残留锁\n\
75
  python3 /usr/local/bin/sync.py restore\n\
76
  find /root/.openclaw -name \"*.lock\" -delete\n\
77
  chmod 700 /root/.openclaw\n\
78
  \n\
79
- # 动态计算 API BASE\n\
80
  CLEAN_BASE=\$(echo \"\$OPENAI_API_BASE\" | sed \"s|/chat/completions||g\" | sed \"s|/v1/|/v1|g\")\n\
81
  \n\
82
- # 生成配置 (保持你提供的 customBind 逻辑,这是 2.26 版本的标准解)\n\
83
  cat > /root/.openclaw/openclaw.json <<EOF\n\
84
  {\n\
85
  \"models\": { \"providers\": { \"siliconflow\": { \"baseUrl\": \"\$CLEAN_BASE\", \"apiKey\": \"\$OPENAI_API_KEY\", \"api\": \"openai-completions\", \"models\": [{ \"id\": \"\$MODEL\", \"name\": \"DeepSeek\", \"contextWindow\": 128000 }] } } },\n\
86
  \"agents\": { \"defaults\": { \"model\": { \"primary\": \"siliconflow/\$MODEL\" } } },\n\
87
  \"gateway\": {\n\
88
- \"mode\": \"local\", \"port\": \$PORT, \"bind\": \"custom\", \"customBindHost\": \"0.0.0.0\",\n\
89
  \"trustedProxies\": [\"10.0.0.0/8\"],\n\
90
  \"auth\": { \"mode\": \"token\", \"token\": \"\$OPENCLAW_GATEWAY_PASSWORD\" },\n\
91
  \"controlUi\": { \"enabled\": true, \"allowInsecureAuth\": true, \"dangerouslyDisableDeviceAuth\": true, \"dangerouslyAllowHostHeaderOriginFallback\": true },\n\
@@ -94,15 +91,13 @@ cat > /root/.openclaw/openclaw.json <<EOF\n\
94
  }\n\
95
  EOF\n\
96
  \n\
97
- # 后台备份任务 (30分钟一次)\n\
98
  (while true; do sleep 1800; python3 /usr/local/bin/sync.py backup; done) &\n\
99
  \n\
100
- # 健康检查哨兵:解决 HF Starting 状态卡死\n\
101
- # 如果 7860 还没被 OpenClaw 占用,则临时启动一个 HTTP 服务响应 HF 探针\n\
102
- (while ! ss -lnt | grep -q :\$PORT; do sleep 2; done; echo \"--- [System] ✅ 端口 \$PORT 已激活 ---\") &\n\
103
- \n\
104
  echo \"--- [System] 🚀 正在启动 OpenClaw Gateway... ---\"\n\
105
- exec openclaw gateway run --port \$PORT\n\
 
 
 
106
  " > /usr/local/bin/start-openclaw && chmod +x /usr/local/bin/start-openclaw
107
 
108
  EXPOSE 7860
 
24
  OPENCLAW_TRUST_PROXY=true \
25
  NODE_ENV=production
26
 
27
+ # 5. 同步引擎 (修复了 Python 嵌套转义导致 SyntaxError)
28
  RUN echo 'import os, sys, tarfile, time\n\
29
  from huggingface_hub import HfApi, hf_hub_download\n\
30
  from datetime import datetime, timedelta\n\
 
40
  now = datetime.now()\n\
41
  for i in range(5):\n\
42
  day = (now - timedelta(days=i)).strftime("%Y-%m-%d")\n\
43
+ name = "backup_" + day + ".tar.gz"\n\
44
  if name in files:\n\
45
  path = hf_hub_download(repo_id=repo_id, filename=name, repo_type="dataset", token=token)\n\
46
  with tarfile.open(path, "r:gz") as tar: tar.extractall(path=base_dir)\n\
47
+ print("--- [Sync] ✅ 恢复成功: " + day + " ---")\n\
48
  return True\n\
49
+ except Exception as e: print("--- [Sync] ❌ 恢复失败: " + str(e))\n\
50
  \n\
51
  def backup():\n\
52
  if not repo_id or not token: return\n\
53
  try:\n\
54
  target_dir = "/root/.openclaw"\n\
55
  if not os.path.exists(target_dir): return\n\
56
+ day_str = datetime.now().strftime("%Y-%m-%d")\n\
57
+ name = "backup_" + day_str + ".tar.gz"\n\
58
+ with tarfile.open(name, "w:gz") as tar: tar.add(target_dir, arcname=".openclaw")\n\
59
+ api.upload_file(path_or_fileobj=name, path_in_repo=name, repo_id=repo_id, repo_type="dataset", token=token)\n\
60
  if os.path.exists(name): os.remove(name)\n\
61
+ print("--- [Sync] 备份完成: " + name + " ---")\n\
62
+ except Exception as e: print("--- [Sync] ❌ 备份失败: " + str(e))\n\
63
  \n\
64
  if __name__ == "__main__":\n\
65
  if len(sys.argv) > 1 and sys.argv[1] == "backup": backup()\n\
66
  else: restore()' > /usr/local/bin/sync.py
67
 
68
+ # 6. 最终启动脚本 (保持你的 Gateway 配置,移除了打印)
69
  RUN echo "#!/bin/bash\n\
70
  set -e\n\
 
 
71
  mkdir -p /root/.openclaw\n\
72
  ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime\n\
73
  \n\
 
74
  python3 /usr/local/bin/sync.py restore\n\
75
  find /root/.openclaw -name \"*.lock\" -delete\n\
76
  chmod 700 /root/.openclaw\n\
77
  \n\
 
78
  CLEAN_BASE=\$(echo \"\$OPENAI_API_BASE\" | sed \"s|/chat/completions||g\" | sed \"s|/v1/|/v1|g\")\n\
79
  \n\
 
80
  cat > /root/.openclaw/openclaw.json <<EOF\n\
81
  {\n\
82
  \"models\": { \"providers\": { \"siliconflow\": { \"baseUrl\": \"\$CLEAN_BASE\", \"apiKey\": \"\$OPENAI_API_KEY\", \"api\": \"openai-completions\", \"models\": [{ \"id\": \"\$MODEL\", \"name\": \"DeepSeek\", \"contextWindow\": 128000 }] } } },\n\
83
  \"agents\": { \"defaults\": { \"model\": { \"primary\": \"siliconflow/\$MODEL\" } } },\n\
84
  \"gateway\": {\n\
85
+ \"mode\": \"local\", \"port\": 7860, \"bind\": \"custom\", \"customBindHost\": \"0.0.0.0\",\n\
86
  \"trustedProxies\": [\"10.0.0.0/8\"],\n\
87
  \"auth\": { \"mode\": \"token\", \"token\": \"\$OPENCLAW_GATEWAY_PASSWORD\" },\n\
88
  \"controlUi\": { \"enabled\": true, \"allowInsecureAuth\": true, \"dangerouslyDisableDeviceAuth\": true, \"dangerouslyAllowHostHeaderOriginFallback\": true },\n\
 
91
  }\n\
92
  EOF\n\
93
  \n\
 
94
  (while true; do sleep 1800; python3 /usr/local/bin/sync.py backup; done) &\n\
95
  \n\
 
 
 
 
96
  echo \"--- [System] 🚀 正在启动 OpenClaw Gateway... ---\"\n\
97
+ export NODE_ENV=production\n\
98
+ export OPENCLAW_TRUST_PROXY=true\n\
99
+ \n\
100
+ exec openclaw gateway run --port 7860\n\
101
  " > /usr/local/bin/start-openclaw && chmod +x /usr/local/bin/start-openclaw
102
 
103
  EXPOSE 7860