
AstrBot 这个名字最近在折腾聊天机器人的圈子里出现频率越来越高。它本质上是一个开源的聊天机器人管理框架能把 QQ、微信、Telegram 等多个 IM 平台的消息收进同一个管道再对接你选好的大模型 API让机器人真正拥有“大脑”。对我来说它最吸引人的地方是插件系统——你不碰核心代码就能给它装上天气查询、图片生成、群管理等各种技能。今天这篇教程我专门讲怎么把 AstrBot 放到云服务器上跑全程保姆级从选服务器到接 QQ、配模型、装插件一步不落。我强烈推荐云上搭建原因很简单本机跑一个确实能满足尝鲜但电脑一关机群友就找不到机器人了放到云服务器上之后机器人 7x24 小时在线哪怕你在睡觉、出差、路由器断电它都照常干活。这篇内容适合零基础小白也适合已经本地跑过但想迁移到云上的朋友。我会把每一步拆开讲清楚包括配置参数为什么这么填、哪些地方容易踩坑以及我实际试过之后觉得最省心的方案。1. 从零认识 AstrBot弄懂这几个基础概念再动手1.1 它解决的核心问题多平台消息收发的“中转站”在做机器人这件事上最烦人的不是写对话逻辑而是对接每个聊天平台。QQ 一套接口、Telegram 一套接口、Discord 又一套每个平台的认证方式、消息格式、限流策略全不一样。如果每个平台单独写一套代码光维护就够喝一壶的。AstrBot 的思路是做了一层抽象它不直接处理平台差异而是通过“平台连接器”把所有平台的统一消息格式转换为我们真正关心的“用户说了什么、群是谁、要不要回复”。你可以把它理解成一个公司前台。任何一个客户从哪扇门进来不重要前台会统一登记来访信息再转给对应的业务部门。AstrBot 就是这个前台不同 IM 平台就是不同的门微信、QQ、Telegram 的消息到了这里都会变成一套标准格式。作为副业/个人项目这个设计最直接的好处是你只需要学会写一套逻辑就能让机器人在所有聊天群里同时营业不需要重复造轮子。1.2 模型适配层机器人“大脑”的可插拔设计AstrBot 没有绑定某一个固定的大模型而是做了一个可插拔的模型适配层。你在后台可以同时配置多个模型服务商比如 OpenAI 系、DeepSeek、通义千问、智谱 GLM 等等再设置哪个作为默认主力、哪个作为备用。日常用默认模型回复遇到限流或者超时报错机器人可以自动切换到备用模型不让群聊出现“机器人已下线”的尴尬。实际使用上这个设计很贴心。我身边不少朋友把主模型配成一个效果较好但价格稍贵的备用模型配成便宜快速的流量高峰时不至于把成本拉爆。而且因为模型接口基本都是 OpenAI 兼容格式很多服务商填个 Base URL 和 Key 就能用AstrBot 这边压根不需要为每个模型单独开发适配逻辑。1.3 插件系统让机器人从“会聊天”到“会干活”插件的机制有点类似手机里的应用商店核心是 AstrBot 项目里的 plugins 目录。每个插件就是一个独立的功能模块放在指定位置后主程序会扫描并加载它。只要接口符合规范插件可以做任何事查天气、搜新闻、解析表情包、生成图片、定时提醒、群管踢人……加新功能不用重启整个服务也不影响主线对话能力。我最早入坑就是看中了这套插件机制。前几天还在用别人写好的插件后脚自己动手写了个“每日睡前语录”从写代码到加载成功不到十分钟。这种低成本试错带来的满足感是其他很多框架给不了的。如果你只想搭好直接用完全可以在插件市场里挑现成的这篇后面我会专门讲怎么装、怎么挑。1.4 本地跑 vs 云上跑我的真实对比我知道不少教程都是教你在本机跑也很稳但从长期使用角度云服务器和本地跑的差距还是很明显的。我整理过一个对比表供你参考对比项本地电脑/树莓派云服务器可用性停电、关机、断网就下线持续在线基本不断连外网连接需要公网 IP 或内网穿透配置麻烦天然公网可达成本用的是闲置设备看似免费每月几十到上百元维护难度系统环境自己搞出问题要跑现场随时 SSH 登录重装/迁移更方便适合场景临时体验、开发调试个人长期使用、群管机器人上线这里我想多说一句如果你只是出于好奇想本地折腾一下那完全没问题。但如果你打算让机器人真正陪伴一个群、承接日常问答云服务器几乎是绕不开的选择。这篇教程后面的所有内容都以云服务器为准但我也会在章节 3.4 里补充源码运行的备选方案方便你在自己电脑上先做验证。2. 部署前准备服务器选型与环境初始化2.1 云服务器配置怎么选别花冤枉钱很多第一次买服务器的人容易走两个极端要么图便宜买最低配结果三天两头卡死要么一口气上高配结果 CPU 使用率常年个位数。AstrBot 本身对资源要求并不高真正的瓶颈取决于你同时接入多少个平台、跑多少个插件、有没有图片处理这类重负载任务。我给出一套比较实在的选择建议使用场景推荐配置带宽一句话说明个人小群、轻量使用1 核 2G3~5 Mbps够用但别同时上太多重量级插件多群、常态化问答2 核 4G5 Mbps大多数个人项目的“甜点”配置大量图片/语音处理4 核 8G10 Mbps 以上预处理和并发请求更从容企业级/社群运营4 核 8G 起步按需扩展预留负载余量避免高峰崩溃关于云服务商各家主流的都可以新用户通常有优惠买之前多留意活动就好。地域选择建议靠近你目标用户群国内用户日常使用就选国内区域响应速度更稳妥。系统镜像我强烈推荐 Ubuntu 22.04 LTS稳定、资料多、踩坑时随便搜都能找到答案这一点在后面配置 Docker 时会更省心。2.2 系统基础更新与 SSH 登录服务器拿到手第一件事是用 SSH 登录。Windows 用户可以在 PowerShell 里直接执行ssh root服务器IPMac/Linux 用户用自带终端。登录后先做系统更新sudo apt update sudo apt upgrade -y这一步可以用来解决系统仓库源漂移的问题也能让后续安装的软件包版本更一致。另外建议顺手装几个基础工具虽然不一定都用上但真正需要时不用临时找sudo apt install -y curl vim git zip unzip我一般还会把时区调整成国内时区方便看日志的时候不用再心算时间差sudo timedatectl set-timezone Asia/Shanghai这些操作很简单但属于“开了好头”的环节。后面容器跑起来之后你回来看日志一眼就能对上消息时间排查问题会顺畅很多。2.3 Docker 与 compose 插件安装Docker 是整个部署的核心它能让 AstrBot 运行在一个隔离的容器里系统环境怎么折腾都不怕。安装命令如下sudo apt install -y docker.io docker-compose-v2 sudo systemctl enable --now docker sudo docker --version如果你买的是 CentOS / 其他发行版也可以去 Docker 官网用一键安装脚本但我还是推荐 Ubuntu 官方仓库方案依赖冲突的概率低一些。装完之后检查一下 docker 服务有没有跑起来用下面命令sudo systemctl status docker --no-pager看到 active (running) 就是成功。另外注意 docker 命令默认需要 root 权限我为了操作方便通常会把自己的用户加入 docker 组sudo usermod -aG docker $USER重新登录一次之后就能直接用 docker 命令不用每次敲 sudo。这一步顺手做掉后面命令会清爽很多。2.4 安全组与防火墙被卡次数最多的一关这是我踩过最深的坑。很多新手配置完容器发现 Web 管理界面打不开第一反应是容器出了问题查半天日志啥也没有最后才意识到是云控制台的“安全组”里没有放行端口。不同服务商叫法可能略有不同比如“防火墙规则”“安全组”“入站规则”但逻辑都是类似的你要明确告诉云平台允许外网访问某个端口。AstrBot 的 Web 管理后台默认端口是6199在安全组里需要添加入站规则协议端口范围来源用途TCP61990.0.0.0/0允许访问 AstrBot WebUITCP30010.0.0.0/0示例NapCat 或协议的 WS 服务端口TCP22你的 IPSSH 登录建议限制来源同时系统自带的 ufw 防火墙如果默认开启也要放行sudo ufw allow 6199/tcp sudo ufw allow 3001/tcp sudo ufw status这里要提醒你一句安全组和 ufw 是两个不同层面的东西一个在云平台控制台一个在系统内部两个都放行才保险。至于来源 IP如果只有你自己用管理界面改成你自己的公网 IP 会更安全但考虑到微信、QQ 机器人回调也可能访问这些端口很多场景下 0.0.0.0/0 反而是常态这点你按实际情况权衡。3. 实操把 AstrBot 用 Docker 跑起来3.1 规划目录别把所有文件堆在根目录如果你看过一些教程会发现有人直接把容器挂在 root 下跑起来是没问题但后面想备份、想迁移就会发现文件和容器数据混在一起难以收拾。我的习惯是建一个统一的家目录mkdir -p ~/astrbot/{data,config,logs,plugins} cd ~/astrbot解释一下这几个目录的作用data存放持久化数据比如聊天记录、用户配置项。configAstrBot 的配置文件后续修改模型、平台都在这边。logs运行日志排查问题全靠它。plugins你要安装的第三方插件就放这里。这种结构最大的好处是容器以后即使删了、重装了只要这几个目录还在机器人就能原地复活。数据不随容器丢失是 Docker 使用里最重要的习惯之一。3.2 编写 docker-compose.yml进入~/astrbot后创建一个docker-compose.yml文件cd ~/astrbot vim docker-compose.yml我提供一个可以直接用的版本如果你用的是新版 Docker Composeversion 字段可以省略services: astrbot: image: soulter/astrbot:latest container_name: astrbot ports: - 6199:6199 volumes: - ./data:/AstrBot/data - ./config:/AstrBot/config - ./logs:/AstrBot/logs - ./plugins:/AstrBot/plugins restart: unless-stopped这里几个参数我说明一下。ports把容器的 6199 端口映射到服务器同端口这样你访问http://服务器IP:6199就能进入管理界面。volumes则是把宿主机目录绑定到容器内目录实现配置和数据的持久化。restart: unless-stopped表示容器意外退出时自动拉起这是云上 7x24 在线的重要保障之一。镜像名和内部路径如果遇到版本升级以官方文档最新说明为准。但上面的结构是通用的只要版本不是特别老旧基本都能跑。如果网络不佳拉取镜像超时可以多试几次或者使用镜像加速配置国内通常会用一些公开加速源。3.3 启动容器、查看日志与更新启动命令特别简单cd ~/astrbot docker compose up -d-d表示后台运行。启动后先看容器状态docker ps看到astrbot的状态是 Up 就行。接着看启动日志docker logs -f astrbot首次启动通常会输出一些初始化信息等出现类似AstrBot started的日志就可以打开浏览器访问http://服务器IP:6199。如果页面能正常加载说明部署已经完成大半。后续更新镜像也很方便docker compose pull docker compose up -d容器会自动基于新镜像重建但挂载的数据目录仍然保留已配置好的平台和模型不会丢。这是 Docker 部署最舒服的一点升级成本极低回滚也容易把旧镜像 tag 再跑回来即可。3.4 想要折腾源码这一条路也给你备好Docker 适合稳定运行但如果你是开发者想改框架源码、调试插件源码部署更直接。流程也不复杂git clone https://github.com/soulter/AstrBot.git cd AstrBot python -m venv venv source venv/bin/activate pip install -r requirements.txt python main.py这里用虚拟环境把依赖隔离在项目内部避免污染系统 Python。首次启动需要等待依赖安装完成之后可以修改源码配合 IDE 断点调试能看清每一层逻辑。我自己是在 Docker 正式跑另开一台本地环境专门做源码分析和插件测试两不误。我建议初学者先 Docker 跑通等有需求再切源码。Docker 方案屏蔽了太多环境问题能让你更快地进入“配置和使用”阶段源码方案则是进阶利器等你想深入理解框架时再切换不迟。4. 打通任督二脉接入 QQ 和大模型 API4.1 先搞清楚AstrBot 和 QQ 之间还隔着一层“协议端”很多新手会误以为 AstrBot 直接连接 QQ 服务器其实不是。QQ 等平台对第三方机器人有复杂的协议限制普遍做法是通过一个协议端项目先把 QQ 的消息收下来再转成通用的 OneBot 协议最后由 AstrBot 接收处理。打个比方AstrBot 是公司协议端是快递员快递员负责收发真实世界的包裹QQ 消息公司只负责处理包裹内部的内容。市面上常用的方案有好几种比较常见的是 NapCat一个基于 OneBot 协议的 QQ 协议端实现。你不需要深入研究它的实现原理只需知道它要单独部署运行登录一个 QQ 账号并对外暴露一个 WebSocket 或 HTTP 服务AstrBot 通过这个服务进行对接。部署好协议端这一步QQ 机器人就已经完成了 70% 的硬连接工作。4.2 部署 NapCat 并拿到连接信息NapCat 的部署方式有很多包括 Docker、安装脚本等而且版本迭代快具体命令建议以官方仓库最新 README 为准。这里我说清楚通用步骤你自己对着官方文档操作时就不会迷路在服务器上给 NapCat 准备一个运行环境Node 运行时或直接用官方容器镜像。启动 NapCat使用手机扫码或账号密码登录一个专用 QQ 号不要用自己主号风险太大。开启 OneBot 服务建议开启 WebSocket 服务端模式记下它输出的地址和端口例如ws://127.0.0.1:3001以及你想要设置的连接 token。确认这个端口在服务器安全组和 ufw 中已经放行上一章我们已经做过了。回到 AstrBot 的 WebUI在“平台配置”里添加 QQ 平台选择对应的连接器类型比如 NapCat / OneBot V11服务器地址填ws://127.0.0.1:3001或协议端实际地址token 填你设置的 token。保存后如果状态显示在线QQ 这台“快递车”就算正式接通了。这里最关键的一点是AstrBot 和 NapCat 如果在同一台服务器上地址可以直接写127.0.0.1如果它们分别在两台机器上就要写协议端所在机器的公网 IP 或内网地址并且确保中间网络通畅。我用容器部署时更习惯让两者在同一 network 下这样配置最简单也少一层外网暴露。4.3 配置一个大模型 API以 DeepSeek 为例平台接好了接下来就是给机器人装大脑。打开 AstrBot 的 WebUI找到“模型提供商”或“模型配置”入口这里可以配置多个服务商。我以 DeepSeek 作为例子因为国内访问稳定、价格实惠对大多数个人项目非常友好。配置项示例值说明名称DeepSeek只是给这个配置起个好认的名字Providerdeepseek选择已内置的服务商类型API Keysk-xxxxxx在官网生成的密钥API Basehttps://api.deepseek.com接口地址按服务商文档填写模型名deepseek-chat必须和服务商提供的模型 ID 完全一致填完之后保存然后在 WebUI 的对话测试页面发一条消息试试能收到回复就说明配置没问题。如果你用的是 OpenAI 或兼容接口的服务逻辑完全一样只是把 Base URL 和模型名换成对应的值。我实测下来这类兼容格式的接口接入几乎没有门槛关键是 API Key 不要填错、模型名不要臆造以服务商官网列出的为准。4.4 多模型与备用策略别让机器人在关键时刻掉链子模型服务偶尔会限流尤其晚高峰时段回复超时报错很常见。为了避免群友喊了半天没人理我建议至少配两个模型一个主模型一个备用模型。主模型用对话效果更好的备用模型用稳定、便宜的。AstrBot 在请求主模型失败时一般会自动尝试备用模型具体行为视版本而定这能让机器人在我“睡觉期间”也维持较高的可用性。设置时注意不要把所有模型都配置成同一个厂商的同一个接口否则限流时备用模型同样会被卡住。更好的组合是不同厂商比如主力 OpenAI 系、备用 DeepSeek 或智谱 GLM。这样即使一个厂商全站出问题另一个还能顶着。4.5 端到端测试从群里发一句话开始配置完成后别急着加插件先在真实场景里测一轮。找一个小号在群里 你的机器人或者直接私聊它发一句“你好”观察三点机器人有没有在群里出现“已读”或“输入中”的状态确认消息已经到达。后台日志里有没有收到消息的输入记录确认 AstrBot 收到了数据。它回的内容是否来自你配置的大模型确认推理链路完整。如果第 1 步就卡住问题多半在协议端连接第 2 步卡住检查 WebSocket 地址和 token第 3 步卡住则基本是模型配置或 API 权限问题。把整个链路按这三段拆开排查远比来回改配置有效率。5. 进阶玩法插件系统和自定义技能5.1 安装第三方插件的两种方式插件可能是 AstrBot 最让人上头的部分。安装方式一般有两种。第一种WebUI 内的插件市场。打开管理界面找到插件板块浏览并通过一键安装。这种最省心插件会放到容器内的 plugins 目录并自动生效通常不需要重启。适合完全不想碰命令行的朋友。第二种手动放置。在服务器上把下载好的插件压缩包解压放到~/astrbot/plugins目录下然后在 WebUI 或通过重启容器让框架扫描加载unzip plugin.zip -d ~/astrbot/plugins/ docker restart astrbot每次加插件前我看会先确认插件支持的 AstrBot 版本因为有些插件年久失修在最新版本下会报兼容性错误。手动安装时我会顺手看下插件目录里有没有 requirements.txt有的话需要进入容器内安装或者要求插件作者提供 Dockerfile 安装说明否则会遇到 python 依赖缺失。5.2 自定义插件开发从一 个“查天气”的小功能说起AstrBot 的插件开发样式会随版本迭代变化我建议以当前版本的插件开发文档为准。这里我写一个伪代码结构的示例帮你建立初步认知from astrbot.core import BasePlugin class WeatherPlugin(BasePlugin): name weather description 查询天气 def on_message(self, message): if message.content.startswith(天气): city message.content.split( , 1)[-1] result self.fetch_weather(city) return f{city} 当前天气{result} def fetch_weather(self, city): # 调用天气 API具体接口自行选择 return 晴25℃实际上你需要先注册插件类、再定义指令和方法但整体心智模型就是框架把标准化的消息对象传给你你判断命令、做处理、返回字符串或者图片、特殊消息然后框架负责把回复发回对应的 IM 平台。开发插件最爽的一点是不需要关心消息怎么发到 QQ 的、认证怎么做那些都在框架层完成了。5.3 哪几个插件值得优先装我按“投入产出比”推荐一批群管理类实现签到、查群成员、定时发言适合社群运营。天气类输地名出天气数据简单直接适合入门理解插件分发逻辑。图片生成类接入 AI 绘画接口在群里直接出图视觉冲击力强。翻译类中英文互译实用性高。定时任务类早安晚安心语、每周例会提醒。选插件的时候不要贪多装得越多出错面越大。我先空载跑了一周确认主功能全稳定才开始逐步加技能。插件装多了之后代码冲突、接口限流都会被放大合理的节奏是“先核心后锦上添花”。6. 高频踩坑记录与排查速查表6.1 容器起不来日志疯狂报错最常见的几个原因端口被占用、镜像拉不下来、docker-compose 文件格式缩进错误。处理顺序建议固定下来docker ps -a docker logs astrbot --tail 100 sudo lsof -i:6199先看容器是否在运行如果显示 Exited看末尾日志定位。看到Address already in use说明端口被别的进程占用直接把那个进程停掉或者换端口映射。看到yaml: line ...说明 compose 文件的缩进写坏了重新对照上面模板改。镜像拉取失败优先试镜像加速源再考虑多拉几次。6.2 WebUI 打不开的排查清单页面打不开是排第一的入门问题。我提供一个清单按顺序查浏览器地址是否正确有没漏了http://前缀。云控制台安全组有没有放行 6199 端口。系统防火墙 ufw 有没有放行。容器是否真的映射了端口用docker port astrbot查看。服务是否监听在所有网卡还是只监听了127.0.0.1。最后一点容易忽略如果容器启动命令里端口绑定写成了127.0.0.1:6199:6199那就只有本机能访问外网打不开。统一写成0.0.0.0:6199:6199或直接用模板即可。6.3 机器人不回复消息到底卡在哪一段这个问题用 4.1 提到的三层结构看最清楚。先看协议端的日志有没有收到 QQ 消息再看 AstrBot 日志有没有收到来自协议端的消息最后看模型提供商日志有没有请求发出。这样分段 log很快就能锁定问题在哪一层。协议端没收到消息多半是账号被风控或连接未建立AstrBot 收到了但没回复多半是插件或模型配置的问题模型报了异常则看返回码。6.4 模型 API 报错速查表返回现象常见原因处理办法401 UnauthorizedAPI Key 填错、过期重新复制注意别带多余空格402 / 欠费账户余额不足充钱或换 Key429 Too Many Requests触发限流等多一下或切换备用模型model not found模型 ID 写错对照官网模型列表复制完整名称Connection timeout接口地址不通确认 Base URL 是否写对、网络是否可达返回乱码上下文长度超限换更长的模型或裁剪历史消息我见过最多的就是 Key 复制多了换行符这种错误用肉眼几乎看不出来建议粘贴后打印一下长度或前后字符。另外限流类错误很常见不一定是你配置的问题给备用模型就足够。6.5 数据备份与无缝迁移云上跑久了肯定会担心数据丢失。AstrBot 的配置、平台登录状态、插件数据基本都落在 data、config、plugins 里。备份直接打包cd ~/astrbot tar -czf astrbot_backup_$(date %F).tar.gz data config logs plugins要迁移到新服务器只需把压缩包传到新机器解压到同样的目录再启动容器就行。注意迁移前最好先停掉旧的服务避免正在写入的数据文件处于不一致状态docker stop astrbot tar -czf astrbot_backup_$(date %F).tar.gz data config logs plugins迁移后重新 pull 镜像并启动基本可以做到“无损搬家”。我自己搬过两次服务器都是这套流程没丢过一条配置。最后再分享一点个人体会。我最早是在自己电脑上跑 AstrBot后来才搬到云上。搬过去第一天就闹了个乌龙安全组忘了开WebUI 死活连不上折腾了半小时才发现是云控制台的锅。后来我养成了两个习惯容器日志中先搜 error配置改动前先 cp 一份。这套组合拳让我在后面加插件、换模型、换服务器时都少踩了很多坑。AstrBot 的可玩空间相当大你完全可以先照着这篇搭起来用国内大模型跑通再逐步加插件、接多个平台。真遇到问题优先看官方文档的 FAQ再对照上面这几张排查表大概率能自己解决。祝大家的机器人上线顺利在群里当一个靠谱又有趣的存在。