Discord.js音乐Bot在OVH Ubuntu VPS执行/play后自动跳歌问题
Discord.js音乐Bot在OVH Ubuntu VPS上自动跳歌问题排查方案
问题描述
我用Discord.js + DisTube开发的音乐Bot在Windows本地运行完全正常,但部署到OVH的Ubuntu VPS后,执行/play命令会自动跳过歌曲,直接显示队列已结束,且无任何报错信息。已尝试重新安装依赖、移除Bot实例、重启VPS,问题仍未解决。
当前依赖版本:
"dependencies": { "cli-color": "^2.0.3", "discord-html-transcripts": "^3.1.4", "discord.js": "^14.10.2", "fivem": "^2.1.8", "distube": "^4.0.4", "@distube/spotify": "^1.5.1", "ffmpeg-static": "^4.4.1", "tweetnacl": "^1.0.3" }
排查与解决步骤
1. 检查VPS网络出站限制
- OVH VPS可能默认限制流媒体相关域名/端口,在终端用
curl测试音频源可用性,比如:
确认返回状态码为200系列(正常访问)。curl -I https://www.youtube.com/watch?v=示例视频ID - 查看UFW防火墙规则,确保允许出站流量:
若有拦截,执行sudo ufw statussudo ufw allow out 443/tcp开启HTTPS出站权限,或直接允许所有出站。
2. 验证FFmpeg可用性
- 终端执行
ffmpeg -version,若提示缺失依赖,直接安装系统版FFmpeg:sudo apt update && sudo apt install ffmpeg - 修改DisTube配置,指定系统FFmpeg路径(通常为
/usr/bin/ffmpeg),替代ffmpeg-static包:const distube = new DisTube(client, { ffmpeg: "/usr/bin/ffmpeg", // 其他原有配置 });
3. 开启DisTube调试日志
- 初始化DisTube时设置日志级别为
debug,捕捉详细错误信息:const { DisTube } = require('distube'); const distube = new DisTube(client, { logLevel: "debug", // 其他配置 }); - 运行Bot后查看终端输出,重点关注歌曲加载阶段的日志,定位跳歌原因(如音频源加载失败)。
4. 统一Node.js版本
- 确认VPS与本地Node.js版本一致(Discord.js v14要求Node.js ≥16.9.0),终端执行
node -v查看版本。 - 若版本过低,升级到LTS版本(如18.x):
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt-get install -y nodejs
5. 测试无区域限制的音频源
- 部分流媒体服务(如Spotify)会根据IP区域限制访问,尝试播放YouTube公共视频测试,若正常则说明是区域版权问题,可更换音频源或使用代理。
6. 彻底清理依赖缓存
- 删除旧依赖文件后重新安装:
rm -rf node_modules package-lock.json npm install
内容的提问来源于stack exchange,提问作者Kacper
相关产品推荐
相关产品推荐

