Claude commited on
Commit
0fc3070
·
1 Parent(s): e06f520

固化程序安装到Docker镜像 + 启用微信 + 扫码提醒

Browse files
Files changed (3) hide show
  1. Dockerfile +19 -9
  2. README.md +27 -9
  3. start-openclaw.sh +45 -34
Dockerfile CHANGED
@@ -1,13 +1,14 @@
1
  # G1: OpenClaw HF Deployment - Dockerfile
2
  # 总目标: HF部署OpenClaw + CC-Switch-Web,持久化、多Agent、飞书/微信
 
3
 
4
  FROM node:22-slim
5
 
6
  LABEL maintainer="OpenClaw HF Deploy"
7
- LABEL version="2.0.0"
8
- LABEL description="OpenClaw AI Gateway + CC-Switch-Web, WebDAV/HF backup, Feishu integration"
9
 
10
- # G1.1: 系统依赖
11
  RUN apt-get update && apt-get install -y --no-install-recommends \
12
  git \
13
  openssh-client \
@@ -18,18 +19,27 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
18
  ca-certificates \
19
  tar \
20
  gzip \
 
 
 
21
  && rm -rf /var/lib/apt/lists/* \
22
  && apt-get clean
23
 
24
- # G1.2: Python包
25
  RUN pip3 install --no-cache-dir --break-system-packages \
26
  huggingface_hub \
27
  requests \
28
  pyyaml \
29
- schedule
 
30
 
31
- # G1.3: 安装 OpenClaw
32
- RUN npm install -g openclaw@latest --unsafe-perm --no-audit --no-fund
 
 
 
 
 
33
 
34
  # 创建工作目录
35
  WORKDIR /app
@@ -43,7 +53,6 @@ COPY router.js .
43
  COPY scripts/ ./scripts/
44
 
45
  # G1.5: 下载 CC-Switch-Web 预编译二进制 (正式版)
46
- # 来源: https://github.com/Laliet/cc-switch-web
47
  RUN mkdir -p /opt/cc-switch-web && \
48
  curl -fL https://github.com/Laliet/cc-switch-web/releases/download/v0.11.1/cc-switch-server-linux-x86_64 \
49
  -o /opt/cc-switch-web/server && \
@@ -67,7 +76,8 @@ ENV PORT=18888 \
67
  CCSWITCH_PORT=3000 \
68
  CCSWITCH_HOST=127.0.0.1 \
69
  CCSWITCH_USERNAME=admin \
70
- CCSWITCH_PASSWORD=""
 
71
 
72
  # 暴露端口 (Router on 18888)
73
  EXPOSE 18888
 
1
  # G1: OpenClaw HF Deployment - Dockerfile
2
  # 总目标: HF部署OpenClaw + CC-Switch-Web,持久化、多Agent、飞书/微信
3
+ # 所有程序安装固化在镜像中,重启无需重新安装
4
 
5
  FROM node:22-slim
6
 
7
  LABEL maintainer="OpenClaw HF Deploy"
8
+ LABEL version="2.1.0"
9
+ LABEL description="OpenClaw AI Gateway + CC-Switch-Web, WebDAV/HF backup, Feishu/WeChat integration"
10
 
11
+ # G1.1: 系统依赖(固化安装)
12
  RUN apt-get update && apt-get install -y --no-install-recommends \
13
  git \
14
  openssh-client \
 
19
  ca-certificates \
20
  tar \
21
  gzip \
22
+ jq \
23
+ vim \
24
+ wget \
25
  && rm -rf /var/lib/apt/lists/* \
26
  && apt-get clean
27
 
28
+ # G1.2: Python包(固化安装)
29
  RUN pip3 install --no-cache-dir --break-system-packages \
30
  huggingface_hub \
31
  requests \
32
  pyyaml \
33
+ schedule \
34
+ python-dotenv
35
 
36
+ # G1.3: 安装 OpenClaw(固化安装)
37
+ RUN npm config set registry https://registry.npmmirror.com && \
38
+ npm install -g openclaw@latest --unsafe-perm --no-audit --no-fund && \
39
+ npm config delete registry
40
+
41
+ # 验证 OpenClaw 安装
42
+ RUN openclaw --version || echo "[WARN] openclaw version check failed"
43
 
44
  # 创建工作目录
45
  WORKDIR /app
 
53
  COPY scripts/ ./scripts/
54
 
55
  # G1.5: 下载 CC-Switch-Web 预编译二进制 (正式版)
 
56
  RUN mkdir -p /opt/cc-switch-web && \
57
  curl -fL https://github.com/Laliet/cc-switch-web/releases/download/v0.11.1/cc-switch-server-linux-x86_64 \
58
  -o /opt/cc-switch-web/server && \
 
76
  CCSWITCH_PORT=3000 \
77
  CCSWITCH_HOST=127.0.0.1 \
78
  CCSWITCH_USERNAME=admin \
79
+ CCSWITCH_PASSWORD="" \
80
+ WEIXIN_ENABLED=true
81
 
82
  # 暴露端口 (Router on 18888)
83
  EXPOSE 18888
README.md CHANGED
@@ -16,19 +16,29 @@ HF部署OpenClaw,持久化、多Agent、飞书/微信集成
16
 
17
  | 组件 | 功能 |
18
  |------|------|
19
- | **Dockerfile** | 系统依赖、Python包、OpenClaw安装 |
20
  | **backup-manager.py** | WebDAV + HF Dataset 双备份、增量备份、调度器 |
21
  | **config-generator.py** | 配置生成、Agent管理、飞书通道 |
22
- | **start-openclaw.sh** | 11阶段启动编排 |
23
  | **scripts/** | 辅助脚本集合 |
24
 
 
 
 
 
 
 
 
 
 
 
25
  ## 11阶段启动流程
26
 
27
- 1. 创建所有目录
28
- 2. 安装程序 (apt/pip/npm)
29
  3. 恢复备份
30
  4. 生成配置
31
- 5. 微信激活 (WEIXIN_ENABLE=false 时跳过)
32
  6. 飞书设置
33
  7. 创建5个Agent + 绑定飞书
34
  8. 启用Skills
@@ -63,16 +73,23 @@ HF部署OpenClaw,持久化、多Agent、飞书/微信集成
63
  - `AGENT_1_PROMPT` ~ `AGENT_5_PROMPT` - 系统提示词
64
 
65
  ### 可选 - 功能开关
66
- - `WEIXIN_ENABLED` - 微信集成 (默认: false)
67
  - `SKILLS_ENABLED` - Skills功能 (默认: true)
68
  - `CCSWITCH_ENABLED` - CC-Switch集成 (默认: true)
69
 
70
- ### 可选 - CC-Switch-Web 认证配置
71
  - `CCSWITCH_USERNAME` - CC-Switch-Web 用户名 (默认: admin)
72
  - `CCSWITCH_PASSWORD` - CC-Switch-Web 密码 (重要:必须设置!)
73
 
74
  **注意**:CC-Switch-Web 需要设置密码才能访问。请在 HF Space Settings 的 Secrets 中添加 `CCSWITCH_PASSWORD`。
75
 
 
 
 
 
 
 
 
76
  ## 访问地址
77
 
78
  - **主入口**: `https://sharween-xiaoxiaxia.hf.space/` (OpenClaw Gateway)
@@ -88,8 +105,9 @@ HF部署OpenClaw,持久化、多Agent、飞书/微信集成
88
 
89
  1. 在HF创建Docker类型的Space
90
  2. 设置所有必需的Secrets
91
- 3. **重要**:在Secrets中添加 `CCSWITCH_PASSWORD` 设置访问密码
92
- 4. 构建并启动
 
93
 
94
  ## 备份策略
95
 
 
16
 
17
  | 组件 | 功能 |
18
  |------|------|
19
+ | **Dockerfile** | 系统依赖、Python包、OpenClaw安装(全部固化) |
20
  | **backup-manager.py** | WebDAV + HF Dataset 双备份、增量备份、调度器 |
21
  | **config-generator.py** | 配置生成、Agent管理、飞书通道 |
22
+ | **start-openclaw.sh** | 11阶段启动编排(无运行时安装) |
23
  | **scripts/** | 辅助脚本集合 |
24
 
25
+ ## 启动优化
26
+
27
+ **所有程序已固化在Docker镜像中**,重启容器无需重新安装:
28
+ - 系统依赖(git, jq, vim, wget等)
29
+ - Python包(huggingface_hub, requests, pyyaml等)
30
+ - OpenClaw CLI(npm全局安装)
31
+ - CC-Switch-Web(预编译二进制)
32
+
33
+ 启动时仅做:验证安装 → 恢复备份 → 生成配置 → 启动服务
34
+
35
  ## 11阶段启动流程
36
 
37
+ 1. 创建持久化目录
38
+ 2. 验证已安装程序(不重新安装)
39
  3. 恢复备份
40
  4. 生成配置
41
+ 5. 微信激活(默认启用)
42
  6. 飞书设置
43
  7. 创建5个Agent + 绑定飞书
44
  8. 启用Skills
 
73
  - `AGENT_1_PROMPT` ~ `AGENT_5_PROMPT` - 系统提示词
74
 
75
  ### 可选 - 功能开关
76
+ - `WEIXIN_ENABLED` - 微信集成 (默认: **true**)
77
  - `SKILLS_ENABLED` - Skills功能 (默认: true)
78
  - `CCSWITCH_ENABLED` - CC-Switch集成 (默认: true)
79
 
80
+ ### 可选 - CC-Switch-Web 认证配置
81
  - `CCSWITCH_USERNAME` - CC-Switch-Web 用户名 (默认: admin)
82
  - `CCSWITCH_PASSWORD` - CC-Switch-Web 密码 (重要:必须设置!)
83
 
84
  **注意**:CC-Switch-Web 需要设置密码才能访问。请在 HF Space Settings 的 Secrets 中添加 `CCSWITCH_PASSWORD`。
85
 
86
+ ### 可选 - 微信配置
87
+ - `WECHAT_TOKEN` - 微信Token(快速激活模式)
88
+ - `WECHAT_APPID` - 微信AppID(完整安装模式)
89
+ - `WECHAT_SECRET` - 微信AppSecret(完整安装模式)
90
+
91
+ **注意**:微信默认启用。首次配置时需要扫描二维码进行登录绑定。
92
+
93
  ## 访问地址
94
 
95
  - **主入口**: `https://sharween-xiaoxiaxia.hf.space/` (OpenClaw Gateway)
 
105
 
106
  1. 在HF创建Docker类型的Space
107
  2. 设置所有必需的Secrets
108
+ 3. 在Secrets中添加 `CCSWITCH_PASSWORD` 设置访问密码
109
+ 4. 如需微信,设置 `WECHAT_TOKEN` 或 `WECHAT_APPID` + `WECHAT_SECRET`
110
+ 5. 构建并启动
111
 
112
  ## 备份策略
113
 
start-openclaw.sh CHANGED
@@ -1,77 +1,93 @@
1
  #!/bin/bash
2
  # start-openclaw.sh - OpenClaw + CC-Switch-Web 启动脚本
3
  # 策略: OpenClaw 在 18889, CC-Switch-Web 在 3000, Router 在 18888
4
-
5
- # 启用调试模式 - 输出每一行命令前先展开变量
6
- set -x
7
 
8
  export OPENCLAW_STATE_DIR="${OPENCLAW_STATE_DIR:-/root/.openclaw}"
9
  export PORT="${PORT:-18888}"
10
 
11
- # === 调试:打印所有 CCSWITCH 相关环境变量 ===
12
  echo "========================================"
13
  echo "OpenClaw + CC-Switch-Web HF Deployment"
14
  echo "========================================"
15
- echo "[DEBUG] 检查 CCSWITCH 环境变量..."
16
- env | grep -i ccswitch || echo "[DEBUG] 没有找到 CCSWITCH 开头的环境变量"
17
- echo "[DEBUG] HOME=$HOME"
18
- echo "[DEBUG] CCSWITCH_PASSWORD env var = '${CCSWITCH_PASSWORD}'"
19
- echo "[DEBUG] CCSWITCH_PASSWORD length = ${#CCSWITCH_PASSWORD}"
20
 
21
- # Phase 1-8: 快速初始
22
  mkdir -p "$OPENCLAW_STATE_DIR"/{agents,workspace,credentials,sessions,backups,skills,logs}
23
- [ -f "./scripts/install-programs.sh" ] && { chmod +x ./scripts/install-programs.sh; ./scripts/install-programs.sh; } 2>/dev/null
 
 
 
 
 
 
 
 
24
  [ -f "./backup-manager.py" ] && python3 ./backup-manager.py restore 2>/dev/null
 
 
25
  [ -f "./config-generator.py" ] && python3 ./config-generator.py
26
- echo "[Phase 5] WeChat disabled"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  [ -f "./scripts/feishu-setup.sh" ] && { chmod +x ./scripts/feishu-setup.sh; ./scripts/feishu-setup.sh 2>/dev/null; }
 
 
28
  [ -f "./sync.py" ] && python3 ./sync.py 2>/dev/null
 
 
29
  mkdir -p "$OPENCLAW_STATE_DIR/skills"
30
 
31
  # Phase 9: CC-Switch-Web 正式版 (端口 3000)
32
  echo "[Phase 9] Starting CC-Switch-Web (official) on port 3000..."
33
  if [ -f "/opt/cc-switch-web/server" ]; then
34
- # 设置环境变量
35
  export HOST=127.0.0.1
36
  export PORT=3000
37
  export ALLOW_LAN_CORS=1
38
 
39
- # 创建 CC-Switch 配置目录
40
  mkdir -p "$HOME/.cc-switch"
41
 
42
- # 设置账号密码(如果提供了环境变量)
43
  CCSWITCH_USER="${CCSWITCH_USERNAME:-admin}"
44
  CCSWITCH_PASS="${CCSWITCH_PASSWORD:-}"
45
 
46
- # 调试信息
47
- echo "[Phase 9] DEBUG: CCSWITCH_PASSWORD env var length: ${#CCSWITCH_PASSWORD}"
48
- echo "[Phase 9] DEBUG: CCSWITCH_PASS var length: ${#CCSWITCH_PASS}"
49
- echo "[Phase 9] DEBUG: CCSWITCH_PASS value = '${CCSWITCH_PASS}'"
50
-
51
  if [ -n "$CCSWITCH_PASS" ]; then
52
- # 使用环境变量设置的密码
53
  echo "$CCSWITCH_PASS" > "$HOME/.cc-switch/web_password"
54
  echo "[Phase 9] Using custom password from environment variable"
55
  else
56
- # 生成随机密码
57
  CCSWITCH_PASS=$(openssl rand -base64 16 2>/dev/null || cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 16)
58
  echo "$CCSWITCH_PASS" > "$HOME/.cc-switch/web_password"
59
  echo "[Phase 9] Generated random password (no env var found)"
60
  fi
61
 
62
- # 设置密码文件权限
63
  chmod 600 "$HOME/.cc-switch/web_password"
64
 
65
- # 验证密码文件
66
- echo "[Phase 9] DEBUG: 密码文件内容 = '$(cat $HOME/.cc-switch/web_password)'"
67
- echo "[Phase 9] DEBUG: 密码文件权限 = $(stat -c %a $HOME/.cc-switch/web_password 2>/dev/null || stat -f %A $HOME/.cc-switch/web_password 2>/dev/null)"
68
-
69
- # 启动 CC-Switch-Web 服务器
70
  /opt/cc-switch-web/server &
71
  CCSWITCH_PID=$!
72
  echo "[Phase 9] CC-Switch-Web started (PID: $CCSWITCH_PID)"
73
 
74
- # 等待并显示密码
75
  sleep 2
76
  if [ -f "$HOME/.cc-switch/web_password" ]; then
77
  DISPLAY_PASS=$(cat "$HOME/.cc-switch/web_password")
@@ -92,7 +108,6 @@ echo "[Phase 10] Backup started"; }
92
  # Phase 11: Start Router (port 18888) + OpenClaw (port 18889)
93
  echo "[Phase 11] Starting services..."
94
 
95
- # Start OpenClaw on port 18889 (background)
96
  if command -v openclaw &> /dev/null; then
97
  openclaw gateway run --port 18889 &
98
  OPENCLAW_PID=$!
@@ -105,12 +120,8 @@ else
105
  echo "[Phase 11] WARNING: openclaw not found"
106
  fi
107
 
108
- # Start Router on port 18888 (foreground)
109
  echo "[Phase 11] Starting Router on port $PORT..."
110
  echo " /ccswitch/* -> CC-Switch-Web (port 3000)"
111
  echo " /* -> OpenClaw (port 18889)"
112
 
113
- # 禁用调试模式
114
- set +x
115
-
116
  exec node ./router.js
 
1
  #!/bin/bash
2
  # start-openclaw.sh - OpenClaw + CC-Switch-Web 启动脚本
3
  # 策略: OpenClaw 在 18889, CC-Switch-Web 在 3000, Router 在 18888
4
+ # 所有程序已固化在Docker镜像中,无需运行时安装
 
 
5
 
6
  export OPENCLAW_STATE_DIR="${OPENCLAW_STATE_DIR:-/root/.openclaw}"
7
  export PORT="${PORT:-18888}"
8
 
 
9
  echo "========================================"
10
  echo "OpenClaw + CC-Switch-Web HF Deployment"
11
  echo "========================================"
 
 
 
 
 
12
 
13
+ # Phase 1: 创建持久目录
14
  mkdir -p "$OPENCLAW_STATE_DIR"/{agents,workspace,credentials,sessions,backups,skills,logs}
15
+
16
+ # Phase 2: 验证已安装的程序(不再重新安装)
17
+ echo "[Phase 2] Verifying installed programs..."
18
+ echo " - openclaw: $(command -v openclaw &>/dev/null && openclaw --version 2>/dev/null || echo 'NOT FOUND')"
19
+ echo " - node: $(node --version 2>/dev/null || echo 'NOT FOUND')"
20
+ echo " - python3: $(python3 --version 2>/dev/null || echo 'NOT FOUND')"
21
+ echo " - jq: $(jq --version 2>/dev/null || echo 'NOT FOUND')"
22
+
23
+ # Phase 3: 恢复备份
24
  [ -f "./backup-manager.py" ] && python3 ./backup-manager.py restore 2>/dev/null
25
+
26
+ # Phase 4: 生成配置
27
  [ -f "./config-generator.py" ] && python3 ./config-generator.py
28
+
29
+ # Phase 5: 微信激活
30
+ echo "[Phase 5] WeChat integration (WEIXIN_ENABLED=${WEIXIN_ENABLED:-true})..."
31
+ if [ "${WEIXIN_ENABLED:-true}" = "true" ]; then
32
+ if [ -f "./scripts/wechat-activate.sh" ]; then
33
+ chmod +x ./scripts/wechat-activate.sh
34
+ ./scripts/wechat-activate.sh 2>/dev/null || echo "[Phase 5] WeChat activation completed with warnings"
35
+ else
36
+ echo "[Phase 5] WARNING: wechat-activate.sh not found"
37
+ fi
38
+
39
+ # 微信扫码提醒
40
+ echo ""
41
+ echo "╔══════════════════════════════════════════════════════╗"
42
+ echo "║ 📱 微信已启用! ║"
43
+ echo "║ ║"
44
+ echo "║ 如果是首次配置,请准备扫描微信二维码进行登录绑定。 ║"
45
+ echo "║ 扫码后微信机器人将自动连接。 ║"
46
+ echo "║ ║"
47
+ echo "║ 提示: 如需配置微信凭证,请在 HF Space Secrets 中设置: ║"
48
+ echo "║ WECHAT_TOKEN 或 WECHAT_APPID + WECHAT_SECRET ║"
49
+ echo "╚══════════════════════════════════════════════════════╝"
50
+ echo ""
51
+ else
52
+ echo "[Phase 5] WeChat disabled"
53
+ fi
54
+
55
+ # Phase 6: 飞书设置
56
  [ -f "./scripts/feishu-setup.sh" ] && { chmod +x ./scripts/feishu-setup.sh; ./scripts/feishu-setup.sh 2>/dev/null; }
57
+
58
+ # Phase 7: 同步
59
  [ -f "./sync.py" ] && python3 ./sync.py 2>/dev/null
60
+
61
+ # Phase 8: Skills
62
  mkdir -p "$OPENCLAW_STATE_DIR/skills"
63
 
64
  # Phase 9: CC-Switch-Web 正式版 (端口 3000)
65
  echo "[Phase 9] Starting CC-Switch-Web (official) on port 3000..."
66
  if [ -f "/opt/cc-switch-web/server" ]; then
 
67
  export HOST=127.0.0.1
68
  export PORT=3000
69
  export ALLOW_LAN_CORS=1
70
 
 
71
  mkdir -p "$HOME/.cc-switch"
72
 
 
73
  CCSWITCH_USER="${CCSWITCH_USERNAME:-admin}"
74
  CCSWITCH_PASS="${CCSWITCH_PASSWORD:-}"
75
 
 
 
 
 
 
76
  if [ -n "$CCSWITCH_PASS" ]; then
 
77
  echo "$CCSWITCH_PASS" > "$HOME/.cc-switch/web_password"
78
  echo "[Phase 9] Using custom password from environment variable"
79
  else
 
80
  CCSWITCH_PASS=$(openssl rand -base64 16 2>/dev/null || cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 16)
81
  echo "$CCSWITCH_PASS" > "$HOME/.cc-switch/web_password"
82
  echo "[Phase 9] Generated random password (no env var found)"
83
  fi
84
 
 
85
  chmod 600 "$HOME/.cc-switch/web_password"
86
 
 
 
 
 
 
87
  /opt/cc-switch-web/server &
88
  CCSWITCH_PID=$!
89
  echo "[Phase 9] CC-Switch-Web started (PID: $CCSWITCH_PID)"
90
 
 
91
  sleep 2
92
  if [ -f "$HOME/.cc-switch/web_password" ]; then
93
  DISPLAY_PASS=$(cat "$HOME/.cc-switch/web_password")
 
108
  # Phase 11: Start Router (port 18888) + OpenClaw (port 18889)
109
  echo "[Phase 11] Starting services..."
110
 
 
111
  if command -v openclaw &> /dev/null; then
112
  openclaw gateway run --port 18889 &
113
  OPENCLAW_PID=$!
 
120
  echo "[Phase 11] WARNING: openclaw not found"
121
  fi
122
 
 
123
  echo "[Phase 11] Starting Router on port $PORT..."
124
  echo " /ccswitch/* -> CC-Switch-Web (port 3000)"
125
  echo " /* -> OpenClaw (port 18889)"
126
 
 
 
 
127
  exec node ./router.js