# pm2 自动化部署 Node 项目
使用 pm2 deploy 来实现 Node 项目自动部署。
个人项目,加上是最低配的阿里云服务器,因此采用这个。公司项目可以上 K8S + Docker 。
# 零、如何启动项目
# 本地安装pm2
npm install -g pm2
git clone https://github.com/zhongxia245/pm2-depoly-node-demo.git
cd pm2-depoly-node-demo
# 复制 pm2 部署配置模板,并改成自己服务器信息
cp deploy.yaml.bak deploy.yaml
npm install
npm start
# 如何部署
# 第一次部署
npm run server:setup
# 更新部署
npm run server:update
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 一、服务器前置条件
这里以 github 仓库为例, 云服务器系统为 CentOS 7
如果不知道是什么系统,执行
lsb_release -a
[xxxx@iz2zehejz8ufzy9vmvt9xlz ~]$ lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch Distributor ID: CentOS Description: CentOS Linux release 7.5.1804 (Core) Release: 7.5.1804 Codename: Core
1
2
3
4
5
6
安装 pm2 、git
pm2 deploy
会在 服务器上自动去git fetch
仓库代码,因此需要服务器安装git
npm install -g pm2 yum -y install git
1
2
3生成密钥
服务器下载 git 仓库的时候,会提示让你输入帐号密码,如何避免这个提示呢?使用 ssh 实现免密下载。
ssh-keygen -t rsa -C "xxx@xxx.com"
1在 github 设置 ssh key
登录到GitHub,点击右上方的头像,选择settings ,点击Add SSH key,把id_rsa.pub的内容复制到里面即可。
# 二、如何部署
pm2 depoly
原理是 登录 deploy.yaml
配置的服务器群,自动执行一些命令,来重新部署。
这里例子中,就是 拉取 git仓库的最新代码,然后重新启动 pm2
因此,每次部署前,都需要把本地的代码提交到 git 仓库。
# 第一次部署
npm run server:setup
# 更新部署
npm run server:update
1
2
3
4
5
2
3
4
5
# 三、常见问题
# 1、ssh 端口号不是22的,如何配置
port
字段必须为字符串,否则不生效。
apps:
- script: ./bin/www # 入口文件
name: "pm2-depoly-node" # 程序名称
env: # 环境变量
COMMON_VARIABLE: true
env_production:
NODE_ENV: production
deploy: # 部署脚本
production: # 生产环境
user: xxxxx # 服务器的用户名
host: www.xxxxx.com # 服务器的ip地址
port: "1234" # ssh端口,必须为字符串,否则不生效
ref: origin/master # 要拉取的git分支
ssh_options: StrictHostKeyChecking=no # SSH 公钥检查
repo: https://github.com/zhongxia245/pm2-depoly-node-demo.git # 远程仓库地址
path: /home/zhongxia/pm2-deploy/pm2-deploy-node-demo # 拉取到服务器某个目录下
pre-deploy: git fetch --all # 部署前执行
post-deploy: cnpm install && pm2 reload deploy.yaml --env production # 部署后执行
env:
NODE_ENV: production
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 2、fatal: Could not read from remote repository
报这个错,就是服务器没有 clone
仓库的权限,遇到这个问题,按照上面服务器前置条件的操作,配置 ssh 即可。
# 终、参考文章
主要是学习参考这个文章,然后实现这个一个 DEMO项目。