han145 commited on
Commit
b204b33
·
verified ·
1 Parent(s): 5cb2a86

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +72 -19
Dockerfile CHANGED
@@ -22,46 +22,99 @@ ENV PORT=7860 \
22
  OPENCLAW_GATEWAY_MODE=local \
23
  HOME=/root
24
 
25
- # 6. Python 同步引擎 (sync.py) —— 单行(已验证可部署)
26
- RUN echo 'import os, sys, tarfile; from huggingface_hub import HfApi, hf_hub_download; from datetime import datetime, timedelta; api = HfApi(); repo_id = os.getenv("HF_DATASET"); token = os.getenv("HF_TOKEN"); def restore(): try: files = api.list_repo_files(repo_id=repo_id, repo_type="dataset", token=token); now = datetime.now(); for i in range(5): day = (now - timedelta(days=i)).strftime("%Y-%m-%d"); name = f"backup_{day}.tar.gz"; if name in files: path = hf_hub_download(repo_id=repo_id, filename=name, repo_type="dataset", token=token); with tarfile.open(path, "r:gz") as tar: tar.extractall(path="/root/.openclaw/"); print(f"Success: Restored from {name}"); return True; except Exception as e: print(f"Restore Error: {e}"); def backup(): try: day = datetime.now().strftime("%Y-%m-%d"); name = f"backup_{day}.tar.gz"; with tarfile.open(name, "w:gz") as tar: if os.path.exists("/root/.openclaw/sessions"): tar.add("/root/.openclaw/sessions", arcname="sessions"); tar.add("/root/.openclaw/openclaw.json", arcname="openclaw.json"); api.upload_file(path_or_fileobj=name, path_in_repo=name, repo_id=repo_id, repo_type="dataset", token=token); print(f"Backup {name} Success."); except Exception as e: print(f"Backup Error: {e}"); if __name__ == "__main__": if len(sys.argv) > 1 and sys.argv[1] == "backup": backup() else: restore()' > /usr/local/bin/sync.py
 
 
 
27
 
28
- # 7. 生成 openclaw.json 配置(拆分成多条 echo,避免 heredoc 解析问题)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  RUN mkdir -p /root/.openclaw && \
30
  echo '{' > /root/.openclaw/openclaw.json && \
31
  echo ' "models": {' >> /root/.openclaw/openclaw.json && \
32
  echo ' "providers": {' >> /root/.openclaw/openclaw.json && \
33
  echo ' "huggingface": {' >> /root/.openclaw/openclaw.json && \
34
- echo ' "baseUrl": "$CLEAN_BASE", "apiKey": "$OPENAI_API_KEY", "api": "openai-completions",' >> /root/.openclaw/openclaw.json && \
35
- echo ' "models": [{ "id": "$MODEL", "name": "wen1.5-0.5B-Chat", "contextWindow": 128000 }]' >> /root/.openclaw/openclaw.json && \
 
 
36
  echo ' }' >> /root/.openclaw/openclaw.json && \
37
  echo ' }' >> /root/.openclaw/openclaw.json && \
38
  echo ' },' >> /root/.openclaw/openclaw.json && \
39
- echo ' "agents": { "defaults": { "model": { "primary": "huggingface/$MODEL" } } },' >> /root/.openclaw/openclaw.json && \
40
  echo ' "gateway": {' >> /root/.openclaw/openclaw.json && \
41
  echo ' "mode": "local",' >> /root/.openclaw/openclaw.json && \
42
  echo ' "bind": "lan",' >> /root/.openclaw/openclaw.json && \
43
  echo ' "port": $PORT,' >> /root/.openclaw/openclaw.json && \
44
  echo ' "trustedProxies": ["0.0.0.0/0", "10.0.0.0/8", "10.16.0.0/12", "172.16.0.0/12", "192.168.0.0/16"],' >> /root/.openclaw/openclaw.json && \
45
- echo ' "auth": { "mode": "token", "token": "$OPENCLAW_GATEWAY_PASSWORD" },' >> /root/.openclaw/openclaw.json && \
46
  echo ' "controlUi": {' >> /root/.openclaw/openclaw.json && \
