Nodejs express 后端使用 pkg 打包后,如何实现类似 pm2 多进程部署以及守护
继续上次发帖后,nodejs 的 express 后端使用 pkg 打包后,目前没什么问题,但是似乎没有办法使用 pm2 进行多进程部署了,是否还有更好的方案或者解决部署问题
Nodejs express 后端使用 pkg 打包后,如何实现类似 pm2 多进程部署以及守护
- pkg 打包之后的可执行文件,依然可以用 pm2 部署。pm2 要额外单独装在服务器上。
2. nodejs 本身支持多进程可以使用 cluster 模块,pkg 直接打包到内部。
3. 守护进程可以用 pm2 、也可以用操作系统的 service ,做成 docker 也行。
「守护进程可以用 pm2 、也可以用操作系统的 service ,做成 docker 也行」
细说 docker 来守护
守护进程考察了 systemd ,大概率可行,就差一个多进程 cluster 难搞,我查查资料去
可以参考一下 eggjs 的 cluster 实现,他们做好了。
pm2 用 fork mode, 监听多个端口, 然后用 nginx/caddy 的负载均衡打到这几个端口
放弃 pkg 了 使用了 node 自带的 cluster 模块,后续观察下,pkg 打包 arm 版本容易出现问题,换 ncc 打包了
不对啊,node 20 + 版本,官方有打包教程 https://nodejs.org/api/single-executable-applications.html
在Node.js中使用Express框架开发后端应用,并通过pkg
工具打包成可执行文件后,若要实现类似pm2
的多进程部署及守护功能,你可以借助操作系统的进程管理工具,比如Linux的systemd
或Windows的nssm
(Non-Sucking Service Manager)。以下是一个基于systemd
的示例配置,适用于Linux环境:
-
创建Systemd服务文件: 创建一个名为
myapp.service
的文件,并放置在/etc/systemd/system/
目录下。[Unit] Description=My Node.js App After=network.target [Service] Type=simple ExecStart=/path/to/your/executable --name "my-app" --instances "max" --exec "node_app" Restart=always User=your-username Group=your-groupname WorkingDirectory=/path/to/your/app Environment=NODE_ENV=production [Install] WantedBy=multi-user.target
注意:
--name
,--instances
,--exec
是假设你有一个自定义脚本来处理多实例启动,如果没有,你需要自己实现或使用其他方式。 -
重新加载Systemd配置并启动服务:
sudo systemctl daemon-reload sudo systemctl start myapp sudo systemctl enable myapp
-
检查服务状态:
sudo systemctl status myapp
这种方法利用了systemd
的强大功能来管理你的Node.js应用,包括多实例部署、自动重启和日志记录。对于Windows环境,你可以使用nssm
进行类似的配置。