如果你手头有个 Discord AI Bot 想扔到 VPS 上跑,别只想着 `node index.js` 就完事。掉线、日志炸盘、内存泄漏,这些坑一个比一个常见。这篇教程直接带你走通 Node.js 环境搭建、PM2 进程守护和日志轮转,让 Bot 在 VPS 上稳定跑起来,出了问题也能快速定位。

VPS 环境准备:Node.js 和必要依赖
大部分 Discord AI Bot 基于 discord.js 或 discord.py,这里以 Node.js 为例。先确认 VPS 系统(Ubuntu 22.04 / Debian 12),然后装 Node.js。
sudo apt update && sudo apt upgrade -y
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash –
sudo apt install -y nodejs
node -v # 输出 v18.x.x
npm -v # 输出 9.x.x
如果 Bot 需要调用 AI API(比如 OpenAI、Claude),记得在 `.env` 文件里配好 API Key,不要硬编码在代码里。`.env` 示例:
DISCORD_TOKEN=你的BotToken
OPENAI_API_KEY=sk-xxxx
安装项目依赖:
cd /path/to/your-bot
npm install
跑一次测试,确认 Bot 能正常上线(先在前台跑,看控制台有无报错):
node index.js
没问题就 Ctrl+C 停掉,进入下一步。
PM2 部署:让 Bot 永不掉线
`node index.js` 一关终端 Bot 就死,PM2 就是干这个的——进程守护、自动重启、日志管理。
安装 PM2
sudo npm install -g pm2
启动 Bot 并设置开机自启
pm2 start index.js –name "discord-bot"
pm2 save
pm2 startup
常用 PM2 命令:
pm2 status # 查看所有进程状态
pm2 logs discord-bot # 实时查看日志
pm2 restart discord-bot
pm2 stop discord-bot
pm2 delete discord-bot
配置 PM2 资源限制
AI Bot 如果调用外部 API,偶尔会内存泄漏。PM2 可以设置最大内存,超限自动重启:
pm2 start index.js –name "discord-bot" –max-memory-restart 300M
或者写在 `ecosystem.config.js` 里:
javascript
module.exports = {
apps: [{
name: 'discord-bot',
script: 'index.js',
max_memory_restart: '300M',
log_date_format: 'YYYY-MM-DD HH:mm Z',
error_file: './logs/err.log',
out_file: './logs/out.log',
merge_logs: true
}]
};
然后 `pm2 start ecosystem.config.js`。
日志管理:别让磁盘被日志撑爆
PM2 默认把日志写到 `~/.pm2/logs/`,不轮转的话,跑一个月可能几个 GB。尤其 AI Bot 频繁输出对话内容,日志增长很快。
方法一:PM2 内置日志轮转模块
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7 # 保留最近7个文件
pm2 set pm2-logrotate:compress true
方法二:系统 logrotate 管理
如果你不想用 PM2 插件,直接用系统 logrotate 更稳定。创建文件 `/etc/logrotate.d/discord-bot`:
/home/你的用户名/.pm2/logs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
copytruncate
maxsize 10M
}
然后测试 `sudo logrotate -d /etc/logrotate.d/discord-bot`,没问题就生效。
日志内容过滤
AI Bot 的日志里可能包含用户输入或 API 响应,调试时可以只输出关键信息,别把完整 payload 全打出来。在代码里用 `debug` 级别控制:
javascript
const log = (msg, level = 'info') => {
if (level === 'debug' && process.env.DEBUG !== 'true') return;
console.log(`[${new Date().toISOString()}] [${level}] ${msg}`);
};
老鸟叮嘱
•别用 root 跑 Bot:创建专用用户 `sudo adduser botuser`,然后 `su – botuser` 再部署。PM2 的 `startup` 也要在 botuser 下执行。
•API Key 安全:`.env` 文件权限设为 600,`chmod 600 .env`,别不小心提交到 Git。
•端口放行:Discord Bot 是出站连接,不需要开放入站端口。但如果 Bot 有 Webhook 或 HTTP 服务(比如 slash 命令注册),需要放行对应端口(如 3000),并在防火墙只允许来源 IP。
•内存监控:`pm2 monit` 可以实时看 CPU 和内存,发现异常及时调整 `max_memory_restart`。
•更新 Bot:拉代码后 `pm2 restart discord-bot`,不用重复 `pm2 start`。
FAQ
Q1:Discord AI Bot 对 VPS 配置有什么最低要求?
A:纯 API 调用型 Bot 只需 1 核 512MB 内存,10GB 硬盘。如果本地跑模型(比如 Ollama),建议 4 核 8GB 以上。
Q2:PM2 日志文件一直增长,怎么清理?
A:用上面说的 pm2-logrotate 或系统 logrotate 自动轮转。手动清:`pm2 flush` 清空所有日志,但最好别在生产环境频繁用。
Q3:Bot 经常报“Connection closed”或“WebSocket error”,怎么办?
A:先检查 VPS 网络是否稳定,`ping -c 10 discord.com`。再检查 Discord Token 是否过期。PM2 会自动重启,但如果是 API Key 问题,重启也没用,看日志 `pm2 logs`。
Q4:能不能把 PM2 日志输出到单独文件,方便用工具分析?
A:可以,在 `ecosystem.config.js` 里指定 `error_file` 和 `out_file` 路径,然后用 `tail -f` 或 `grep` 分析。
Q5:Bot 需要调用外部 AI API,是否要配置代理?
A:如果 VPS 在国内,访问 OpenAI/Claude 可能需要代理。在启动命令前加 `HTTP_PROXY=http://你的代理:端口`,或者在代码里用 `axios` 的 `proxy` 配置。
Q6:PM2 进程状态显示“errored”,怎么排查?
A:`pm2 logs discord-bot –lines 50` 看最后错误。常见原因:依赖缺失(`npm install` 没跑)、Token 无效、内存超限、端口被占用。
Discord AI Bot 上 VPS 的核心就三件事:环境装对、进程守护、日志管好。PM2 帮你兜底掉线,日志轮转帮你防磁盘爆炸,剩下的就是按业务需求调 API 和响应逻辑。跑起来之后,记得隔段时间看下 `pm2 status` 和磁盘占用,别等报警再处理。
—
**相关阅读:**
– [Telegram AI Bot VPS 部署教程:Bot Token、Webhook 和反代配置](https://www.zhujixuan.com/jishujiaocheng/9900.html)
– [1 核 1G VPS 能跑 Ollama 吗?低配服务器可行场景分析](https://www.zhujixuan.com/jishujiaocheng/9864.html)
– [Open WebUI VPS 部署教程:给 Ollama 配一个网页聊天界面](https://www.zhujixuan.com/jishujiaocheng/9855.html)
转载请注明出处:https://www.zhujixuan.com/jishujiaocheng/9902.html 商家投稿邮箱:zhujixuanblog@qq.com
