游乐游手机版
首页/编程语言/文章详情

如何在 Ubuntu 上使用 PM2 管理 Nodejs 应用

时间:2026-04-30 22:51
在 Ubuntu 上使用 PM2 管理 Node js 应用程序 对于在 Ubuntu 服务器上部署 Node js 应用来说,PM2 几乎是个绕不开的工具。它集进程守护、负载均衡、日志管理于一身,能让你从繁琐的运维工作中解放出来,把精力真正聚焦在业务开发上。下面,我们就来一步步拆解,看看如何让 P

在 Ubuntu 上使用 PM2 管理 Node.js 应用程序

对于在 Ubuntu 服务器上部署 Node.js 应用来说,PM2 几乎是个绕不开的工具。它集进程守护、负载均衡、日志管理于一身,能让你从繁琐的运维工作中解放出来,把精力真正聚焦在业务开发上。下面,我们就来一步步拆解,看看如何让 PM2 为你的应用保驾护航。

如何在 Ubuntu 上使用 PM2 管理 Nodejs 应用

1. 安装 Node.js

万事开头难,但第一步其实很简单:确保你的系统已经装好了 Node.js 和 npm。打开终端,执行下面这两条命令,基础环境就准备妥当了。

sudo apt update
sudo apt install nodejs npm

2. 安装 PM2

有了 npm,安装 PM2 就是一句话的事。通过全局安装,你可以在系统的任何地方直接调用它。

sudo npm install pm2 -g

3. 启动 Node.js 应用

假设你的应用入口文件是 app.js,那么启动它只需要一个简单的命令。PM2 会默默地在后台守护这个进程。

pm2 start app.js

4. 查看应用状态

应用跑起来了,怎么确认它的状态呢?使用 pm2 list 可以一览所有托管应用的健康状况。如果想深入了解某个特定应用,pm2 show 命令会提供详尽的运行时信息。

pm2 list
# 或者
pm2 show 

5. 停止应用

需要临时下线服务进行维护?一条停止命令就能优雅地终止进程。

pm2 stop 

6. 重启应用

代码更新后,重启是常规操作。PM2 的重启命令能确保应用平滑地重新加载。

pm2 restart 

7. 删除应用

如果某个应用已经完成历史使命,可以从 PM2 的托管列表中彻底移除它,保持管理界面的清晰。

pm2 delete 

8. 日志管理

排查问题是后端开发的日常,清晰的日志是关键。PM2 集成了强大的日志功能,既可以查看所有应用的聚合日志,也能精准定位单个应用的问题。

pm2 logs
# 或者
pm2 logs 

9. 配置文件

对于正式环境,使用配置文件(如 ecosystem.config.js)是更专业的选择。它允许你定义应用名称、实例数量、环境变量、内存阈值等,实现声明式管理。下面是一个典型的配置示例:

module.exports = {
  apps: [{
    name: ‘my-app’,
    script: ‘app.js’,
    instances: ‘max’, // 或者指定实例数量,例如 2
    autorestart: true,
    watch: false,
    max_memory_restart: ‘1G’,
    env: {
      NODE_ENV: ‘development’
    },
    env_production: {
      NODE_ENV: ‘production’
    }
  }]
};

配置好后,使用以下命令并指定环境启动,一切尽在掌握。

pm2 start ecosystem.config.js --env production

10. 监控和管理

除了命令行,PM2 还提供了一个轻量级的 Web 监控界面。启动它之后,你就可以在浏览器中直观地查看服务器性能和应用状态了,对于团队协作或多服务器管理尤其方便。

pm2 web

启动后,在浏览器访问 https://:9611 即可打开监控面板。

走完这十步,从安装部署到日常运维,一套基于 PM2 的 Node.js 应用管理体系就搭建完成了。它带来的不仅是效率提升,更是生产环境稳定性的坚实保障。

来源:https://www.yisu.com/ask/23580877.html
上一篇如何利用软连接简化文件管理 下一篇如何在多用户环境中使用软连接
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Java日期字符串格式化:指定样式转换教程
编程语言 · 2026-07-05

Java日期字符串格式化:指定样式转换教程

Java 日期字符串格式转换:从 "yyyy-MM-dd " 到 "dd-MM-yyyy " 并保留纳秒精度 日期格式转换是 Java 日常开发中非常常见的需求。然而,看似简单的操作一旦忽略了细节,就容易埋下隐患。本文主要介绍如何将类似 "2023-03-13 12:00:02 " 的字符串,转换为 "1

Java static方法优雅替换全局配置管理
编程语言 · 2026-07-05

Java static方法优雅替换全局配置管理

在Java项目中,“能否用static方法替代全局配置管理”几乎是每次技术讨论都会出现的话题。答案是:可以,但前提是掌握正确用法。static方法本身并非配置管理的替代品,它更像一个统一入口——将散布在各处的硬编码值集中管理,封装成一个受控、只读、可验证的配置访问点。 真正优雅的做法是:利用stat

Java抽象类约束子类行为实现标准规范
编程语言 · 2026-07-05

Java抽象类约束子类行为实现标准规范

在Java的世界里,抽象类(Abstract Class)是约束子类行为最经典的机制之一。它既不像接口那样仅做纯声明,也不像普通类那样提供完整实现——它处于两者之间,既是契约也是骨架。核心要点就是:在父类中使用abstract关键字声明抽象方法,编译器会自动检查,漏掉一个方法都无法通过编译。 抽象类

Java多线程环境下StringBuffer字符串拼接方法
编程语言 · 2026-07-05

Java多线程环境下StringBuffer字符串拼接方法

StringBuffer 的线程安全机制,实质上是在所有修改方法上添加了 synchronized 锁——例如 append、insert、delete 等操作,均受同一把 this 锁保护。同一时刻只允许一个线程对内部的 char[] 数组和 count 字段进行修改,从而保障数据一致性。但代价显

Java局部变量作用域冲突解决与实战指南
编程语言 · 2026-07-05

Java局部变量作用域冲突解决与实战指南

Ja va局部变量作用域冲突:本质是设计问题,靠工具不如靠思路 许多开发者遇到局部变量与成员变量同名时,第一反应可能是“编译器会自动处理吧?”——遗憾的是,Ja va编译器仅负责报告语法错误,并不会替你梳理业务逻辑。局部变量作用域冲突本质上属于逻辑边界设计问题,必须由开发者主动规划、显式隔离。核心方