此方案仅为作者自用的 docker 多实例部署及 nginx 负载均衡方案,并非真正意义上的最佳方案,此方案仅供参考。
1. 安装并部署nginx
2. 启动多个CDP服务实例
2.1. 每个CDP服务均已配置多Discord-Bot即正确配置了bot_config.json文件(作为响应回复Bot的负载)
2.2. 每个CDP服务均已配置多Discord用户即正确配置了环境变量USER_AUTHORIZATION
(作为发起请求的负载)
2.3. 每个CDP服务的环境变量BOT_TOKEN
不同(作为监听Bot的负载)
2.4. 每个CDP服务启动使用不同端口(docker部署只修改宿主机端口即可)
2.5. 启动每个服务并查看运行状态
shell
[root@CVM42567 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d2c5689e560 ghcr.io/deanxv/coze-discord-proxy:latest "/coze-discord-proxy" 21 hours ago Up 21 hours 0.0.0.0:7077->7077/tcp, :::7077->7077/tcp coze-discord-proxy
8c390c01df0f ghcr.io/deanxv/coze-discord-proxy:latest "/coze-discord-proxy" 21 hours ago Up 21 hours 0.0.0.0:7078->7077/tcp, :::7078->7077/tcp coze-discord-proxy2
3. 配置nginx
3.1. 按照如下内容修改并配置在nginx.config中
该配置并非nginx.config中完整配置,仅供参考使用。
shell
upstream cdp {
server 127.0.0.1:7077; # 第一个CDP服务ip:端口
server 127.0.0.1:7078; # 第二个CDP服务ip:端口
}
server {
listen 80; #侦听80端口
location / {
limit_req zone=cdp burst=10 nodelay; # // 配置上述自定义的轮询负载均衡服务-cdp -> 最大可累积10个请求
limit_req_status 429;
limit_req_log_level warn;
client_max_body_size 64m;
proxy_http_version 1.1;
proxy_pass http://cdp; # // 指向上述自定义的轮询负载均衡服务-cdp
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_cache_bypass $http_upgrade;
proxy_set_header Accept-Encoding gzip;
proxy_read_timeout 300s;
}
}
3.2. 修改后重新加载或重启nginx
3.3. 查看所有服务运行状态(示例的nginx也是以docker方式部署)
shell
[root@CVM42567 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d2c5689e560 ghcr.io/deanxv/coze-discord-proxy:latest "/coze-discord-proxy" 23 hours ago Up 23 hours 0.0.0.0:7077->7077/tcp, :::7077->7077/tcp coze-discord-proxy
8c390c01df0f ghcr.io/deanxv/coze-discord-proxy:latest "/coze-discord-proxy" 23 hours ago Up 23 hours 0.0.0.0:7078->7077/tcp, :::7078->7077/tcp coze-discord-proxy2
0dae4fc71905 nginx:latest "/docker-entrypoint.…" 2 months ago Up 22 hours 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp nginx
4. 测试生效
4.1. 使用接口调试工具或其他方式发起多次请求
4.2. 查看每个实例的日志是否交替打印接口请求信息
5. 开始使用
✨ Enjoy It!