02. Docker Compose 部署

目录约定

本地部署文件目录:

/Users/Zhuanz/Documents/learn/qq-bot

服务器部署目录:

/root/qq-bot

笔记目录:

/Users/Zhuanz/Documents/learn/notes/qq-bot

上传到服务器

本机执行:

scp -r /Users/Zhuanz/Documents/learn/qq-bot root@服务器公网IP:/root/qq-bot

含义:

scp      复制文件到远程服务器
-r       递归复制整个文件夹
root@IP  用 root 用户连接服务器
:/root/qq-bot  服务器目标目录

然后登录服务器:

ssh root@服务器公网IP
cd /root/qq-bot

环境变量

服务器上:

cd /root/qq-bot
cp .env.example .env
vi .env

本次底层使用 DeepSeek,推荐:

NEW_API_BASE_URL=http://172.17.0.1:3000/v1
NEW_API_KEY=NewAPI里给机器人的token
NEW_API_MODEL=deepseek-chat

为什么是 172.17.0.1

LangBot 在 Docker 容器里,容器内 127.0.0.1 是 LangBot 自己。
New API 暴露在宿主机 3000,所以容器访问宿主机用 Docker bridge 网关 172.17.0.1。

如果 New API 不在同一台服务器,改成公网地址:

NEW_API_BASE_URL=http://服务器公网IP:3000/v1

启动容器

cd /root/qq-bot
docker-compose up -d
docker-compose ps

正常状态类似:

NAME                     IMAGE                           STATUS
langbot_plugin_runtime   rockchin/langbot:latest         Up
qqbot-langbot            rockchin/langbot:latest         Up
qqbot-napcat             mlikiowa/napcat-docker:latest   Up

日志:

docker logs --tail 80 qqbot-napcat
docker logs --tail 80 qqbot-langbot
docker logs --tail 80 langbot_plugin_runtime

Docker Hub 拉镜像超时

如果报:

Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection
Client.Timeout exceeded while awaiting headers

说明服务器到 Docker Hub 不稳定。

本次服务器上已经有 mihomo 代理,先确认代理可用:

curl -x http://127.0.0.1:7890 -I https://registry-1.docker.io/v2/

返回:

HTTP/2 401

是正常的,说明 Docker Registry 可达,只是没带认证。

让 Docker daemon 走 mihomo 代理

mkdir -p /etc/systemd/system/docker.service.d
vi /etc/systemd/system/docker.service.d/http-proxy.conf

写入:

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1,172.16.0.0/12,10.0.0.0/8,192.168.0.0/16"

重启 Docker:

systemctl daemon-reload
systemctl restart docker
systemctl show --property=Environment docker

期望看到:

Environment=HTTP_PROXY=http://127.0.0.1:7890 HTTPS_PROXY=http://127.0.0.1:7890

然后逐个拉镜像:

docker pull rockchin/langbot:latest
docker pull mlikiowa/napcat-docker:latest

最后:

cd /root/qq-bot
docker-compose up -d

安全组

腾讯云安全组只放行自己的公网 IP:

协议端口来源
TCP:6099你的本机公网IP/32
TCP:5300你的本机公网IP/32

本机公网 IP:

curl -4 ifconfig.me

2280-22855401 不需要对公网开放。