【无标题】

ClawDBot 部署指南 - Windows 10

📖 文档概览

本文档详细指导在 Windows 10 系统上部署 ClawDBot 的完整过程,包括环境准备、Docker 配置、服务部署和故障排除。


一、系统要求与准备工作

1.1 硬件要求

  • 操作系统:Windows 10 版本 2004(内部版本 19041)或更高

  • CPU:支持虚拟化技术(VT-x/AMD-V)

  • 内存:至少 8GB RAM(推荐 16GB)

  • 存储:至少 20GB 可用空间

  • 架构:64位系统

1.2 软件要求

  • WSL 2(Windows Subsystem for Linux 2)

  • Docker Desktop for Windows

  • Ubuntu(或其他 Linux 发行版)

1.3 检查当前系统

powershell

复制代码
# 以管理员身份打开 PowerShell,检查系统版本
winver
# 或
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"

二、WSL 2 安装与配置

2.1 启用必要功能

powershell

复制代码
# 1. 启用 WSL 功能
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

# 2. 启用虚拟机平台
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# 3. 重启计算机
Restart-Computer

2.2 安装 WSL 2 内核更新

  1. 下载地址:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

  2. 双击运行安装包

  3. 按照向导完成安装

2.3 设置 WSL 2 为默认版本

powershell

复制代码
# 重启后以管理员身份打开 PowerShell
wsl --set-default-version 2

2.4 安装 Linux 发行版(推荐 Ubuntu)

powershell

复制代码
# 方法一:命令行安装
wsl --install -d Ubuntu

# 方法二:从 Microsoft Store 安装
# 1. 打开 Microsoft Store
# 2. 搜索 "Ubuntu"
# 3. 选择 "Ubuntu 22.04 LTS" 或最新版本
# 4. 点击 "获取" 安装

