如何使用pm2自动部署Next.js项目

2022-02-16 13:52:26 浏览数 (1)

先在服务器上实现远程git的免密登陆权限

生成一组SSH密钥

代码语言:javascript复制
ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' -C "xxx@qq.com"

将新生产的私钥生效

代码语言:javascript复制
ssh-agent bash && ssh-add  ~/.ssh/id_rsaexit

将下面命令输出的公钥复制,并配置到远程服务

代码语言:javascript复制
cat ~/.ssh/id_rsa.pub

实现本地到远程git的免密登陆权限

这个步骤也可以参考上面的教程

实现本地免密登陆远程centos服务器

在使用pm2之前,我们还有一些准备工作。

我们需要将通过上面教程生成的id_rsa.pub来实现本地免密登陆远程Centos服务器

代码语言:javascript复制
scp ~/.ssh/id_rsa.pub username@127.X.X.X:/root/.ssh/authorized_keys

username:用户名

127.X.X.X:你的远程ip地址

执行后会输入一次密码,然后显示下面信息,说明配置好了

代码语言:javascript复制
id_rsa.pub                                    100%  402    10.2KB/s   00:00

pm2简介

pm2(process manager)是一个进程管理工具,维护一个进程列表,可以用它来管理你的node进程,负责所有正在运行的进程,并查看node进程的状态,也支持性能监控,负载均衡等功能。

使用pm2管理的node程序的好处

  1. 监听文件变化,自动重启程序
  2. 支持性能监控
  3. 负载均衡
  4. 程序崩溃自动重启
  5. 服务器重新启动时自动重新启动
  6. 自动化部署项目

安装 pm2

代码语言:javascript复制
npm install -g pm2

使用

在服务器上创建项目文件夹

为了方便管理,我们在新建一个文件夹 /opt/app/halo-xue-react-next(路径建议自定义,这里只是方便演示),进入文件夹,将需要部署的项目 clone 到当前目录。

代码语言:javascript复制
mkdir /opt/app/halo-xue-react-next

执行了上面的操作后,接下来我们就需要在本地进行操作了

ecosystem.json

然后,我们在本机需要部署的项目中新建文件 ecosystem.json,并写入如下内容。

代码语言:javascript复制
{    "apps" : [{        "name"      : "halo blog",        "script"    : "server.js",  // 启动文件位置,需要修改        "env": {            "COMMON_VARIABLE": "true"        },        "env_production" : {            "NODE_ENV": "production"        }    }],    "deploy" : {            "production" : {                "user" : "username",   // 服务器用户名,需要修改                "host" : ["123.x.x.x"],  // 服务器地址,需要修改                "ref"  : "origin/master",  // 项目branch,视情况修改                "repo" : "git@xxx.git", // 项目地址,需要修改                 "path" : "/opt/app/halo-xue-react-next", // 当前项目位置,需要修改                "pre-setup" : "rm -rf /opt/app/halo-xue-react-next/source", //需要修改                "post-deploy" : "npm install && npm run build && pm2 startOrRestart ecosystem.json --env production",   // 可以不修改,建议使用 cnpm 安装                "ssh_options": "StrictHostKeyChecking=no",                "env"  : {                    "NODE_ENV": "production"            }        }    }} 

更多配置参考官网:http://pm2.keymetrics.io/docs/usage/deployment/

提交ecosystem.json

代码语言:javascript复制
git add ecosystem.jsongit commit -m "Deploy: add ecosystem.json"git push origin master

部署pm2配置

在存在ecosystem.json文件的目录下执行下面命令。

代码语言:javascript复制
pm2 deploy ecosystem.json production setup

成功的话,会打印如下信息。

这一步,如果重复执行会提示:fatal: 目标路径 '/opt/app/react-next-xue/source' 已经存在,并且不是一个空目录。这就只需要将这个目录删除就可以了。 本为有一个很简单的方案:"pre-setup" : "rm -rf /opt/app/halo-xue-react-next/source"这会在每次部署的时候删除source

使用pm2自动部署

在存在ecosystem.json文件的目录下执行下面命令。

代码语言:javascript复制
pm2 deploy ecosystem.json production

成功的话,会打印如下信息。

0 人点赞