为什么要做这件事?
你是否也有一台配置还不错、但吃灰已久的台式机?与其让它积灰,不如把它变成一个私有 AI Agent 服务器——一个 7×24 小时待命的个人 AI 助手,随时通过微信就能下达指令。
这正是本文要做的事:基于 AstrBot,在一台闲置 Windows 台式机上搭建一套完整的 AI Agent 开发和生产系统。它需要满足以下目标:
- 私有部署:数据不出本地网络,安全可控
- 微信触达:借助企业微信的能力,在微信中直接与 AI 对话、下达指令
- 远程管理:必要时可远程桌面操作,不必人在机器旁
- 开发友好:既是生产环境,也是开发调试的场所
硬件盘点与能力评估
先来看看手里这台机器的家底:
| 组件 | 型号 | 关键参数 |
|---|---|---|
| CPU | Intel i7-12700F | 12 核 20 线程,P-core 4.9GHz |
| 内存 | Corsair DDR4 3200 | 2×16GB = 32GB |
| GPU | NVIDIA Quadro P2000 | 5GB GDDR5, CUDA 1024 核 |
| 系统盘 | Samsung 970 EVO Plus | 500GB NVMe SSD |
| 数据盘 | WD Blue 1TB | 7200 RPM HDD |
| 主板 | MSI MAG B660M Mortar WiFi DDR4 | WiFi 6, 2.5G LAN |
| 散热 | COOLER MASTER ML240 V2 ARGB | 240mm AIO 水冷 |
| 电源 | Antec HCG 650W | 80+ Gold 全模组 |
| 显示器 | Acer XV271U M | 2K 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 原生支持(性能最好) 缺点: 没有本地图形界面(但有远程桌面解决方案)
我的选择
方案三。理由很简单:
- 这台机器的定位是 服务器,不是日常办公电脑
- Ubuntu Server 的 Docker 性能显著优于 WSL2,无额外内存开销
- 远程桌面需求可通过 SSH + Web 管理面板完美解决
- NVIDIA GPU 驱动在 Ubuntu 上非常成熟,Docker GPU 直通配置简单
如果你确实需要偶尔用 Windows,方案二也是不错的选择。下面的部署流程以方案三为主线,关键步骤会标注方案一的差异。
第一阶段:系统安装与基础配置
1.1 安装 Ubuntu Server 24.04 LTS
从 Ubuntu 官网 下载镜像,用 Rufus 制作启动 U 盘。
磁盘分区建议:
| 磁盘 | 挂载点 | 大小 | 用途 |
|---|---|---|---|
| NVMe SSD | / | 100GB | 系统、Docker 引擎 |
| NVMe SSD | /var/lib/docker | 350GB | Docker 数据 |
| NVMe SSD | swap | 16GB | 交换分区 |
| 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,无需加入企业微信。
步骤:
-
注册企业微信 → 获取 企业 ID (Corpid)
- 进入 企业微信管理后台 → “我的企业” → 复制企业 ID
-
创建微信客服
- 进入 微信客服后台 → 企业微信扫码登录
- “客服账号” → 创建一个客服,记下名称
-
配置 AstrBot
- 登录 AstrBot 管理面板 → 左边栏”机器人” → “+创建机器人” → 选择
wecom - 填入 corpid
- 登录 AstrBot 管理面板 → 左边栏”机器人” → “+创建机器人” → 选择
-
回调服务器配置
- 在微信客服后台 → “开发配置” → 点击”开始使用”(或”修改”)
- 随机生成 Token 和 EncodingAESKey,填入 AstrBot 配置
- 保持 统一 Webhook 模式 开启
- 保存 AstrBot 配置 → 获取自动生成的回调 URL → 填入微信客服后台
- 点击”完成”验证
-
获取 Secret
- 在”开发配置”中找到 Secret → 填入 AstrBot → 保存
-
扫码激活
- 在 AstrBot 控制台找到客服链接 → 微信扫码 → 即可开始对话
4.3 接入方式二:企业微信应用
适合团队内部使用,消息在企业微信 App 或微信中的”工作台”里收发。
步骤:
- 进入 企业微信应用管理
- “自建应用” → “创建应用” → 设置名称、头像、可见范围
- 进入应用 → 获取 Secret
- “接收消息” → “设置 API 接收” → 随机生成 Token、EncodingAESKey
- 在 AstrBot 中创建
wecom机器人 → 填入 corpid、secret、token、encoding_aes_key - 保存 AstrBot 配置 → 获取回调 URL → 填入企业微信
- 配置企业可信 IP(你的公网 IP)
- 在企业微信工作台发送
/help测试
第五阶段:配置 LLM 模型服务
AstrBot 部署好后,需要连接一个 LLM 大模型才能真正”智能”起来。
5.1 方案 A:使用云端 API(推荐起步)
在 AstrBot 管理面板中,进入 “大模型” 配置页,添加一个 LLM 服务提供商:
| 提供商 | 推荐模型 | 优势 |
|---|---|---|
| DeepSeek | deepseek-chat | 性价比极高,中文优秀 |
| OpenAI | gpt-4o-mini | 综合能力强 |
| Anthropic | claude-3-haiku | 代码能力突出 |
| 智谱 AI | glm-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)
核心思路总结:
- 基础设施层 (Networking):使用 Tailscale 组建虚拟局域网。
- 无需公网 IP,P2P 直连,端到端加密。
- 手机、电脑、服务器全部安装 Tailscale,即可互访。
- 控制层 (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+ 插件随时安装
- 可远程管理的 服务器,不必守在机器旁
一台闲置台式机的重生之路,到此完成。🎉