1.jpg

服务自动化运维

npm script实现服务自动化运维

  1. 项目构建完成之后,就成为待发布的版本,因此版本管理需要考虑,甚至做成自动化的
  2. 最新的代码需要部署到线上机器才能让所有用户访问到
  3. 服务器的部署环节涉及到服务的启动、重启、线上日志管理等需要考虑

版本号

每次构建完的代码都应该有新的版本号;修改版本号直接使用 npm 内置的 version 自命令即可

  1. + "release:patch": "npm version patch && git push && git push --tags",
  2. + "release:minor": "npm version minor && git push && git push --tags",
  3. + "release:major": "npm version major && git push && git push --tags",
  4. "precommit": "lint-staged",

遵循 semver 的版本号规范来方便你管理版本

  1. patch 是更新补丁版本
  2. minor 是更新小版本
  3. major 是更新大版本
  4. 必要的时候,运行 npm run version:patch 来升补丁版本

pm2

  1. 生产环境的服务进程和日志管理领域,pm2 是首选,功能很强大
  2. 开发环境常用的是 nodemon
  1. npm install pm2 --save-dev
  1. 项目根目录下创建 pm2.json,pm2配置文档 http://pm2.keymetrics.io/docs/usage/application-declaration
  1. {
  2. "apps": [
  3. {
  4. "name": "npm-script-workflow",
  5. "script": "./server.js", // 指定了服务脚本为 server.js
  6. "out_file": "./logs/stdout.log", // 日志输出文件路径
  7. "error_file": "./logs/stderr.log",
  8. "log_date_format": "YYYY-MM-DD HH:mm:ss", // 日志时间格式
  9. "instances": 8, // 进程数量 = CPU 8核数
  10. "exec_mode": "cluster", // 启动方式为 cluster
  11. "max_memory_restart": "800M",
  12. "merge_logs": true,
  13. "env": { // 环境变量
  14. "NODE_ENV": "production",
  15. "PORT": 8080,
  16. }
  17. }
  18. ]
  19. }

日志目录

  1. 日志目录/logs
  2. .gitignore忽略 logs
  1. dist
  2. logs

部署命令

  1. 在部署前需要安装最新的依赖,重新构建,然后使用 pm2 重新启动服务即可
  2. 建议有一个集中的 CI 服务器专门负责构建,而部署时就不需要运行 build
  3. 部署运行 npm run deploy
  4. 查看日志 npm run logs
  1. "release:major": "npm version major && git push && git push --tags",
  2. + "predeploy": "yarn && npm run build",
  3. + "deploy": "pm2 restart pm2.json",
  4. + "logs": "tail -f logs/*",