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

2020-09-09 13:13:02 508 17 分钟

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

生成一组SSH密钥

ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' -C "xxx@163.com"

"xxx@163.com"是自己的绑定邮箱

将新生产的私钥生效

ssh-agent bash && ssh-add  ~/.ssh/id_rsa
exit

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

cat ~/.ssh/id_rsa.pub

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

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

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

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

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

scp ~/.ssh/id_rsa.pub username@127.X.X.X:/root/.ssh/authorized_keys

username:用户名

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

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

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

npm install -g pm2

使用

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

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

mkdir /opt/app/halo-xue-react-next

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

ecosystem.json

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

{
    "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

git add ecosystem.json
git commit -m "Deploy: add ecosystem.json"
git push origin master

部署pm2配置

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

pm2 deploy ecosystem.json production setup

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

pm2

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

使用pm2自动部署

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

pm2 deploy ecosystem.json production

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

pm2