47
  echo ' "enabled": true,' >> /root/.openclaw/openclaw.json && \
48
  echo ' "allowInsecureAuth": true,' >> /root/.openclaw/openclaw.json && \
49
- echo ' "dangerouslyAllowHostHeaderOriginFallback": true,' >> /root/.openclaw/openclaw.json && \
50
- echo ' "dangerouslyDisableDeviceAuth": true' >> /root/.openclaw/openclaw.json && \
51
  echo ' }' >> /root/.openclaw/openclaw.json && \
52
  echo ' }' >> /root/.openclaw/openclaw.json && \
53
  echo '}' >> /root/.openclaw/openclaw.json
54
 
55
- # 8. 生成启动脚本 start-openclaw(也用多条 echo)
56
- RUN echo '#!/bin/bash' > /usr/local/bin/start-openclaw && \
57
- echo 'set -e' >> /usr/local/bin/start-openclaw && \
58
- echo 'mkdir -p /root/.openclaw/sessions' >> /usr/local/bin/start-openclaw && \
59
- echo 'python3 /usr/local/bin/sync.py restore' >> /usr/local/bin/start-openclaw && \
60
- echo 'CLEAN_BASE=$(echo "$OPENAI_API_BASE" | sed "s|/chat/completions||g" | sed "s|/v1/|/v1|g" | sed "s|/v1$|/v1|g")' >> /usr/local/bin/start-openclaw && \
61
- echo '(while true; do sleep 21600; python3 /usr/local/bin/sync.py backup; done) &' >> /usr/local/bin/start-openclaw && \
62
- echo 'openclaw doctor --fix' >> /usr/local/bin/start-openclaw && \
63
- echo 'exec openclaw gateway run --port $PORT' >> /usr/local/bin/start-openclaw && \
64
- chmod +x /usr/local/bin/start-openclaw
 
 
 
 
 
 
 
 
 
65
 
66
  EXPOSE 7860
67
  CMD ["/usr/local/bin/start-openclaw"]
 
22
  OPENCLAW_GATEWAY_MODE=local \
23
  HOME=/root
24
 
25
+ # 6. Python 同步引擎 (sync.py) —— 修复,使用多行 echo + 正确缩进
26
+ RUN cat > /usr/local/bin/sync.py << 'EOF'
27
+ import os, sys, tarfile
28
+ from huggingface_hub import HfApi, hf_hub_download
29
+ from datetime import datetime, timedelta
30
 
31
+ api = HfApi()
32
+ repo_id = os.getenv("HF_DATASET")
33
+ token = os.getenv("HF_TOKEN")
34
+
35
+ def restore():
36
+ try:
37
+ files = api.list_repo_files(repo_id=repo_id, repo_type="dataset", token=token)
38
+ now = datetime.now()
39
+ for i in range(5):
40
+ day = (now - timedelta(days=i)).strftime("%Y-%m-%d")
41
+ name = f"backup_{day}.tar.gz"
42
+ if name in files:
43
+ path = hf_hub_download(repo_id=repo_id, filename=name, repo_type="dataset", token=token)
44
+ with tarfile.open(path, "r:gz") as tar:
45
+ tar.extractall(path="/root/.openclaw/")
46
+ print(f"Success: Restored from {name}")
47
+ return True
48
+ except Exception as e:
49
+ print(f"Restore Error: {e}")
50
+
51
+ def backup():
52
+ try:
53
+ day = datetime.now().strftime("%Y-%m-%d")
54
+ name = f"backup_{day}.tar.gz"
55
+ with tarfile.open(name, "w:gz") as tar:
56
+ if os.path.exists("/root/.openclaw/sessions"):
57
+ tar.add("/root/.openclaw/sessions", arcname="sessions")
58
+ tar.add("/root/.openclaw/openclaw.json", arcname="openclaw.json")
59
+ api.upload_file(path_or_fileobj=name, path_in_repo=name, repo_id=repo_id, repo_type="dataset", token=token)
60
+ print(f"Backup {name} Success.")
61
+ except Exception as e:
62
+ print(f"Backup Error: {e}")
63
+
64
+ if __name__ == "__main__":
65
+ if len(sys.argv) > 1 and sys.argv[1] == "backup":
66
+ backup()
67
+ else:
68
+ restore()
69
+ EOF
70
+
71
+ # 7. 生成 openclaw.json 配置(多行 echo 方式,避免 heredoc 解析问题)
72
  RUN mkdir -p /root/.openclaw && \
