Update Dockerfile
Browse files- Dockerfile +59 -58
Dockerfile
CHANGED
|
@@ -4,13 +4,13 @@ ENV DEBIAN_FRONTEND=noninteractive
|
|
| 4 |
ENV TZ=Etc/UTC
|
| 5 |
|
| 6 |
RUN apt-get update && apt-get install -y \
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
|
| 12 |
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
|
| 13 |
-
|
| 14 |
|
| 15 |
RUN npm install -g openclaw@latest
|
| 16 |
RUN pip3 install --break-system-packages huggingface_hub -q
|
|
@@ -33,74 +33,75 @@ mkdir -p "${OPENCLAW_STATE_DIR}"/{workspace,agents/main/agent,agents/main/sessio
|
|
| 33 |
log_info() { echo "[$(date -u +%%Y-%%m-%%dT%%H:%%M:%%SZ)] [ENTRYPOINT] $1" | tee -a /var/log/openclaw/gateway.stdout.log; }\n\
|
| 34 |
\n\
|
| 35 |
restore_if_exists() {\n\
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
}\n\
|
| 51 |
\n\
|
| 52 |
backup_on_start() {\n\
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
}\n\
|
| 65 |
\n\
|
| 66 |
init_config() {\n\
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
{\n\
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
}\n\
|
| 87 |
EOFCONFIG\n\
|
| 88 |
-
|
| 89 |
-
|
| 90 |
}\n\
|
| 91 |
\n\
|
| 92 |
main() {\n\
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
}\n\
|
| 100 |
-
main "$@"\n
|
|
|
|
| 101 |
|
| 102 |
RUN chmod +x /scripts/openclaw-entrypoint.sh
|
| 103 |
|
| 104 |
EXPOSE 7860
|
| 105 |
|
| 106 |
-
ENTRYPOINT ["/scripts/openclaw-entrypoint.sh"]
|
|
|
|
| 4 |
ENV TZ=Etc/UTC
|
| 5 |
|
| 6 |
RUN apt-get update && apt-get install -y \
|
| 7 |
+
curl \
|
| 8 |
+
git \
|
| 9 |
+
python3-pip \
|
| 10 |
+
&& rm -rf /var/lib/apt/lists/*
|
| 11 |
|
| 12 |
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
|
| 13 |
+
&& apt-get install -y nodejs
|
| 14 |
|
| 15 |
RUN npm install -g openclaw@latest
|
| 16 |
RUN pip3 install --break-system-packages huggingface_hub -q
|
|
|
|
| 33 |
log_info() { echo "[$(date -u +%%Y-%%m-%%dT%%H:%%M:%%SZ)] [ENTRYPOINT] $1" | tee -a /var/log/openclaw/gateway.stdout.log; }\n\
|
| 34 |
\n\
|
| 35 |
restore_if_exists() {\n\
|
| 36 |
+
[[ -z "${HF_TOKEN}" ]] && return 0\n\
|
| 37 |
+
[[ -z "${BACKUP_DATASET_REPO}" ]] && return 0\n\
|
| 38 |
+
log_info "检查备份数据..."\n\
|
| 39 |
+
RESTORE_TEMP=$(mktemp -d)\n\
|
| 40 |
+
if huggingface-cli download "${BACKUP_DATASET_REPO}" --repo-type dataset --token "${HF_TOKEN}" --local-dir "${RESTORE_TEMP}" 2>/dev/null; then\n\
|
| 41 |
+
log_info "找到备份,开始恢复数据..."\n\
|
| 42 |
+
[[ -d "${RESTORE_TEMP}/workspace" ]] && cp -r "${RESTORE_TEMP}/workspace/"* "${OPENCLAW_WORKSPACE_DIR}/" 2>/dev/null || true\n\
|
| 43 |
+
[[ -d "${RESTORE_TEMP}/agents" ]] && cp -r "${RESTORE_TEMP}/agents/"* "${OPENCLAW_STATE_DIR}/agents/" 2>/dev/null || true\n\
|
| 44 |
+
[[ -d "${RESTORE_TEMP}/identity" ]] && cp -r "${RESTORE_TEMP}/identity/"* "${OPENCLAW_STATE_DIR}/identity/" 2>/dev/null || true\n\
|
| 45 |
+
log_info "数据恢复完成"\n\
|
| 46 |
+
else\n\
|
| 47 |
+
log_info "未找到备份,跳过恢复"\n\
|
| 48 |
+
fi\n\
|
| 49 |
+
rm -rf "${RESTORE_TEMP}"\n\
|
| 50 |
}\n\
|
| 51 |
\n\
|
| 52 |
backup_on_start() {\n\
|
| 53 |
+
[[ "${BACKUP_ENABLED}" != "true" ]] && return 0\n\
|
| 54 |
+
[[ -z "${HF_TOKEN}" ]] && return 0\n\
|
| 55 |
+
[[ -z "${BACKUP_DATASET_REPO}" ]] && return 0\n\
|
| 56 |
+
log_info "执行启动备份..."\n\
|
| 57 |
+
BACKUP_TEMP=$(mktemp -d)\n\
|
| 58 |
+
cp -r "${OPENCLAW_WORKSPACE_DIR}" "${BACKUP_TEMP}/" 2>/dev/null || true\n\
|
| 59 |
+
cp -r "${OPENCLAW_STATE_DIR}/agents" "${BACKUP_TEMP}/" 2>/dev/null || true\n\
|
| 60 |
+
cp -r "${OPENCLAW_STATE_DIR}/identity" "${BACKUP_TEMP}/" 2>/dev/null || true\n\
|
| 61 |
+
echo "{\"backup_time\": \"$(date -u +%%Y-%%m-%%dT%%H:%%M:%%SZ)\", \"trigger\": \"startup\"}" > "${BACKUP_TEMP}/backup_info.json"\n\
|
| 62 |
+
huggingface-cli upload "${BACKUP_DATASET_REPO}" "${BACKUP_TEMP}/" --repo-type dataset --token "${HF_TOKEN}" --commit-message "Auto-backup $(date -u +%%Y-%%m-%%dT%%H:%%M:%%SZ)" 2>/dev/null && log_info "启动备份完成" || log_info "启动备份失败(继续启动)"\n\
|
| 63 |
+
rm -rf "${BACKUP_TEMP}"\n\
|
| 64 |
}\n\
|
| 65 |
\n\
|
| 66 |
init_config() {\n\
|
| 67 |
+
local config_file="${OPENCLAW_STATE_DIR}/openclaw.json"\n\
|
| 68 |
+
if [[ ! -f "${config_file}" ]]; then\n\
|
| 69 |
+
log_info "初始化 OpenClaw 配置..."\n\
|
| 70 |
+
cat > "${config_file}" <<'"'"'EOFCONFIG'"'"'\n\
|
| 71 |
{\n\
|
| 72 |
+
"gateway": {\n\
|
| 73 |
+
"mode": "local",\n\
|
| 74 |
+
"bind": "lan",\n\
|
| 75 |
+
"auth": {\n\
|
| 76 |
+
"mode": "token"\n\
|
| 77 |
+
}\n\
|
| 78 |
+
},\n\
|
| 79 |
+
"agents": {\n\
|
| 80 |
+
"defaults": {\n\
|
| 81 |
+
"model": {\n\
|
| 82 |
+
"primary": "${RAW_MODEL:-z-ai/glm4.7}"\n\
|
| 83 |
+
}\n\
|
| 84 |
+
}\n\
|
| 85 |
+
}\n\
|
| 86 |
}\n\
|
| 87 |
EOFCONFIG\n\
|
| 88 |
+
log_info "配置初始化完成"\n\
|
| 89 |
+
fi\n\
|
| 90 |
}\n\
|
| 91 |
\n\
|
| 92 |
main() {\n\
|
| 93 |
+
log_info "===== OpenClaw 启动 ====="\n\
|
| 94 |
+
init_config\n\
|
| 95 |
+
restore_if_exists\n\
|
| 96 |
+
backup_on_start\n\
|
| 97 |
+
log_info "启动 OpenClaw 网关..."\n\
|
| 98 |
+
exec openclaw gateway --bind lan --port "${OPENCLAW_GATEWAY_PORT}"\n\
|
| 99 |
}\n\
|
| 100 |
+
main "$@"\n\
|
| 101 |
+
' > /scripts/openclaw-entrypoint.sh
|
| 102 |
|
| 103 |
RUN chmod +x /scripts/openclaw-entrypoint.sh
|
| 104 |
|
| 105 |
EXPOSE 7860
|
| 106 |
|
| 107 |
+
ENTRYPOINT ["/scripts/openclaw-entrypoint.sh"]
|