使用 PM2 进行 Node.js 应用的自动化部署

阅读时长 5 分钟读完

在现代前端开发中,Node.js 已经成为了不可或缺的一部分,而随着项目体量的增大,项目部署也成了一个十分繁琐的问题。此时,一个自动化的部署方案就显得尤为重要,PM2 就是其中的一种解决方案。

什么是 PM2?

PM2 是一个用于管理 Node.js 进程的工具,它不仅可以帮助你简化部署和运维,还包括一些有用的特性,比如负载均衡、自动重启、应用监控、日志管理等等。

安装和配置

首先,我们需要在服务器上安装 PM2:

安装完成后,运行 pm2 命令,如果能够成功显示 PM2 的帮助信息,则证明安装成功。

接下来,为了让 PM2 管理我们的应用,我们需要在应用目录下创建一个 ecosystem.config.js 文件,内容如下:

-- -------------------- ---- -------
-------------- - -
  ----- -
    -
      ----- ---------
      ------- ---------
      ---------- --
      ---------- ----------
      ------ -----
      ---- -
        --------- ------------
      --
      --------------- -
        --------- ------------
      -
    -
  -
-

其中,apps 数组中可以包含多个应用的配置,我们这里只配置了一个 my-app 应用,常用的配置项有:

  • name:应用名称,必填项。
  • script:启动脚本路径,必填项。
  • instances:实例数,默认为 1。
  • exec_mode:执行模式,forkcluster,默认为 fork
  • watch:是否监听文件变化,重新启动应用,默认为 false
  • env:所有环境变量的键值对。
  • env_production:指定 NODE_ENV=production 环境变量的键值对。

可参考官方文档了解更多信息。

部署应用

接下来,我们要把应用部署到服务器上,先把代码压缩成 .zip 文件,然后通过 ssh 登录到服务器:

上传代码并解压缩:

进入到应用目录并安装依赖:

使用 PM2 运行应用:

此时,PM2 会自动启动我们配置的两个实例,并将日志输出到标准输出流中。

如果需要查看当前运行的应用列表,可以使用 pm2 list 命令。

配置 Nginx 反向代理

为了能够直接通过域名访问我们的应用,需要在服务器上安装 Nginx,并配置反向代理。

首先,安装 Nginx:

然后,在 /etc/nginx/sites-available 目录下创建一个新的配置文件,比如 my-app,内容如下:

-- -------------------- ---- -------
------ -
    ------ ---
    ----------- ------------
  
    -------- - -
        ---------- ----------------------
        ------------------ ----
        ---------------- ------- --------------
        ---------------- ---------- ----------
        ---------------- ---- ------
        ------------------ --------------
    -
-

其中,server_name 指定了域名,proxy_pass 指定了代理到哪个地址。

接着,创建一个符号链接,启用这个配置文件:

现在,可以直接通过域名访问我们的应用了:http://example.com

自动化部署

如果我们经常需要部署新的代码,手动执行一遍部署步骤肯定是不可行的。想要实现自动化部署,可以使用如下方法:

  • 使用 Jenkins 等自动构建工具,将代码上传到服务器,然后执行部署脚本。
  • 使用 Git Hooks,在代码被 push 到远程仓库时,自动触发部署脚本。

这里提供第二种方法的示例,在服务器上创建一个 deploy.sh 脚本:

-- -------------------- ---- -------
-----------

---- --------------

--- ----
--- -------

--- ------- ------

---- --------- --------------

然后,在仓库中创建一个 post-receive Hook,内容如下:

这样,每次 push 代码到仓库时,都会自动触发部署操作。

总结

通过使用 PM2 进行 Node.js 应用的自动化部署,我们可以大大简化部署流程,减少出错的概率,提高开发效率。无论是管理单个项目,还是管理多个项目,PM2 都是一个不错的选择。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645efae2968c7c53b011b734

纠错
反馈