如何用PM2托管静态文件
PM2 主要用于管理 Node.js 应用程序进程。但如果你确实想通过 PM2 来管理一个静态文件服务器进程, 可以使用 serve
模块 + ecosystem.config.js
配置文件来实现。
1. 安装 serve
首先确保你全局或本地安装了 serve
:
npm install -g serve
2. ecosystem.config.js
文件
module.exports = {apps: [{name: 'myweb', // 应用名称script: 'serve', // 启动命令args: '-s -p 3000 ./dist', // 参数:-s 启用单页应用模式,-p 端口,./dist 是静态文件目录instances: 1, // 单实例(静态服务通常不需要多实例)autorestart: true, // 文件变化时自动重启(配合 watch 使用)watch: false, // 可设为 true 或指定目录,开发时有用max_memory_restart: '1G', // 内存超过 1G 时重启env: {NODE_ENV: 'development',PORT: 3000},env_production: {NODE_ENV: 'production',PORT: 8080},log_date_format: 'YYYY-MM-DD HH:mm:ss',error_file: './logs/pm2-err.log',out_file: './logs/pm2-out.log',merge_logs: true,time: true}],// 部署配置(可选)deploy: {production: {user: 'your-username',host: 'your-server.com',ref: 'origin/main',repo: 'git@github.com:username/repo.git',path: '/var/www/my-static-site','post-deploy': 'npm install && npm run build && pm2 reload ecosystem.config.js --env production'}}
};
3. 使用方法
把dist目录作为静态网站所在目录
把dist目录和ecosystem.config.js放在一起, 执行pm2 start即可
pm2 start# 保存当前进程列表
pm2 save# 重启
pm2 reload myweb# 查看日志
pm2 logs mywb
4. 注意事项
- 重启服务器后托管在pm2上的进程消失的情况: 按下面顺序执行就可以解决
pm2 unstartup
pm2 startup
pm2 list
pm2 save
./dist
:请替换为你的实际静态文件输出目录,如public
、build
等。-s
参数:启用 SPA(单页应用)模式,所有 404 请求会返回index.html
,适合 React、Vue 等前端框架。- 日志目录
./logs
需要提前创建,否则 PM2 可能报错。 - 若使用
npm run serve
脚本,可将script
改为npm
,args
改为run serve
。
替代方案建议
对于纯静态网站,推荐使用:
- Nginx:高性能、稳定,适合生产环境。
- Vercel / Netlify:专为静态站点设计的部署平台。
- Caddy / Serve 直接运行,无需 PM2。
但如果你的部署流程已基于 PM2,上述配置是可行的方案。