【完整解决方案】宝塔部署node项目,实现项目遇到异常停止后自动重启

我们在将自己编写的node项目经常会遇到项目因为遇到错误关闭的情况,而该文章将为大家提供node项目遇到异常停止后,如何实现自动重启的功能。摆脱每次都要手动重启的尴尬。

当然了,在实际操作中,可能还有遇到各种问题,我会在文章的末尾为大家解决一些问题。

全局安装 pm2:

npm install pm2 -g

检查全局 npm 模块路径,运行以下命令以查看全局 npm 模块的安装位置:

npm root -g

手动配置环境变量:

使用以下命令检查 `pm2` 的全局安装路径:

which pm2

如果 `pm2` 的全局安装路径不在系统的环境变量中,需要手动配置。打开终端配置文件(通常是 `~/.bashrc` 或 `~/.bash_profile`),然后添加以下行:

export PATH=$PATH:/usr/local/bin

或将路径 `/usr/local/bin` 替换为 `pm2` 的实际全局安装路径。

比如下面是我的实际全局安装路径:

export PATH=$PATH:/www/server/nodejs/v14.17.6/lib/node_modules/pm2/bin

接下来,我们修改一下环境变量

打开终端配置文件(在服务器根目录下运行):

使用以下命令打开终端配置文件(通常是 `~/.bashrc` 或 `~/.bash_profile`):

vi ~/.bashrc

vi ~/.bash_profile

添加 pm2 的路径:在文件的末尾添加以下行:

export PATH=$PATH:/www/server/nodejs/v14.17.6/lib/node_modules/pm2/bin

保存和退出:

按 `Esc` 键,然后输入 `:wq`,并按回车键保存并退出 vi 编辑器。

重新加载环境变量:

使用以下命令重新加载环境变量:

source ~/.bashrc

source ~/.bash_profile

验证 pm2 安装:

再次尝试运行以下命令来验证 `pm2` 是否已成功安装:

pm2 --version

如果成功安装,你会看到 `pm2` 的版本号。


接下来,我们就要进入正题了。

要在宝塔面板中创建的 Node.js 项目保持自动重启,我们需要通过一些工具或脚本来实现。一种常见的方法是使用 `pm2` 这样的进程管理工具:

安装 pm2:

宝塔面板中使用终端输入以下命令安装 `pm2`(前面操作过,这步可以省略)

npm install pm2 -g

启动应用程序:

在项目目录下,使用 `pm2` 启动应用程序(重启就将start换成restart),例如:

pm2 start npm -- start

保存当前 `pm2` 进程列表:

这将确保在服务器重新启动后 `pm2` 进程仍然运行。您可以使用以下命令保存当前的 `pm2` 进程列表:

pm2 save

生成启动脚本:

为了使 `pm2` 在服务器重新启动时自动加载,您可以生成一个启动脚本。可以通过以下命令生成脚本:

pm2 startup 

现在,当服务器重新启动时,`pm2` 会自动加载并启动 Node.js 应用程序。 通过这些步骤,Node.js 应用程序应该能够在遇到异常停止后自动重启。


最后需要注意的是,如果将来更新或重新安装了 Node.js 版本,`npm` 的全局路径可能会更改。在这种情况下,你需要相应地更新 `pm2` 的路径。确保将上述步骤中的路径 `/www/server/nodejs/v14.17.6` 替换为自己的实际 Node.js 版本的路径。


可能遇到的问题:

问题1:宝塔环境使用 npm,使用什么命令都提示:npm WARN config init.module Use `--init-module` instead。

打开:/www/server/nodejs/[node 版本]/etc/npmrc

例如:/www/server/nodejs/v16.18.0/etc/npmrc 将 init.module 修改为 --init-module

如:

prefix = /www/server/nodejs/v16.18.0/
registry = https://registry.npm.taobao.org/
cache = /www/server/nodejs/cache/
--init-module = /www/server/nodejs/v16.18.0/etc/init-module.js

问题2: 宝塔部署多个nodejs项目时,如何让其他端口也能实现自动重启?

我们在用上面的方式安装pm2后,默认是自动重启端口为3000的项目,那么其他端口的项目就不能实现自动重启,解决方案也很简单:

启动每个项目,并指定不同的端口。例如,如果你有两个项目,分别监听3000和5000端口,你可以使用以下命令:

pm2 start app1.js --name "app1-3000" -i max
pm2 start app2.js --name "app2-5000" -i max

这里app1.jsapp2.js是你的应用入口文件,--name参数给每个应用指定一个名字,-i max表示启动CPU核心数量的实例。

如果你需要删除指定ID的应用程序,可以使用PM2提供的命令行工具。以下是删除指定ID应用程序的命令:

pm2 delete <id>

这里的<id>是你想要删除的应用程序的PM2进程ID。

例如,如果你的应用程序ID是1,你可以运行:

pm2 delete 1

这将停止ID为1的应用程序,并从PM2列表中删除它。如果你想删除多个指定ID的应用程序,可以将它们的ID用空格隔开,例如:

pm2 delete 1 2 3

这将删除ID为1、2和3的应用程序。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盒子猫君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值