精选的想法、故事和创意,全部汇集于此!

文章背景图

宝塔面板部署 SnowLuma,并与宝塔 astorbot 连接

2026-08-13
0
-
- 分钟

想让 QQ 小号变成能自由回复的「伪人」?不用自己写机器人代码,把两个现成项目在宝塔面板里一装、扫个码就能跑起来。astorbot 负责接 AI 聊天模型对话,SnowLuma 负责托管 QQ 机器人,两者连起来就是一台 24 小时在线的 QQ 伪人。唯一要付出的就是一台小服务器的钱。

你需要准备

工具 用途 获取方式
2 核 2G 服务器 跑两个容器,加起来要 1G 多内存 任意云厂商
宝塔面板 可视化管理 Docker、文件和网站 官网一键安装
防火墙放行 6081 5099 6185 SnowLuma 的 WebUI 和 noVNC 访问 宝塔「安全」里放行
一个 QQ 小号 给机器人用,别拿主号 注册一个

部署 astorbot

在宝塔 → Docker → 应用商店里搜索 astorbot,一键下载安装即可,不用改配置。

部署 SnowLuma

容器会占用以下端口,确保没有与其他容器冲突

端口 用途
5900 VNC(远程桌面,密码登录 QQ 用)
6081 noVNC(浏览器版 VNC,无客户端访问)
5099 SnowLuma WebUI
3000 OneBot HTTP(默认)
3001 OneBot WebSocket(默认)

使用 docker-compose 部署

在宝塔文件下新建一个文件夹(比如 /www/wwwroot/snowluma),在里面新建 docker-compose.yml 并复制粘贴以下内容:

services:
  snowluma:
    image: ${SNOWLUMA_IMAGE:-motricseven7/snowluma:latest}
    container_name: ${SNOWLUMA_CONTAINER:-snowluma}
    restart: unless-stopped
    shm_size: 1gb
    cap_add:
      - SYS_PTRACE
    security_opt:
      - seccomp=unconfined
    environment:
      VNC_PASSWD: ${VNC_PASSWD:-vncpasswd}
      SNOWLUMA_UID: ${SNOWLUMA_UID:-1000}
      SNOWLUMA_GID: ${SNOWLUMA_GID:-1000}
      SNOWLUMA_WEBUI_PORT: ${SNOWLUMA_WEBUI_PORT:-5099}
      SNOWLUMA_LOG_LEVEL: ${SNOWLUMA_LOG_LEVEL:-info}
      SNOWLUMA_SCREEN: ${SNOWLUMA_SCREEN:-1920x1080x24}
      SNOWLUMA_HOOK_AUTOLOAD: ${SNOWLUMA_HOOK_AUTOLOAD:-1}
      SNOWLUMA_EXTRA_QQ_HOMES: "${SNOWLUMA_EXTRA_QQ_HOMES:-}"
      SNOWLUMA_QQ_FLAGS: "${SNOWLUMA_QQ_FLAGS:---disable-gpu --disable-software-rasterizer --disable-gpu-compositing}"
    ports:
      - "${VNC_PORT:-5900}:5900"
      - "${NOVNC_PORT:-6081}:6081"
      - "${SNOWLUMA_WEBUI_HOST_PORT:-5099}:${SNOWLUMA_WEBUI_PORT:-5099}"
      - "${ONEBOT_HTTP_PORT:-3000}:3000"
      - "${ONEBOT_WS_PORT:-3001}:3001"
    volumes:
      - snowluma-data:/app/snowluma-data
      - snowluma-qq-config:/app/.config
      - snowluma-qq-data:/app/.local/share
    # 新增:接入baota_net与astorbot同一个宝塔网络,否则后续ws连接不上
    networks:
      - baota_net
networks:
  baota_net:
    external: true

volumes:
  snowluma-data:
  snowluma-qq-config:
  snowluma-qq-data:

这里有个坑必须提醒:要让 SnowLuma 和 astorbot 处在同一个宝塔网络 baota_net,否则后面两个容器之间连 WebSocket 会连不上。上面 compose 里的 networks 段就是干这个的。

点击宝塔「终端」进入这个文件夹并启动:

docker compose up -d

后续要升级镜像:

docker compose pull
docker compose up -d

启动机器人 QQ

  1. 启动容器后在浏览器访问 http://<IP>:6081/,输入 vncpasswd
  2. 扫码登录机器人 QQ 号
  3. 浏览器访问 http://<IP>:5099/ 打开 SnowLuma WebUI
  4. 打开容器日志,找到 password 输入

按图设置连接 ws

SnowLuma 反向 URL 输入 ws://astrbot_4nKx:6199/ws,这样在 astorbot 容器重启更换 IP 时也能连上。授权 token 两边填成一样的即可。

部署之后服务器经常卡住怎么办

部署过机器人之后我经常遇到服务器卡死只能重启的情况,每次卡死前都是磁盘大量读写,估计是内存不足。我的解决办法是给服务器加 swap 交换文件(具体做法参考了 B 站一个视频,链接放文末)。依次运行以下命令:

# 创建 2G swap 文件
fallocate -l 2G /swapfile
# 权限只给 root
sudo chmod 600 /swapfile
# 格式化为 swap
sudo mkswap /swapfile
# 启用
sudo swapon /swapfile
# 查看内存和 swap 是否生效
free -h
# 调高 swap 使用倾向
sudo sysctl vm.swappiness=60

想要重启不丢失,必须把 swap 写入开机挂载表 /etc/fstab,编辑 /etc/fstab,在末尾增加一行:

/swapfile    none    swap    sw    0 0

再验证一下配置(防止开机启动失败):

# 加载fstab全部挂载项,无报错即配置正确
mount -a
# 重载系统挂载单元
systemctl daemon-reload
# 启用所有fstab里定义的swap
swapon -a

重启后执行 free -h / swapon --show 就能看到交换空间正常存在。

感谢他们为本文做出的贡献

https://docs.astrbot.app/

https://snowluma.github.io/

https://www.bilibili.com/video/BV1a3QaYjE15

原创

宝塔面板部署 SnowLuma,并与宝塔 astorbot 连接

本文链接: 宝塔面板部署 SnowLuma,并与宝塔 astorbot 连接

本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

评论交流

文章目录