闲置台式机变身私有 AI Agent:基于 AstrBot + 企业微信的完整部署方案

foxgem

为什么要做这件事?

你是否也有一台配置还不错、但吃灰已久的台式机?与其让它积灰,不如把它变成一个私有 AI Agent 服务器——一个 7×24 小时待命的个人 AI 助手,随时通过微信就能下达指令。

这正是本文要做的事:基于 AstrBot,在一台闲置 Windows 台式机上搭建一套完整的 AI Agent 开发和生产系统。它需要满足以下目标:

  1. 私有部署:数据不出本地网络,安全可控
  2. 微信触达:借助企业微信的能力,在微信中直接与 AI 对话、下达指令
  3. 远程管理:必要时可远程桌面操作,不必人在机器旁
  4. 开发友好:既是生产环境,也是开发调试的场所

硬件盘点与能力评估

先来看看手里这台机器的家底:

组件型号关键参数
CPUIntel i7-12700F12 核 20 线程,P-core 4.9GHz
内存Corsair DDR4 32002×16GB = 32GB
GPUNVIDIA Quadro P20005GB GDDR5, CUDA 1024 核
系统盘Samsung 970 EVO Plus500GB NVMe SSD
数据盘WD Blue 1TB7200 RPM HDD
主板MSI MAG B660M Mortar WiFi DDR4WiFi 6, 2.5G LAN
散热COOLER MASTER ML240 V2 ARGB240mm AIO 水冷
电源Antec HCG 650W80+ Gold 全模组
显示器Acer XV271U M2K 170Hz (远程桌面备用)

能力评估:

  • CPU:i7-12700F 的多核性能足以应对 AstrBot 主服务 + Docker 容器编排 + 反向代理等负载,甚至还有余力跑一些轻量 AI 推理
  • 内存:32GB 对于 Docker 化部署绑绑有余,可同时运行多个容器服务
  • GPU:Quadro P2000 虽然不是消费级旗舰,但 5GB VRAM 可胜任小型语言模型的本地推理(如 Qwen2.5-3B),更重要的是它对 Docker GPU 直通有良好支持
  • 存储:NVMe SSD 做系统和容器运行盘,HDD 做数据持久化和日志存储,分工明确
  • 网络:板载 2.5G LAN + WiFi 6,内网传输和远程访问都有保障
  • 供电与散热:650W 金牌电源 + 240mm 水冷,7×24 运行毫无压力

结论:这台机器完全可以胜任一个小型私有 AI Agent 服务器的角色。

系统方案选择:三条路,选哪条?

方案一:保留 Windows,Docker Desktop 部署

Windows 11 (Host)
  └── Docker Desktop (WSL2 Backend)
       ├── AstrBot 容器
       ├── Ollama 容器 (可选本地模型)
       └── Nginx 反向代理

优点: 最简单,保留 Windows 图形界面,远程桌面方便,Windows 一键安装器可用 缺点: WSL2 有内存开销,Docker Desktop 偶尔不稳定,不够”服务器范儿”

方案二:双系统 Windows + Ubuntu Server

NVMe SSD (500GB)
  ├── 分区 1: Ubuntu Server 24.04 LTS (200GB) ← 默认启动
  └── 分区 2: Windows 11 (200GB) ← 需要时切换

HDD (1TB)
  └── 数据分区 (ext4)

优点: Linux 原生 Docker 性能最佳,Windows 偶尔可用 缺点: 切换系统需重启,管理复杂

方案三:Ubuntu Server 单系统 + 远程桌面 ⭐ 推荐

NVMe SSD (500GB)
  └── Ubuntu Server 24.04 LTS (全盘)

HDD (1TB)
  └── /data (数据、日志、备份)

优点: 最干净、最稳定、资源利用率最高、Docker 原生支持(性能最好) 缺点: 没有本地图形界面(但有远程桌面解决方案)

我的选择

