ted1990 commited on
Commit
90a49b0
·
verified ·
1 Parent(s): 8228f77

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +28 -39
Dockerfile CHANGED
@@ -48,7 +48,7 @@ DATA_DIR = os.path.expanduser("~/.openclaw")\n\
48
  def restore():\n\
49
  try:\n\
50
  print(f"--- [SYNC] 启动恢复流程, 目标仓库: {repo_id} ---")\n\
51
- if not repo_id or not token: \n\
52
  print("--- [SYNC] 跳过恢复: 未配置 HF_DATASET 或 HF_TOKEN ---")\n\
53
  return False\n\
54
  files = api.list_repo_files(repo_id=repo_id, repo_type="dataset", token=token)\n\
@@ -74,7 +74,6 @@ def backup():\n\
74
  if not existing:\n\
75
  print("--- [SYNC] 没有需要备份的数据,跳过备份 ---")\n\
76
  return\n\
77
- \n\
78
  day = datetime.now().strftime("%Y-%m-%d")\n\
79
  name = f"backup_{day}.tar.gz"\n\
80
  print(f"--- [SYNC] 正在执行全量备份: {name} ---")\n\
@@ -95,37 +94,31 @@ if __name__ == "__main__":\n\
95
  restore()\n\
96
  ' > /usr/local/bin/sync.py
97
 
98
- # 8. 容器入口脚本 (start-openclaw)
99
- # 关键修复:
100
- # 1. 移除已废弃的 controlUi.staticDir 字段(导致配置校验失败)
101
- # 2. 改用 OPENCLAW_GATEWAY_TOKEN 环境变量实现免配对自动认证
102
- # 3. 启动时自动打印完整 Dashboard URL(含 token),方便直接访问
103
- RUN echo '#!/bin/bash\n\
104
- set -e\n\
105
- \n\
106
- # 强制检查必要环境变量\n\
107
- : "${OPENAI_API_KEY:?环境变量 OPENAI_API_KEY 未设置}"\n\
108
- : "${MODEL:?环境变量 MODEL 未设置}"\n\
109
- : "${OPENCLAW_GATEWAY_PASSWORD:?环境变量 OPENCLAW_GATEWAY_PASSWORD 未设置}"\n\
110
- \n\
111
  DATA_DIR="$HOME/.openclaw"\n\
112
- mkdir -p "$DATA_DIR"/{sessions,workspace,agents/main/sessions}\n\
113
- \n\
114
- python3 /usr/local/bin/sync.py restore\n\
115
- \n\
116
- # 生成 openclaw.json 配置文件(使用 Gemini 原生 API)\n\
117
- cat > "$DATA_DIR/openclaw.json" <<EOF\n\
118
  {\n\
119
  "models": {\n\
120
  "providers": {\n\
121
- "gemini": {\n\
 
122
  "apiKey": "$OPENAI_API_KEY",\n\
123
- "api": "google-ai",\n\
124
- "models": [{ "id": "$MODEL", "name": "Gemini", "contextWindow": 1000000 }]\n\
125
  }\n\
126
  }\n\
127
  },\n\
128
- "agents": { "defaults": { "model": { "primary": "gemini/$MODEL" } } },\n\
129
  "gateway": {\n\
130
  "mode": "local", "bind": "lan", "port": $PORT,\n\
131
  "trustedProxies": ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"],\n\
@@ -136,15 +129,15 @@ cat > "$DATA_DIR/openclaw.json" <<EOF\n\
136
  }\n\
137
  }\n\
138
  }\n\
139
- EOF\n\
140
- \n\
141
  chmod 700 "$DATA_DIR"\n\
142
- chmod 600 "$DATA_DIR/openclaw.json"\n\
143
- \n\
144
- # 启动定时备份进程\n\
145
- (while true; do sleep 10800; python3 /usr/local/bin/sync.py backup; done) &\n\
146
- \n\
147
- # 启动后打印完整访问 URL(含 token)\n\
 
148
  (\n\
149
  sleep 8\n\
150
  echo ""\n\
@@ -152,12 +145,8 @@ chmod 600 "$DATA_DIR/openclaw.json"\n\
152
  echo "✅ OpenClaw 已就绪!请使用以下完整 URL 访问:"\n\
153
  echo "🔗 https://ted1990-openclaw.hf.space/#token=${OPENCLAW_GATEWAY_PASSWORD}"\n\
154
  echo "================================================="\n\
155
- echo ""\n\
156
- ) &\n\
157
- \n\
158
- # 启动 OpenClaw 网关(跳过 doctor,避免再次触发配置修复循环)\n\
159
- exec openclaw gateway run --port $PORT\n\
160
- ' > /usr/local/bin/start-openclaw && chmod +x /usr/local/bin/start-openclaw
161
 