73
  echo '{' > /root/.openclaw/openclaw.json && \
74
  echo ' "models": {' >> /root/.openclaw/openclaw.json && \
75
  echo ' "providers": {' >> /root/.openclaw/openclaw.json && \
76
  echo ' "huggingface": {' >> /root/.openclaw/openclaw.json && \
77
+ echo ' "baseUrl": "$CLEAN_BASE",' >> /root/.openclaw/openclaw.json && \
78
+ echo ' "apiKey": "$OPENAI_API_KEY",' >> /root/.openclaw/openclaw.json && \
79
+ echo ' "api": "openai-completions",' >> /root/.openclaw/openclaw.json && \
80
+ echo ' "models": [{"id": "$MODEL", "name": "wen1.5-0.5B-Chat", "contextWindow": 128000}]' >> /root/.openclaw/openclaw.json && \
81
  echo ' }' >> /root/.openclaw/openclaw.json && \
82
  echo ' }' >> /root/.openclaw/openclaw.json && \
83
  echo ' },' >> /root/.openclaw/openclaw.json && \
84
+ echo ' "agents": {"defaults": {"model": {"primary": "huggingface/$MODEL"}}},' >> /root/.openclaw/openclaw.json && \
85
  echo ' "gateway": {' >> /root/.openclaw/openclaw.json && \
86
  echo ' "mode": "local",' >> /root/.openclaw/openclaw.json && \
87
  echo ' "bind": "lan",' >> /root/.openclaw/openclaw.json && \
88
  echo ' "port": $PORT,' >> /root/.openclaw/openclaw.json && \
89
  echo ' "trustedProxies": ["0.0.0.0/0", "10.0.0.0/8", "10.16.0.0/12", "172.16.0.0/12", "192.168.0.0/16"],' >> /root/.openclaw/openclaw.json && \
90
+ echo ' "auth": {"mode": "token", "token": "$OPENCLAW_GATEWAY_PASSWORD"},' >> /root/.openclaw/openclaw.json && \
91
  echo ' "controlUi": {' >> /root/.openclaw/openclaw.json && \
92
  echo ' "enabled": true,' >> /root/.openclaw/openclaw.json && \
93
  echo ' "allowInsecureAuth": true,' >> /root/.openclaw/openclaw.json && \
94
+ echo ' "dangerouslyAllowHostHeaderOriginFallback": true' >> /root/.openclaw/openclaw.json && \
 
95
  echo ' }' >> /root/.openclaw/openclaw.json && \
96
  echo ' }' >> /root/.openclaw/openclaw.json && \
97
  echo '}' >> /root/.openclaw/openclaw.json
98
 
99
+ # 8. 生成启动脚本
100
+ RUN cat > /usr/local/bin/start-openclaw << 'EOF'
101
+ #!/bin/bash
102
+ set -e
103
+ mkdir -p /root/.openclaw/sessions
104
+
105
+ # 恢复数据
106
+ python3 /usr/local/bin/sync.py restore
107
+
108
+ # 处理地址
109
+ CLEAN_BASE=$(echo "$OPENAI_API_BASE" | sed "s|/chat/completions||g" | sed "s|/v1/|/v1|g" | sed "s|/v1$|/v1|g")
110
+
111
+ # 增量备份
112
+ (while true; do sleep 21600; python3 /usr/local/bin/sync.py backup; done) &
113
+
114
+ openclaw doctor --fix
115
+ exec openclaw gateway run --port $PORT
116
+ EOF
117
+ RUN chmod +x /usr/local/bin/start-openclaw
118
 
119
  EXPOSE 7860
120
  CMD ["/usr/local/bin/start-openclaw"]