方案三。理由很简单:

  1. 这台机器的定位是 服务器,不是日常办公电脑
  2. Ubuntu Server 的 Docker 性能显著优于 WSL2,无额外内存开销
  3. 远程桌面需求可通过 SSH + Web 管理面板完美解决
  4. NVIDIA GPU 驱动在 Ubuntu 上非常成熟,Docker GPU 直通配置简单

如果你确实需要偶尔用 Windows,方案二也是不错的选择。下面的部署流程以方案三为主线,关键步骤会标注方案一的差异。

第一阶段:系统安装与基础配置

1.1 安装 Ubuntu Server 24.04 LTS

Ubuntu 官网 下载镜像,用 Rufus 制作启动 U 盘。

磁盘分区建议:

磁盘挂载点大小用途
NVMe SSD/100GB系统、Docker 引擎
NVMe SSD/var/lib/docker350GBDocker 数据
NVMe SSDswap16GB交换分区
HDD 1TB/data全部AstrBot 数据、日志、备份

安装时选择 OpenSSH Server,跳过 Docker 和 Snap 相关选项(我们手动安装更新的版本)。

1.2 基础系统配置

# 更新系统
sudo apt update && sudo apt upgrade -y

# 设置时区
sudo timedatectl set-timezone Asia/Shanghai

# 安装基础工具
sudo apt install -y curl wget git htop net-tools ufw

# 配置静态 IP(重要!后续很多服务依赖固定 IP)
sudo nano /etc/netplan/00-installer-config.yaml

Netplan 配置示例:

network:
  version: 2
  ethernets:
    eno1:  # 实际网卡名可能不同,用 ip link 查看
      dhcp4: no
      addresses:
        - 192.168.1.100/24
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [223.5.5.5, 114.114.114.114]
sudo netplan apply

1.3 配置防火墙

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp      # SSH
sudo ufw allow 6185/tcp    # AstrBot WebUI
sudo ufw allow 6195/tcp    # AstrBot 企业微信回调
sudo ufw allow 3389/tcp    # 远程桌面(如果需要)
sudo ufw enable

1.4 安装 NVIDIA 驱动(为本地模型推理准备)

# 安装驱动
sudo apt install -y nvidia-driver-550

# 重启
sudo reboot

# 验证
nvidia-smi

你应该能看到 Quadro P2000 被正确识别,显示 5GB 显存。

第二阶段:Docker 环境搭建

2.1 安装 Docker Engine

# 添加 Docker 官方 GPG key
sudo apt-get update
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# 添加仓库
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
  https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin

# 将当前用户加入 docker 组
sudo usermod -aG docker $USER
newgrp docker

# 验证
docker run hello-world

2.2 安装 NVIDIA Container Toolkit(可选,用于本地模型)

# 添加仓库
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
  sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg

curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
  sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

# 安装
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

# 配置 Docker 运行时
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

# 验证 GPU 直通
docker run --rm --gpus all nvidia/cuda:12.3.1-base-ubuntu22.04 nvidia-smi

2.3 创建项目目录结构

sudo mkdir -p /data/astrbot/data
sudo mkdir -p /data/astrbot/logs
sudo mkdir -p /data/nginx/conf.d
sudo mkdir -p /data/nginx/certs
sudo mkdir -p /data/ollama
sudo chown -R $USER:$USER /data

第三阶段:部署 AstrBot

3.1 使用 Docker Compose 部署

创建 docker-compose.yml

mkdir -p ~/astrbot && cd ~/astrbot
# ~/astrbot/docker-compose.yml
services:
  astrbot:
    image: soulter/astrbot:latest
    container_name: astrbot
    restart: unless-stopped
    ports:
      - "6185:6185"   # WebUI 管理面板
      - "6199:6199"   # ChatUI
    volumes:
      - /data/astrbot/data:/AstrBot/data
      - /etc/localtime:/etc/localtime:ro
    environment:
      - TZ=Asia/Shanghai
    networks:
      - astrbot-net

  # 可选:本地 LLM 推理
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    volumes:
      - /data/ollama:/root/.ollama
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    networks:
      - astrbot-net

  # Nginx 反向代理(用于企业微信回调)
  nginx:
    image: nginx:alpine
    container_name: nginx
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /data/nginx/conf.d:/etc/nginx/conf.d
      - /data/nginx/certs:/etc/nginx/certs
    depends_on:
      - astrbot
    networks:
      - astrbot-net

