Spaces:
Running
Running
Claude commited on
Commit ·
0fc3070
1
Parent(s): e06f520
固化程序安装到Docker镜像 + 启用微信 + 扫码提醒
Browse files- Dockerfile +19 -9
- README.md +27 -9
- 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.
|
| 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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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. 安装程序
|
| 29 |
3. 恢复备份
|
| 30 |
4. 生成配置
|
| 31 |
-
5. 微信激活
|
| 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` - 微信集成 (默认:
|
| 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.
|
| 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
|
| 22 |
mkdir -p "$OPENCLAW_STATE_DIR"/{agents,workspace,credentials,sessions,backups,skills,logs}
|
| 23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
[ -f "./backup-manager.py" ] && python3 ./backup-manager.py restore 2>/dev/null
|
|
|
|
|
|
|
| 25 |
[ -f "./config-generator.py" ] && python3 ./config-generator.py
|
| 26 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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
|