162
  # 9. 切换到 node 用户
163
  USER node
 
48
  def restore():\n\
49
  try:\n\
50
  print(f"--- [SYNC] 启动恢复流程, 目标仓库: {repo_id} ---")\n\
51
+ if not repo_id or not token:\n\
52
  print("--- [SYNC] 跳过恢复: 未配置 HF_DATASET 或 HF_TOKEN ---")\n\
53
  return False\n\
54
  files = api.list_repo_files(repo_id=repo_id, repo_type="dataset", token=token)\n\
 
74
  if not existing:\n\
75
  print("--- [SYNC] 没有需要备份的数据,跳过备份 ---")\n\
76
  return\n\
 
77
  day = datetime.now().strftime("%Y-%m-%d")\n\
78
  name = f"backup_{day}.tar.gz"\n\
79
  print(f"--- [SYNC] 正在执行全量备份: {name} ---")\n\
 
94
  restore()\n\
95
  ' > /usr/local/bin/sync.py
96
 
97
+ # 8. 容器入口脚本
98
+ RUN printf '#!/bin/bash\nset -e\n\n\
99
+ : "${OPENAI_API_BASE:?OPENAI_API_BASE not set}"\n\
100
+ : "${OPENAI_API_KEY:?OPENAI_API_KEY not set}"\n\
101
+ : "${MODEL:?MODEL not set}"\n\
102
+ : "${OPENCLAW_GATEWAY_PASSWORD:?OPENCLAW_GATEWAY_PASSWORD not set}"\n\n\
 
 
 
 
 
 
 
103
  DATA_DIR="$HOME/.openclaw"\n\
104
+ mkdir -p "$DATA_DIR"/{sessions,workspace,agents/main/sessions}\n\n\
105
+ # ⚠️ 关键:先恢复备份(仅恢复 sessions/workspace/agents,不恢复 openclaw.json)\n\
106
+ python3 /usr/local/bin/sync.py restore\n\n\
107
+ # ⚠️ 关键:无论备份是否含旧配置,都强制用环境变量重新生成 openclaw.json\n\
108
+ CLEAN_BASE=$(echo "$OPENAI_API_BASE" | sed "s|/chat/completions||g" | sed "s|/v1/|/v1|g" | sed "s|/v1$|/v1|g")\n\n\
109
+ cat > "$DATA_DIR/openclaw.json" <<JSON\n\
110
  {\n\
111
  "models": {\n\
112
  "providers": {\n\
113
+ "openai-compat": {\n\
114
+ "baseUrl": "$CLEAN_BASE",\n\
115
  "apiKey": "$OPENAI_API_KEY",\n\
116
+ "api": "openai-completions",\n\
117
+ "models": [{ "id": "$MODEL", "name": "Model", "contextWindow": 128000 }]\n\
118
  }\n\
119
  }\n\
120
  },\n\
121
+ "agents": { "defaults": { "model": { "primary": "openai-compat/$MODEL" } } },\n\
122
  "gateway": {\n\
123
  "mode": "local", "bind": "lan", "port": $PORT,\n\
124
  "trustedProxies": ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"],\n\
 
129
  }\n\
130
  }\n\
131
  }\n\
132
+ JSON\n\n\
 
133
  chmod 700 "$DATA_DIR"\n\
134
+ chmod 600 "$DATA_DIR/openclaw.json"\n\n\
135
+ echo ""\n\
136
+ echo "--- [CONFIG] openclaw.json 已生成 ---"\n\
137
+ echo "--- [CONFIG] API Base: $CLEAN_BASE ---"\n\
138
+ echo "--- [CONFIG] Model: $MODEL ---"\n\
139
+ echo ""\n\n\
140
+ (while true; do sleep 10800; python3 /usr/local/bin/sync.py backup; done) &\n\n\
141
  (\n\
142
  sleep 8\n\
143
  echo ""\n\
 
145
  echo "✅ OpenClaw 已就绪!请使用以下完整 URL 访问:"\n\
146
  echo "🔗 https://ted1990-openclaw.hf.space/#token=${OPENCLAW_GATEWAY_PASSWORD}"\n\
147
  echo "================================================="\n\
148
+ ) &\n\n\
149
+ exec openclaw gateway run --port $PORT\n' > /usr/local/bin/start-openclaw && chmod +x /usr/local/bin/start-openclaw
 
 
 
 
150
 
151
  # 9. 切换到 node 用户
152
  USER node