2.5 初始化 Ubuntu

  1. 从开始菜单打开 "Ubuntu"

  2. 等待初始化完成

  3. 设置用户名和密码(建议使用简单的密码,如 ubuntu123


三、Docker Desktop 安装

3.1 下载 Docker Desktop

3.2 安装步骤

  1. 双击下载的安装程序

  2. 在安装向导中勾选以下选项:

    • ✅ Add shortcut to desktop(添加桌面快捷方式)

    • Use WSL 2 instead of Hyper-V(重要!使用 WSL 2 而不是 Hyper-V)

    • ✅ Enable Windows containers for Docker Desktop(可选)

  3. 点击 "Install" 开始安装

  4. 安装完成后重启计算机

3.3 首次配置 Docker Desktop

  1. 启动 Docker Desktop

  2. 接受服务条款

  3. 等待 Docker 启动完成(约 1-2 分钟)

3.4 配置 WSL 2 集成

  1. 点击 Docker Desktop 系统托盘图标

  2. 选择 "Settings"(设置)

  3. 导航到 "Resources" → "WSL Integration"

  4. 启用你安装的 Ubuntu 发行版

  5. 点击 "Apply & Restart"

3.5 配置资源分配(可选但推荐)

text

复制代码
设置 → Resources → Advanced
- CPUs: 4-6(根据 CPU 核心数)
- Memory: 6-8 GB(不要超过总内存的 70%)
- Swap: 1 GB
- Disk image size: 64 GB(默认值通常足够)

四、ClawDBot 项目准备

4.1 创建项目目录结构

方案一:在 WSL Ubuntu 中创建(推荐)

bash

复制代码
# 1. 打开 Ubuntu 终端
# 在开始菜单搜索 "Ubuntu" 并打开

# 2. 创建项目目录
mkdir -p ~/projects/clawdbot
cd ~/projects/clawdbot

# 3. 创建必要的子目录
mkdir -p config data logs backups

# 4. 验证目录结构
ls -la
方案二:在 Windows 中创建

powershell

复制代码
# 在 PowerShell 中执行
New-Item -ItemType Directory -Force -Path "clawdbot\config", "clawdbot\data", "clawdbot\logs", "clawdbot\backups"

# 或手动创建
# 在 C:\Users\你的用户名\ 下创建 clawdbot 文件夹
# 在 clawdbot 文件夹中创建 config, data, logs, backups 子文件夹

4.2 目录结构说明

text

复制代码
clawdbot/
├── config/         # 配置文件目录
├── data/           # 应用数据目录
├── logs/           # 日志文件目录
└── backups/        # 备份文件目录

五、Docker 配置文件创建

5.1 创建 docker-compose.yml

在项目根目录创建 docker-compose.yml 文件:

yaml

复制代码
# docker-compose.yml - ClawDBot 基础部署配置
version: '3.8'

# 定义公共网络
networks:
  clawdbot-network:
    driver: bridge

# 定义持久化存储卷
volumes:
  postgres-data:
    name: clawdbot-postgres-data
  redis-data:
    name: clawdbot-redis-data

# 服务定义
services:
  # PostgreSQL 数据库服务
  postgres:
    image: postgres:15-alpine
    container_name: clawdbot-postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: clawdbot
      POSTGRES_USER: clawdbot_admin
      POSTGRES_PASSWORD: ChangeMe123!
      TZ: Asia/Shanghai
    volumes:
      - postgres-data:/var/lib/postgresql/data
      - ./backups:/backups
    ports:
      - "5432:5432"
    networks:
      - clawdbot-network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U clawdbot_admin"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s

  # Redis 缓存服务
  redis:
    image: redis:7-alpine
    container_name: clawdbot-redis
    restart: unless-stopped
    command: redis-server --appendonly yes --requirepass RedisPass123!
    volumes:
      - redis-data:/data
    ports:
      - "6379:6379"
    networks:
      - clawdbot-network
    healthcheck:
      test: ["CMD", "redis-cli", "--raw", "incr", "ping"]
      interval: 30s
      timeout: 10s
      retries: 3

  # ClawDBot 应用服务
  clawdbot:
    image: python:3.11-slim
    container_name: clawdbot-app
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    environment:
      # 数据库配置
      DB_HOST: postgres
      DB_PORT: 5432
      DB_NAME: clawdbot
      DB_USER: clawdbot_admin
      DB_PASSWORD: ChangeMe123!
      # Redis 配置
      REDIS_HOST: redis
      REDIS_PORT: 6379
      REDIS_PASSWORD: RedisPass123!
      # 应用配置
      SECRET_KEY: django-insecure-your-secret-key-change-in-production
      DEBUG: "true"
      ALLOWED_HOSTS: localhost,127.0.0.1
      # 时区配置
      TZ: Asia/Shanghai
    volumes:
      - ./data:/app/data
      - ./logs:/app/logs
    ports:
      - "8000:8000"
    networks:
      - clawdbot-network
    command: >
      sh -c "
      echo '安装必要的Python包...' &&
      pip install django==4.2 gunicorn psycopg2-binary redis &&
      echo '等待数据库就绪...' &&
      sleep 15 &&
      echo '创建Django测试项目...' &&
      django-admin startproject testproject . &&
      echo '启动开发服务器...' &&
      python manage.py runserver 0.0.0.0:8000
      "
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s

5.2 创建环境变量文件(可选)

创建 .env 文件来管理敏感信息:

env

复制代码
# .env - 环境变量配置
# 数据库配置
DB_PASSWORD=StrongPassword123!
POSTGRES_DB=clawdbot
POSTGRES_USER=clawdbot_admin

# Redis配置
REDIS_PASSWORD=RedisPass456!

# 应用配置
SECRET_KEY=django-insecure-$(openssl rand -base64 32)
DEBUG=true
ALLOWED_HOSTS=localhost,127.0.0.1

# 时区
TZ=Asia/Shanghai

注意:将敏感信息硬编码在配置文件中仅用于测试环境,生产环境请使用更安全的方式。


六、部署与启动服务

6.1 启动 ClawDBot 服务

bash

复制代码
# 在项目目录中执行(WSL Ubuntu 或 PowerShell)
docker-compose up -d

6.2 查看服务状态

bash

复制代码
# 查看所有容器状态
docker-compose ps

# 预期输出示例:
# NAME                COMMAND                  SERVICE             STATUS              PORTS
# clawdbot-app        "sh -c 'echo '安装必…"   clawdbot            running             0.0.0.0:8000->8000/tcp
# clawdbot-postgres   "docker-entrypoint.s…"   postgres           running             0.0.0.0:5432->5432/tcp
# clawdbot-redis      "docker-entrypoint.s…"   redis              running             0.0.0.0:6379->6379/tcp

6.3 查看服务日志

bash

复制代码
# 查看所有服务的日志
docker-compose logs

# 只看应用服务日志
docker-compose logs clawdbot

# 实时跟踪日志(按 Ctrl+C 退出)
docker-compose logs -f

# 查看最后 50 行日志
docker-compose logs --tail=50

6.4 验证服务运行

bash

复制代码
# 方法一:使用 curl 测试
curl -I http://localhost:8000

# 方法二:在浏览器中访问
# 打开浏览器,访问 http://localhost:8000

# 方法三:测试数据库连接
docker exec clawdbot-postgres pg_isready -U clawdbot_admin

# 方法四:测试 Redis 连接
docker exec clawdbot-redis redis-cli -a RedisPass123! ping

七、管理命令参考

7.1 Docker Compose 常用命令

bash

复制代码
# 启动服务(后台模式)
docker-compose up -d

# 停止服务
docker-compose stop

# 停止并删除容器
docker-compose down

# 停止并删除容器、网络、卷
docker-compose down -v

# 重启特定服务
docker-compose restart clawdbot

# 重新构建并启动服务
docker-compose up -d --build

# 查看服务状态
docker-compose ps

# 查看服务资源使用
docker-compose top

7.2 Docker 常用命令

bash

复制代码
# 查看所有容器
docker ps -a

# 查看运行中的容器
docker ps

# 查看容器资源使用
docker stats

# 查看容器日志
docker logs clawdbot-app

# 进入容器内部
docker exec -it clawdbot-app bash
docker exec -it clawdbot-postgres psql -U clawdbot_admin

# 查看镜像
docker images

# 清理无用资源
docker system prune -a

7.3 服务特定操作

bash

复制代码
# 备份数据库
docker exec clawdbot-postgres pg_dump -U clawdbot_admin clawdbot > backup_$(date +%Y%m%d).sql

# 恢复数据库
cat backup.sql | docker exec -i clawdbot-postgres psql -U clawdbot_admin clawdbot

# 查看数据库大小
docker exec clawdbot-postgres psql -U clawdbot_admin -d clawdbot -c "SELECT pg_size_pretty(pg_database_size('clawdbot'));"

# 清理 Redis 缓存
docker exec clawdbot-redis redis-cli -a RedisPass123! FLUSHALL

八、故障排除与常见问题

8.1 端口冲突问题

powershell

复制代码
# 查看端口占用情况
netstat -ano | findstr :8000
netstat -ano | findstr :5432
netstat -ano | findstr :6379

# 解决方法1:杀死占用进程
taskkill /PID <进程号> /F

# 解决方法2:修改 docker-compose.yml 中的端口映射
# 例如将 8000:8000 改为 8001:8000

8.2 WSL 2 网络问题

powershell

复制代码
# 重置 WSL 2
wsl --shutdown

# 重启 Docker Desktop
# 等待 30 秒后重新启动

# 检查 WSL 2 IP 地址
wsl hostname -I

8.3 Docker 启动失败

powershell

复制代码
# 1. 检查 Docker Desktop 是否运行
# 查看系统托盘中的 Docker 图标

# 2. 重置 Docker Desktop
# Docker Desktop → Troubleshoot → Reset to factory defaults

# 3. 重启 WSL 2
wsl --shutdown

8.4 文件权限问题

bash

复制代码
# 在 WSL 中修复权限
sudo chown -R 1000:1000 ./data ./logs

# 或在 docker-compose.yml 中指定用户
clawdbot:
  user: "1000:1000"  # 使用当前用户 ID

8.5 性能优化建议

powershell

复制代码
# 1. 将 Docker 数据目录移动到 SSD
# Docker Desktop → Settings → Resources → Advanced
# 修改 Disk image location

# 2. 禁用 Windows Defender 实时保护(临时)
# 设置 → 更新和安全 → Windows 安全中心 → 病毒和威胁防护 → 管理设置

# 3. 添加排除项
# 将 Docker 相关目录添加到 Windows Defender 排除列表

8.6 常见错误代码及解决

错误代码 可能原因 解决方案
Error response from daemon Docker 服务未启动 启动 Docker Desktop
Port is already allocated 端口被占用 修改端口或杀死占用进程
Cannot connect to the Docker daemon Docker 服务问题 重启 Docker Desktop
WSL 2 installation is incomplete WSL 2 未完全安装 重新安装 WSL 2 内核更新

九、生产环境配置

9.1 安全加固配置

yaml

复制代码
# docker-compose.prod.yml - 生产环境配置
version: '3.8'

services:
  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_PASSWORD_FILE: /run/secrets/db_password
    secrets:
      - db_password
    volumes:
      - postgres-data:/var/lib/postgresql/data
    networks:
      - clawdbot-network

  clawdbot:
    build: .
    environment:
      DEBUG: "false"
      SECRET_KEY_FILE: /run/secrets/secret_key
      DB_PASSWORD_FILE: /run/secrets/db_password
    secrets:
      - secret_key
      - db_password
    ports:
      - "80:8000"
    networks:
      - clawdbot-network

secrets:
  db_password:
    file: ./secrets/db_password.txt
  secret_key:
    file: ./secrets/secret_key.txt

volumes:
  postgres-data:

networks:
  clawdbot-network:
    driver: bridge

9.2 创建 Dockerfile

dockerfile

复制代码
FROM python:3.11-slim as builder

WORKDIR /app

# 安装系统依赖
RUN apt-get update && apt-get install -y \
    gcc \
    g++ \
    libpq-dev \
    && rm -rf /var/lib/apt/lists/*

# 复制依赖文件
COPY requirements.txt .

# 安装 Python 依赖
RUN pip install --no-cache-dir -r requirements.txt

# 运行阶段
FROM python:3.11-slim

WORKDIR /app

# 创建非 root 用户
RUN addgroup --system app && adduser --system --ingroup app appuser

# 从构建阶段复制依赖
COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
COPY --from=builder /usr/local/bin /usr/local/bin

# 复制应用代码
COPY . .

# 设置权限
RUN chown -R appuser:app /app
USER appuser

# 暴露端口
EXPOSE 8000

# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
    CMD curl -f http://localhost:8000/health/ || exit 1

# 启动命令
CMD ["gunicorn", "--bind", "0.0.0.0:8000", \
     "--workers", "4", \
     "--timeout", "120", \
     "--access-logfile", "-", \
     "--error-logfile", "-", \
     "clawdbot.wsgi:application"]

9.3 创建 requirements.txt

txt

复制代码
Django==4.2
gunicorn==21.2.0
psycopg2-binary==2.9.7
redis==5.0.1
celery==5.3.1
django-cors-headers==4.2.0
django-rest-framework==0.1.0
drf-yasg==1.21.7

十、备份与恢复

10.1 备份脚本

bash

复制代码
#!/bin/bash
# backup.sh - 备份脚本
BACKUP_DIR="./backups"
DATE=$(date +%Y%m%d_%H%M%S)

echo "开始备份 ClawDBot..."

# 1. 备份数据库
echo "备份数据库..."
docker exec clawdbot-postgres pg_dump -U clawdbot_admin clawdbot > \
    "${BACKUP_DIR}/clawdbot_db_${DATE}.sql"

# 2. 备份配置文件
echo "备份配置文件..."
tar -czf "${BACKUP_DIR}/clawdbot_config_${DATE}.tar.gz" \
    docker-compose.yml .env config/ 2>/dev/null || true

# 3. 备份重要数据
echo "备份应用数据..."
tar -czf "${BACKUP_DIR}/clawdbot_data_${DATE}.tar.gz" \
    data/ logs/ 2>/dev/null || true

# 4. 删除7天前的备份
find "${BACKUP_DIR}" -name "*.sql" -mtime +7 -delete
find "${BACKUP_DIR}" -name "*.tar.gz" -mtime +7 -delete

echo "备份完成!文件保存在: ${BACKUP_DIR}/"

10.2 恢复脚本

bash

复制代码
#!/bin/bash
# restore.sh - 恢复脚本
if [ -z "$1" ]; then
    echo "请指定备份文件: ./restore.sh backup_20240101.sql"
    exit 1
fi

echo "开始恢复 ClawDBot..."

# 1. 停止服务
docker-compose down

# 2. 恢复数据库
echo "恢复数据库..."
cat "$1" | docker exec -i clawdbot-postgres psql -U clawdbot_admin clawdbot

# 3. 启动服务
docker-compose up -d

echo "恢复完成!"

十一、监控与维护

11.1 健康检查脚本

bash

复制代码
#!/bin/bash
# health-check.sh - 健康检查脚本
echo "=== ClawDBot 健康检查 ==="
echo "检查时间: $(date)"

echo -e "\n1. Docker 服务状态:"
docker info > /dev/null 2>&1
if [ $? -eq 0 ]; then
    echo "✅ Docker 服务运行正常"
else
    echo "❌ Docker 服务异常"
fi

echo -e "\n2. 容器运行状态:"
docker-compose ps

echo -e "\n3. 服务健康状态:"
curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/ 2>/dev/null
STATUS=$?
if [ $STATUS -eq 0 ]; then
    echo "✅ 应用服务可访问"
else
    echo "❌ 应用服务不可访问"
fi

echo -e "\n4. 数据库连接:"
docker exec clawdbot-postgres pg_isready -U clawdbot_admin > /dev/null 2>&1
if [ $? -eq 0 ]; then
    echo "✅ 数据库连接正常"
else
    echo "❌ 数据库连接异常"
fi

echo -e "\n5. Redis 连接:"
docker exec clawdbot-redis redis-cli -a RedisPass123! ping > /dev/null 2>&1
if [ $? -eq 0 ]; then
    echo "✅ Redis 连接正常"
else
    echo "❌ Redis 连接异常"
fi

echo -e "\n6. 系统资源使用:"
docker stats --no-stream --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

echo -e "\n检查完成!"

11.2 日志轮转配置

bash

复制代码
# 在宿主机上配置日志轮转
# 创建日志轮转配置
cat > /etc/logrotate.d/clawdbot << EOF
/var/lib/docker/containers/*/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    copytruncate
}
EOF

