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

文章背景图

2核2G服务器用宝塔部署 SnowLuma 和 AstrBot 搭 QQ 机器人

2026-08-12
358
- 字
- 分钟

1. 先备好这些东西

东西 说明
2 核 2G 服务器 两个容器加起来要吃 1G 多内存,再小容易崩
宝塔面板 用来点点鼠标管 Docker 和文件
放行端口 6081 5099 6185 在宝塔「安全」和云厂商后台都放开,用来进 WebUI 和远程桌面
一个 QQ 小号 给机器人挂着用的,千万别拿自己的大号试

2. 装 AstrBot

这个最简单,直接在「宝塔 → Docker → 应用商店」里搜 astrbot,点一键安装就行,默认配置不用动。

3. 用 docker-compose 装 SnowLuma

SnowLuma 会用到下面这几个端口,装之前先看看有没有跟别的容器撞车:

端口 干嘛用的
5900 VNC 远程桌面
6081 noVNC(直接用浏览器开远程桌面扫码登 QQ)
5099 SnowLuma 自己的 WebUI 后台
3000 / 3001 OneBot 的 HTTP 和 WebSocket 端口

在宝塔文件管理里随便建个目录(比如 /www/wwwroot/snowluma),里面新建一个 docker-compose.yml,把下面这段粘进去。注意最后我加了 baota_net 网络,是为了让它和宝塔应用商店装的 AstrBot 处在同一个局域网里,不然待会儿连不上:

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,跟宝塔装的 astrbot 放同一个网段
    networks:
      - baota_net
networks:
  baota_net:
    external: true

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

打开宝塔终端进到这个目录,跑起来:

docker compose up -d

以后要是想更新版本,也是在这个目录里跑:

docker compose pull
docker compose up -d

4. 扫码登 QQ 并连上 AstrBot

  1. 浏览器打开 http://<你的服务器IP>:6081/,默认密码填 vncpasswd,进去就能看到桌面里的 QQ,拿小号扫码登录。
  2. 再打开 http://<你的服务器IP>:5099/ 进 SnowLuma 后台。初始密码去宝塔的容器日志里翻一下 password。
  3. 照着下面两张图把两边的 WebSocket 连上:

SnowLuma 里的反向 WS 地址直接填容器名(比如 ws://astrbot_4nKx:6199/ws,具体看你宝塔里 AstrBot 容器叫啥名),这样哪怕容器重启换了内网 IP 也不会断。两边的 Token 随便填个一样的字符串就行。

5. 2G 内存老卡死,加个 Swap 救命

挂上机器人之后,我这台 2G 内存的小机器隔三差五就彻底卡死,看监控每次死之前磁盘读写都拉满,明显是内存爆了。后来照着 B 站一个视频给服务器挂了 2G 的 Swap 虚拟内存,才总算消停下来。

直接在终端挨个跑下面这几条命令:

# 划一个 2G 的 swap 文件
fallocate -l 2G /swapfile
# 改权限只让 root 读写
sudo chmod 600 /swapfile
# 格式化成 swap
sudo mkswap /swapfile
# 立即启用
sudo swapon /swapfile
# 看看挂上没有
free -h
# 调高一点使用 swap 的积极性
sudo sysctl vm.swappiness=60

光这样重启服务器就没了,还得去改 /etc/fstab,在文件最底下加一行:

/swapfile    none    swap    sw    0 0

改完跑一遍下面三条命令验一下,没报错就稳了,不怕重启开不了机:

mount -a
systemctl daemon-reload
swapon -a

参考文献: - https://docs.astrbot.app/ - https://snowluma.github.io/ - https://www.bilibili.com/video/BV1a3QaYjE15

原创

2核2G服务器用宝塔部署 SnowLuma 和 AstrBot 搭 QQ 机器人

本文链接: 2核2G服务器用宝塔部署 SnowLuma 和 AstrBot 搭 QQ 机器人

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

评论交流