服务自动化运维
npm script实现服务自动化运维
- 项目构建完成之后,就成为待发布的版本,因此版本管理需要考虑,甚至做成自动化的
- 最新的代码需要部署到线上机器才能让所有用户访问到
- 服务器的部署环节涉及到服务的启动、重启、线上日志管理等需要考虑
版本号
每次构建完的代码都应该有新的版本号;修改版本号直接使用 npm 内置的 version 自命令即可
+ "release:patch": "npm version patch && git push && git push --tags",
+ "release:minor": "npm version minor && git push && git push --tags",
+ "release:major": "npm version major && git push && git push --tags",
"precommit": "lint-staged",
遵循 semver 的版本号规范来方便你管理版本
- patch 是更新补丁版本
- minor 是更新小版本
- major 是更新大版本
- 必要的时候,运行 npm run version:patch 来升补丁版本
pm2
npm install pm2 --save-dev
- 项目根目录下创建 pm2.json,pm2配置文档 http://pm2.keymetrics.io/docs/usage/application-declaration
{
"apps": [
{
"name": "npm-script-workflow",
"script": "./server.js", // 指定了服务脚本为 server.js
"out_file": "./logs/stdout.log", // 日志输出文件路径
"error_file": "./logs/stderr.log",
"log_date_format": "YYYY-MM-DD HH:mm:ss", // 日志时间格式
"instances": 8, // 进程数量 = CPU 8核数
"exec_mode": "cluster", // 启动方式为 cluster
"max_memory_restart": "800M",
"merge_logs": true,
"env": { // 环境变量
"NODE_ENV": "production",
"PORT": 8080,
}
}
]
}
日志目录
- 日志目录
/logs
- .gitignore忽略 logs
dist
logs
部署命令
- 在部署前需要安装最新的依赖,重新构建,然后使用 pm2 重新启动服务即可
- 建议有一个集中的 CI 服务器专门负责构建,而部署时就不需要运行 build
- 部署运行
npm run deploy
- 查看日志
npm run logs
"release:major": "npm version major && git push && git push --tags",
+ "predeploy": "yarn && npm run build",
+ "deploy": "pm2 restart pm2.json",
+ "logs": "tail -f logs/*",