温馨提示×

Ubuntu Node.js如何实现自动化运维

小樊
37
2025-12-06 18:41:52
栏目: 编程语言

Ubuntu 上用 Node.js 落地自动化运维

一 基础运行与自启动

  • 安装运行时:执行 sudo apt update && sudo apt install -y nodejs npm,随后用 node -v、npm -v 校验版本。
  • 进程守护与自启动:使用 PM2 管理进程与开机自启。
    • 安装:sudo npm install -g pm2
    • 启动:pm2 start app.js --name my-app
    • 常用:pm2 list、pm2 logs my-app、pm2 monit、pm2 restart my-app
    • 自启:pm2 startup systemd(按提示执行生成的命令)
  • 备选方案:使用 systemd 原生服务(适合不使用 PM2 的场景)。
    • 新建服务文件:/etc/systemd/system/my-app.service
    • 关键配置:
      • [Unit] After=network.target
      • [Service] Type=simple、User=、WorkingDirectory=/path/to/app、ExecStart=/usr/bin/node /path/to/app/app.js、Restart=always
      • [Install] WantedBy=multi-user.target
    • 操作:sudo systemctl daemon-reload && sudo systemctl enable --now my-app
  • 进程监控工具:命令行可用 htop 实时查看资源占用(sudo apt install htop)。

二 配置与发布自动化

  • 批量配置与编排:使用 Ansible 在多台 Ubuntu 主机上统一安装 Node.js、PM2 并启动应用。
    • 安装:sudo apt install -y software-properties-common && sudo add-apt-repository ppa:ansible/ansible && sudo apt update && sudo apt install -y ansible
    • 示例 Playbook(deploy.yml):
      • hosts: webservers、become: yes
      • 任务:安装 Node.js、全局安装 PM2、用 shell: pm2 start app.js --name my-app 启动
    • 运行:ansible-playbook -i inventory deploy.yml
  • CI/CD 自动化:以 GitHub Actions 为例,提交到 main 分支自动测试、构建并部署。
    • 示例要点:
      • 使用 actions/checkout、actions/setup-node 设置 Node.js 18
      • 安装依赖:npm ci;运行测试:npm test;构建:npm run build
      • 部署步骤:使用 appleboy/scp-action 传输产物,appleboy/ssh-action 远程执行 pm2 restart app
      • 敏感信息(SERVER_HOST、SERVER_USER 等)放入仓库 Secrets 管理
  • PM2 多环境部署:使用 ecosystem.config.js 的 deploy 能力在多服务器间发布与回滚。
    • 示例字段:name、script、deploy.production(user、host、ref、repo、path、post-deploy 执行 npm install && pm2 restart all)
    • 常用命令:pm2 deploy production setup、pm2 deploy production

三 监控与日志体系

  • 应用内指标与可视化:
    • 使用 prom-client 采集 HTTP 请求时延、活跃请求数 等指标,暴露 /metrics 端点供 Prometheus 抓取;在 Grafana 中创建仪表盘并设置告警。
    • 健康检查:提供 /health 端点返回服务状态、启动时间与时间戳,便于负载均衡与监控系统探活。
  • 日志采集与轮转:
    • 结构化日志:使用 Winston/Pino 输出 JSON 日志到文件或控制台,便于检索与聚合。
    • 系统日志:通过 winston-syslog/pino-syslog 将日志发送到 syslog
    • 日志轮转:使用 logrotate 自动切割与压缩日志,示例配置(/etc/logrotate.d/nodejs):
      • /path/to/your/nodejs/app/*.log { daily、rotate 7、compress、missingok、notifempty、create 0640 root adm }
  • 主机与应用监控:
    • PM2 自带日志与资源监控(pm2 logs、pm2 monit)。
    • 系统级监控:安装 NetData(sudo bash <(curl -Ss https://my-netdata.io/kickstart.sh)),访问 http://IP:19999 查看实时指标。

四 安全与高可用建议

  • 安全加固:
    • 强制 HTTPS/HSTS,仅开放 80/443 端口(配合防火墙/安全组);
    • 依赖与系统持续安全更新(npm audit、系统补丁);
    • 接口 限流验证码CSRF 等中间件防护;
    • 运行应用的系统用户遵循最小权限原则(如 www-data/app-user),避免以 root 运行。
  • 高可用与发布策略:
    • 反向代理与负载均衡:使用 Nginx 做反向代理与多实例负载;
    • 容器化与编排:采用 Docker/Kubernetes,设置副本数与 readiness/liveness 探针,实现自动恢复、滚动升级与快速回滚;
    • 云上实践:最小镜像(如 node:alpine)、IAM 最小权限、云监控/日志服务接入、定期快照备份。

0