在现代前端开发中,Node.js 已经成为了不可或缺的一部分,而随着项目体量的增大,项目部署也成了一个十分繁琐的问题。此时,一个自动化的部署方案就显得尤为重要,PM2 就是其中的一种解决方案。
什么是 PM2?
PM2 是一个用于管理 Node.js 进程的工具,它不仅可以帮助你简化部署和运维,还包括一些有用的特性,比如负载均衡、自动重启、应用监控、日志管理等等。
安装和配置
首先,我们需要在服务器上安装 PM2:
npm install pm2 -g
安装完成后,运行 pm2
命令,如果能够成功显示 PM2 的帮助信息,则证明安装成功。
接下来,为了让 PM2 管理我们的应用,我们需要在应用目录下创建一个 ecosystem.config.js
文件,内容如下:
-- -------------------- ---- ------- -------------- - - ----- - - ----- --------- ------- --------- ---------- -- ---------- ---------- ------ ----- ---- - --------- ------------ -- --------------- - --------- ------------ - - - -
其中,apps
数组中可以包含多个应用的配置,我们这里只配置了一个 my-app
应用,常用的配置项有:
name
:应用名称,必填项。script
:启动脚本路径,必填项。instances
:实例数,默认为 1。exec_mode
:执行模式,fork
或cluster
,默认为fork
。watch
:是否监听文件变化,重新启动应用,默认为false
。env
:所有环境变量的键值对。env_production
:指定NODE_ENV=production
环境变量的键值对。
可参考官方文档了解更多信息。
部署应用
接下来,我们要把应用部署到服务器上,先把代码压缩成 .zip
文件,然后通过 ssh 登录到服务器:
ssh user@host
上传代码并解压缩:
mkdir my-app cd my-app unzip my-app.zip
进入到应用目录并安装依赖:
cd my-app npm install
使用 PM2 运行应用:
pm2 start ecosystem.config.js --env production
此时,PM2 会自动启动我们配置的两个实例,并将日志输出到标准输出流中。
如果需要查看当前运行的应用列表,可以使用 pm2 list
命令。
配置 Nginx 反向代理
为了能够直接通过域名访问我们的应用,需要在服务器上安装 Nginx,并配置反向代理。
首先,安装 Nginx:
apt-get install nginx
然后,在 /etc/nginx/sites-available
目录下创建一个新的配置文件,比如 my-app
,内容如下:
-- -------------------- ---- ------- ------ - ------ --- ----------- ------------ -------- - - ---------- ---------------------- ------------------ ---- ---------------- ------- -------------- ---------------- ---------- ---------- ---------------- ---- ------ ------------------ -------------- - -
其中,server_name
指定了域名,proxy_pass
指定了代理到哪个地址。
接着,创建一个符号链接,启用这个配置文件:
ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/ service nginx reload
现在,可以直接通过域名访问我们的应用了:http://example.com
。
自动化部署
如果我们经常需要部署新的代码,手动执行一遍部署步骤肯定是不可行的。想要实现自动化部署,可以使用如下方法:
- 使用 Jenkins 等自动构建工具,将代码上传到服务器,然后执行部署脚本。
- 使用 Git Hooks,在代码被 push 到远程仓库时,自动触发部署脚本。
这里提供第二种方法的示例,在服务器上创建一个 deploy.sh
脚本:
-- -------------------- ---- ------- ----------- ---- -------------- --- ---- --- ------- --- ------- ------ ---- --------- --------------
然后,在仓库中创建一个 post-receive
Hook,内容如下:
#!/bin/bash ssh user@host "cd /path/to/my-app && ./deploy.sh"
这样,每次 push 代码到仓库时,都会自动触发部署操作。
总结
通过使用 PM2 进行 Node.js 应用的自动化部署,我们可以大大简化部署流程,减少出错的概率,提高开发效率。无论是管理单个项目,还是管理多个项目,PM2 都是一个不错的选择。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645efae2968c7c53b011b734