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 最小权限、云监控/日志服务接入、定期快照备份。