十二、附录

12.1 常用端口说明

端口 服务 用途 访问方式
8000 ClawDBot 应用服务 http://localhost:8000
5432 PostgreSQL 数据库 psql -h localhost -p 5432
6379 Redis 缓存 redis-cli -h localhost -p 6379

12.2 默认凭据

  • PostgreSQL

    • 用户名:clawdbot_admin

    • 密码:ChangeMe123!

    • 数据库:clawdbot

  • Redis

    • 密码:RedisPass123!

12.3 文件位置参考

文件/目录 Windows 位置 WSL Ubuntu 位置
项目目录 C:\Users\<用户名>\clawdbot /home/<用户名>/projects/clawdbot
Docker 数据 C:\Users\<用户名>\.docker /home/<用户名>/.docker
WSL 文件 \\wsl$\Ubuntu\home\<用户名>\ /home/<用户名>/

12.4 联系方式与支持

  • 问题反馈:记录错误信息、复现步骤

  • 日志收集 :使用 docker-compose logs > error.log 收集日志

  • 社区支持:访问项目 GitHub Issues


📌 重要提醒

  1. 安全警告:本文档中的默认密码仅用于测试环境,生产环境必须修改

  2. 备份策略:定期备份数据库和配置文件

  3. 更新策略:定期更新 Docker 镜像和系统依赖

  4. 监控建议:生产环境建议配置监控和告警


