前言
我们都开发完了,也做了后台,那肯定也要部署到服务器,否则客户端怎么对接口是吧,就算有运维,我们最好也要掌握一门技能,不然有时候确实挺难受
常见的部署服务的 pm2、docker、k8s等,这里只讲解 pm2,只因为好用稳定,我们小后台必备(大的没有专业的运维或者更专业的工具还是差点意思)
部分参考自 这里
配置pm2基础环境
这里就配置我们常用的 brew、nvm、git、node、npm、yarn、pm2
安装 nvm
js
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
下载 homebrew,这是一个仓库,里面有很多我们想要的内容,对于一些自导 yum,也可以直接使用yum
js
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
下载完毕 homebrew 就可以很方便下载其他了
下载 node
js
//自动安装稳定版本
brew install node
安装 git,可以到 这里 下载,也可以用 brew,我们可以在我们的服务器使用 git 拉去我们的项目,然后运行,配置 ssh 可以帮助我们更方便的拉取
js
brew install git
下载 pm2,pm2 是 node 编写的多进程管理器,我们就用 PM2 托管我们的服务即可,用 npm 下载 pm2 即可
js
//下载到全局
npm install pm2@latest -g
//如果有 yarn,则可以
yarn global add pm2
使用下载 yarn,就可以使用 yarn 环境了
js
npm install yarn -g
pm2部署服务器
前面说了,pm2 是 node 编写的一个多进程托管工具,其能托管我们的服务,保证其进程持续活着,无论是测试还是生产都是非常好用的
js
//首先进入服务器,更换远端服务器ip,然后输入密码即可
ssh root@47.95.7.29
下面就是执行 pm2 命令的环节了
启动服务
js
//启动我们的项目,其中main.js为我们项目的入口文件,默认单进程启动
pm2 start main.js
//命名我们的服务,方便查看,不然就是main了
pm2 start main.js --name my-server
//添加监听,当我们的项目发生改变时,自动重新启动
pm2 start main.js --watch
//启动多进程,充分利用多核服务器资源,一般集群用,数据写入安全的需要额外注意了
pm2 start main.js -i 2
pm2 start main.js -i max //max为cpu核心数量
//我们可以通过进程 id、name 来启动暂停的服务
pm2 start id
pm2 start my-server
暂停服务
js
//我们可以通过进程 id、name 来暂停的服务
pm2 stop id
pm2 stop my-server
pm2 stop all //停止所有服务
删除服务
js
//我们可以通过进程 id、name 来删除的服务
pm2 delete id
pm2 delete my-server
pm2 delete all //停止所有服务
重启服务
js
//我们可以通过进程 id、name 来重启服务,相当于先暂停后启动两个操作
pm2 restart id
pm2 restart my-server
pm2 restart all //重启所有服务
重新加载服务
js
//我们可以通过进程 id、name 来重新加载服务,相当于先删除后启动两个操作
pm2 reload id
pm2 reload my-server
pm2 reload all //重启加载服务
查看、监控服务
js
//查看我们运行的所有服务
pm2 list
//查看实时日志
pm2 logs
//清空所有日志文件
pm2 flush
//监控我们的服务,有错误会显示出来
pm2 monit
帮助
js
//当忘记或者想查看pm2的命令时,可以使用 --help 来查看
pm2 --help
开机自启
设置开机自启
js
//输入下面命令可以设置开机自启
pm2 startup
//设置失败时,会给出提示,我们将提示内容粘贴到终端运行即可
[PM2] You have to run this command as root。Execute the following command:
sudo su -c "env PATH=$PATH:/home/unitech/.nvm/versions/node/v14.3/bin pm2 startup <distribution>
//直接沾过来运行即可
sudo su -c "env PATH=$PATH:/home/unitech/.nvm/versions/node/v14.3/bin pm2 startup <distribution> -u <user> --hp <home-path>
//启动所有所需的应用程序后,保存应用程序列表,以便在重新启动后重新生成
pm2 save
//要手动恢复以前保存的进程(借助于 `pm2 save`)
pm2 resurrect
//禁止开机启动,删除启动配置
pm2 unstartup
配置脚本和环境变量
项目根目录创建 ecosystem.config.js
文件
js
//使用这个命令会自行创建一个
pm2 ecosystem
运行时直接 pm2 start ecosystem.config.js
即可
下面简单讲讲如何配置,更详细的请查看 这里
js
{
"apps" : [
{
"name" : "my-server", //服务名字
"script" : "./dist/main.js", //执行脚本
"instances": 4, //核心数 "max" 则为全部
//启动应用程序的模式,可以是"cluster"或"fork",默认fork
"exec_mode": "cluster",
//启用监视和重启功能,如果文件夹或子文件夹中的文件发生更改,您的应用程序将重新加载
//不能单纯的设置为true,易导致无限重启,无论是上传还是日志,都会造成不好影响
//"watch": ["dist"],
"ignore_watch": [// 可以设置不用监听的文件
"node_modules",
"public",
"logs"
],
//分钟 (0-59)、小时 (0-23)、一个月中的第几天 (1-31)、月份 (1-12) 、星期几 (0-6) (星期天 为0)
//设置定时重启,具体可以看文档,一般用来解决重启能解决的问题
//例如:老程序内存泄露,一定时间会爆内存,但程序员跑路了,为了保持稳定运行只能重启
"cron_restart": '0 0 * * *',
// 启用/禁用应用程序崩溃或退出时自动重启,默认为true, 发生异常的情况下自动重启
"autorestart": true,
// 设置应用程序异常退出重启的次数,默认15次(从0开始计数),最大异常重启次数,即小于min_uptime运行时间重启次数;
max_restarts: 10,
// 启用/禁用应用程序崩溃或退出时自动重启,默认为true, 发生异常的情况下自动重启
autorestart: true,
//启动应用程序的目录,一般不需要,如果要在一处维护项目,那么这个是需要的
"cwd" : "/root/my-server/",
//设置日志路径,可以方便我们查看一些错误原因或者其他信息
"error_file" : "./log/err.log",
"out_file" : "./log/out.log",
"log_date_format":"YYYY-MM-DD HH:mm Z" //日期格式
//集群状态下合并日志
merge_logs: true,
//环境变量,我们前面的 .env 服务端会被忽略,可以注入这里面的环境变量,可以避免正式服务器信息泄露
//pm2 start process.json --env production,可以选择环境变量
"env": {
"HOST": "192.168.1.1", //出现在程序的host环境变量
"PORT": "3000",
},
"env_production" : {
"NODE_ENV": "production"
}
}
],
//部署配置相关
deploy : {
production : {
"user" : "marshal",// root用户
"host" : ["xxx.xxx.xx.xx"], //ip
"ref" : "origin/master", //分支
"repo" : "git@github.com:Username/repository.git", //仓库
"path" : "/var/www/my-repository", //导入路径
"post-deploy" : "npm install",
}
}
}
配置、部署命令
js
//配置
pm2 deploy production setup
//部署
pm2 deploy production
当然如果嫌弃这个不满足自己的情况,也可以自己编写shell脚本