networks:
  astrbot-net:
    driver: bridge

方案一用户注意: 如果你在 Windows + Docker Desktop 环境下,上述 compose 文件同样适用,只需将卷挂载路径改为 Windows 路径格式,例如 D:/data/astrbot/data:/AstrBot/data

3.2 Nginx 反向代理配置

企业微信回调需要公网可达的 HTTPS 地址。Nginx 在这里充当反向代理,将外部请求转发给 AstrBot。

# /data/nginx/conf.d/astrbot.conf
server {
    listen 80;
    server_name your-domain.com;  # 替换为你的域名

    # 用于 Let's Encrypt 证书验证
    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://$server_name$request_uri;
    }
}

server {
    listen 443 ssl;
    server_name your-domain.com;

    ssl_certificate /etc/nginx/certs/fullchain.pem;
    ssl_certificate_key /etc/nginx/certs/privkey.pem;

    # AstrBot 统一 Webhook 回调
    location / {
        proxy_pass http://astrbot:6185;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

3.3 启动服务

cd ~/astrbot
docker compose up -d

# 查看日志
docker compose logs -f astrbot

如果一切顺利,你会看到:

🌈 管理面板已启动,可访问 http://0.0.0.0:6185

在浏览器中访问 http://192.168.1.100:6185,使用默认账号 astrbot / astrbot 登录。

第一件事:请立即修改默认密码!

第四阶段:接入企业微信

这是整个方案最关键的一步——让你能在微信里直接与 AI Agent 对话。AstrBot 支持两种企业微信接入方式,推荐使用”微信客服”方式,因为它可以直接在微信中使用,无需切换到企业微信 App。

4.1 前置准备:公网访问

你的台式机在家庭内网中,而企业微信回调需要公网可达的地址。有几种解决方案:

方案成本稳定性推荐场景
DDNS + 端口转发免费依赖运营商有公网 IP
内网穿透 (frp/Cloudflare Tunnel)免费~低无公网 IP ⭐
云服务器反代~99 元/年最高追求稳定

推荐 Cloudflare Tunnel(免费且稳定):

# 安装 cloudflared
curl -L --output cloudflared.deb \
  https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb

# 认证(需要 Cloudflare 账号和域名)
cloudflared tunnel login

# 创建隧道
cloudflared tunnel create astrbot

# 配置隧道
cat > ~/.cloudflared/config.yml << EOF
tunnel: <TUNNEL_ID>
credentials-file: /home/$USER/.cloudflared/<TUNNEL_ID>.json

ingress:
  - hostname: astrbot.your-domain.com
    service: http://localhost:6185
  - service: http_status:404
EOF

# 配置 DNS
cloudflared tunnel route dns astrbot astrbot.your-domain.com

# 启动并设置开机自启
sudo cloudflared service install
sudo systemctl start cloudflared

4.2 接入方式一:微信客服(推荐)

这种方式让普通微信用户也能使用你的 AI Agent,无需加入企业微信。

步骤:

  1. 注册企业微信 → 获取 企业 ID (Corpid)

  2. 创建微信客服

    • 进入 微信客服后台 → 企业微信扫码登录
    • “客服账号” → 创建一个客服,记下名称
  3. 配置 AstrBot

    • 登录 AstrBot 管理面板 → 左边栏”机器人” → “+创建机器人” → 选择 wecom
    • 填入 corpid
  4. 回调服务器配置

    • 在微信客服后台 → “开发配置” → 点击”开始使用”(或”修改”)
    • 随机生成 TokenEncodingAESKey,填入 AstrBot 配置
    • 保持 统一 Webhook 模式 开启
    • 保存 AstrBot 配置 → 获取自动生成的回调 URL → 填入微信客服后台
    • 点击”完成”验证
  5. 获取 Secret

    • 在”开发配置”中找到 Secret → 填入 AstrBot → 保存
  6. 扫码激活

    • 在 AstrBot 控制台找到客服链接 → 微信扫码 → 即可开始对话

4.3 接入方式二:企业微信应用

适合团队内部使用,消息在企业微信 App 或微信中的”工作台”里收发。

步骤:

  1. 进入 企业微信应用管理
  2. “自建应用” → “创建应用” → 设置名称、头像、可见范围
  3. 进入应用 → 获取 Secret
  4. “接收消息” → “设置 API 接收” → 随机生成 Token、EncodingAESKey
  5. 在 AstrBot 中创建 wecom 机器人 → 填入 corpid、secret、token、encoding_aes_key
  6. 保存 AstrBot 配置 → 获取回调 URL → 填入企业微信
  7. 配置企业可信 IP(你的公网 IP)
  8. 在企业微信工作台发送 /help 测试

第五阶段:配置 LLM 模型服务

AstrBot 部署好后,需要连接一个 LLM 大模型才能真正”智能”起来。

5.1 方案 A:使用云端 API(推荐起步)

在 AstrBot 管理面板中,进入 “大模型” 配置页,添加一个 LLM 服务提供商:

提供商推荐模型优势
DeepSeekdeepseek-chat性价比极高,中文优秀
OpenAIgpt-4o-mini综合能力强
Anthropicclaude-3-haiku代码能力突出
智谱 AIglm-4-flash国内直连,免费额度

只需填入 API Key 和选择模型即可,几分钟搞定。

5.2 方案 B:本地模型推理(进阶)

有了 Quadro P2000 (5GB VRAM),可以跑一些小型但实用的模型:

# 拉取并运行适合 5GB 显存的模型
docker exec -it ollama ollama pull qwen2.5:3b

# 测试
docker exec -it ollama ollama run qwen2.5:3b "你好,请介绍一下你自己"

然后在 AstrBot 中配置 Ollama:

  • API 地址:http://ollama:11434(Docker 内部网络)
  • 模型:qwen2.5:3b

注意: 5GB 显存只能跑 3B 左右的量化模型。对于需要强推理能力的场景,建议云端 API + 本地小模型混合使用——轻量查询走本地,复杂任务走云端。

6.1 为什么要远程管理?

作为一台 7×24 小时运行的服务器,它绝大多数时间是”无头”(Headless)运行的(不接显示器和键鼠)。但我们需要随时:

  • 调试代码、查看运行日志
  • 像操作本地电脑一样操作它(图形界面)
  • 在外网也能安全访问

6.2 推荐方案:Tailscale + Sunshine

详细的远程管理方案对比和配置步骤篇幅较长,我将其单独整理为一篇文章:

👉 AstrBot 部署番外篇:打造最强远程管理方案 (Tailscale + Sunshine)

核心思路总结:

  1. 基础设施层 (Networking):使用 Tailscale 组建虚拟局域网。
    • 无需公网 IP,P2P 直连,端到端加密。
    • 手机、电脑、服务器全部安装 Tailscale,即可互访。
  2. 控制层 (Control):使用 Sunshine + Moonlight
    • Sunshine Foundation:安装在服务器上的开源串流服务(qiin2333 维护版,内置虚拟显示器)。
    • Moonlight V+:安装在客户端的高性能播放器。
    • 利用 P2000 显卡硬件编码,实现 4K 60fps+ 的超低延迟远程体验。

当然,如果你只是需要简单的命令行管理,系统自带的 SSH 足矣;如果你更习惯傻瓜式的操作,UU 远程 也是不错的备选。

详细配置请移步上述链接查看。

第七阶段:稳定性保障

7.1 自动重启与健康检查

Docker Compose 已经配置了 restart: unless-stopped。额外添加健康检查:

# 在 docker-compose.yml 的 astrbot 服务中添加
healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost:6185"]
  interval: 30s
  timeout: 10s
  retries: 3
  start_period: 30s

7.2 自动更新

# 创建更新脚本
cat > /data/scripts/update-astrbot.sh << 'EOF'
#!/bin/bash
cd ~/astrbot
docker compose pull
docker compose up -d
docker image prune -f
echo "$(date): AstrBot updated" >> /data/astrbot/logs/update.log
EOF

chmod +x /data/scripts/update-astrbot.sh

# 设置每周自动更新(周日凌晨 3 点)
(crontab -l 2>/dev/null; echo "0 3 * * 0 /data/scripts/update-astrbot.sh") | crontab -

7.3 数据备份

# 创建备份脚本
cat > /data/scripts/backup.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/data/backups/$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/astrbot-data.tar.gz" /data/astrbot/data
# 只保留最近 7 天的备份
find /data/backups -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;
echo "$(date): Backup completed to $BACKUP_DIR" >> /data/astrbot/logs/backup.log
EOF

chmod +x /data/scripts/backup.sh

# 设置每日自动备份(凌晨 2 点)
(crontab -l 2>/dev/null; echo "0 2 * * * /data/scripts/backup.sh") | crontab -

7.4 UPS 断电保护(推荐)

650W 电源搭配一个 APC BK650M2-CH 之类的 UPS,可以在断电时自动安全关机:

sudo apt install -y apcupsd
# 配置 /etc/apcupsd/apcupsd.conf 中的关机策略

整体架构回顾

┌─────────────────────────────────────────────────┐
│                 你的手机 (微信)                    │
│                      │                           │
│           ┌──────────▼──────────┐                │
│           │    企业微信 / 客服    │                │
│           └──────────┬──────────┘                │
│                      │ Webhook 回调              │
├──────────────────────┼──────────────────────────┤
│ 公网层               │                           │
│           ┌──────────▼──────────┐                │
│           │  Cloudflare Tunnel  │                │
│           └──────────┬──────────┘                │
├──────────────────────┼──────────────────────────┤
│ 台式机 (Ubuntu)      │                           │
│           ┌──────────▼──────────┐                │
│           │   Nginx (反向代理)   │                │
│           └──────────┬──────────┘                │
│                      │                           │
│           ┌──────────▼──────────┐                │
│           │     AstrBot 🤖      │                │
│           │  ├── WebUI (:6185)  │                │
│           │  ├── ChatUI (:6199) │                │
│           │  └── 插件生态        │                │
│           └──────────┬──────────┘                │
│                      │                           │
│      ┌───────────────┼───────────────┐           │
│      ▼               ▼               ▼           │
│ ┌─────────┐   ┌───────────┐   ┌─────────┐       │
│ │ 云端 API │   │  Ollama   │   │   其他   │       │
│ │ (远程)   │   │  (本地)   │   │  插件    │       │
│ └─────────┘   └───────────┘   └─────────┘       │
└─────────────────────────────────────────────────┘

开发环境的额外配置

既然这台机器也是开发机,还可以做些额外配置:

# 安装 Python 开发环境(AstrBot 插件开发)
sudo apt install -y python3-pip python3-venv
pip install uv

# 安装 Node.js(如果需要前端开发)
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs

# 安装 VS Code Server(通过浏览器编码)
curl -fsSL https://code-server.dev/install.sh | sh
sudo systemctl enable --now code-server@$USER

最终检查清单

  • Ubuntu Server 安装完成,静态 IP 配置
  • Docker + Docker Compose 正常运行
  • NVIDIA 驱动安装(nvidia-smi 输出正常)
  • AstrBot 容器启动,WebUI 可访问
  • LLM 配置完成(云端 API 或本地 Ollama)
  • 企业微信接入,微信中可正常对话
  • Cloudflare Tunnel(或其他穿透)配置完成
  • SSH 远程可连接
  • 自动备份和更新脚本已部署
  • 防火墙规则已配置

写在最后

整个部署过程,从系统安装到微信里跑出第一条 AI 回复,大约需要 2~3 小时。之后你就拥有了一个:

  • 私有的 AI Agent,数据完全在自己手里
  • 随时可达的 助手,在微信里发条消息就能用
  • 可扩展的 平台,800+ 插件随时安装
  • 可远程管理的 服务器,不必守在机器旁

一台闲置台式机的重生之路,到此完成。🎉