文档版本 :v1.0
最后更新 :2024年1月
适用系统 :Windows 10/11
部署方式:Docker + WSL 2

相关推荐
RichardLau_Cx2 小时前
【保姆级实操】MediaPipe SDK/API 前端项目接入指南(Web版,可直接复制代码)
前端·vue·react·webassembly·mediapipe·手部追踪·前端计算机视觉
不爱写程序的东方不败2 小时前
APP接口测试流程实战Posman+Fiddler
前端·测试工具·fiddler
晚霞的不甘3 小时前
Flutter for OpenHarmony构建全功能视差侧滑菜单系统:从动效设计到多页面导航的完整实践
前端·学习·flutter·microsoft·前端框架·交互
黎子越3 小时前
python相关练习
java·前端·python
北极糊的狐4 小时前
若依项目vue前端启动键入npm run dev 报错:不是内部或外部命令,也不是可运行的程序或批处理文件。
前端·javascript·vue.js
XRJ040618xrj4 小时前
Nginx下构建PC站点
服务器·前端·nginx
We་ct4 小时前
LeetCode 289. 生命游戏:题解+优化,从基础到原地最优
前端·算法·leetcode·矩阵·typescript
有诺千金5 小时前
VUE3入门很简单(4)---组件通信(props)
前端·javascript·vue.js
2501_944711435 小时前
Vue-路由懒加载与组件懒加载
前端·javascript·vue.js