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

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +38 -29
Dockerfile CHANGED
@@ -22,37 +22,46 @@ 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. 启动控制逻辑 —— 单行版关键修复
29
- RUN echo '#!/bin/bash; set -e; mkdir -p /root/.openclaw/sessions; python3 /usr/local/bin/sync.py restore; CLEAN_BASE=$(echo "$OPENAI_API_BASE" | sed "s|/chat/completions||g" | sed "s|/v1/|/v1|g" | sed "s|/v1$|/v1|g"); cat > /root/.openclaw/openclaw.json <<EOF
30
- {
31
- "models": {
32
- "providers": {
33
- "huggingface": {
34
- "baseUrl": "$CLEAN_BASE", "apiKey": "$OPENAI_API_KEY", "api": "openai-completions",
35
- "models": [{ "id": "$MODEL", "name": "wen1.5-0.5B-Chat", "contextWindow": 128000 }]
36
- }
37
- }
38
- },
39
- "agents": { "defaults": { "model": { "primary": "huggingface/$MODEL" } } },
40
- "gateway": {
41
- "mode": "local",
42
- "bind": "lan",
43
- "port": $PORT,
44
- "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"],
45
- "auth": { "mode": "token", "token": "$OPENCLAW_GATEWAY_PASSWORD" },
46
- "controlUi": {
47
- "enabled": true,
48
- "allowInsecureAuth": true,
49
- "dangerouslyAllowHostHeaderOriginFallback": true,
50
- "dangerouslyDisableDeviceAuth": true
51
- }
52
- }
53
- }
54
- EOF
55
- (while true; do sleep 21600; python3 /usr/local/bin/sync.py backup; done) & openclaw doctor --fix; exec openclaw gateway run --port $PORT' > /usr/local/bin/start-openclaw && chmod +x /usr/local/bin/start-openclaw
 
 
 
 
 
 
 
 
 
56
 
57
  EXPOSE 7860
58
  CMD ["/usr/local/bin/start-openclaw"]
 
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"]