
服务自动化运维
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
 
distlogs
部署命令
- 在部署前需要安装最新的依赖,重新构建,然后使用 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/*",
