先在服务器上实现远程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
服务器
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程序的好处
- 监听文件变化,自动重启程序
- 支持性能监控
- 负载均衡
- 程序崩溃自动重启
- 服务器重新启动时自动重新启动
- 自动化部署项目
安装 pm2
代码语言:javascript复制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
代码语言:javascript复制git add ecosystem.jsongit commit -m "Deploy: add ecosystem.json"git push origin master
部署pm2配置
在存在ecosystem.json
文件的目录下执行下面命令。
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
文件的目录下执行下面命令。
pm2 deploy ecosystem.json production
成功的话,会打印如下信息。