nodejs在centos上如何实现自动化运维
导读:在 CentOS 上用 Node.js 落地自动化运维 一 基础环境与安全加固 安装 Node.js 与包管理 推荐用 nvm 管理版本:curl -o- https://raw.githubusercontent.com/nvm-sh...
在 CentOS 上用 Node.js 落地自动化运维
一 基础环境与安全加固
- 安装 Node.js 与包管理
- 推荐用 nvm 管理版本:curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash & & source ~/.bashrc & & nvm install --lts & & npm i -g pm2 yarn
- 或采用 NodeSource 仓库安装(示例为 Node.js 16):curl -fsSL https://rpm.nodesource.com/setup_16.x | sudo bash - & & sudo yum install -y nodejs npm
- 防火墙放行
- CentOS 使用 firewalld:sudo firewall-cmd --permanent --add-service=http & & sudo firewall-cmd --permanent --add-service=https & & sudo firewall-cmd --reload
- 安全基线
- 禁用 root SSH 登录,使用普通用户 + sudo;开启 SSH 密钥 登录;仅开放必要端口(如 22/80/443/3000)
二 进程管理与自恢复
- 使用 PM2 托管 Node.js 进程
- 启动与守护:pm2 start app.js --name “my-api”;pm2 list;pm2 logs;pm2 monit
- 零停机与自恢复:pm2 reload all;pm2 startup(生成开机自启命令,按提示执行);pm2 save
- 生产优化:pm2 start app.js -i max(集群模式);pm2 start app.js --max-memory-restart 512M
- 日志轮转:pm2 install pm2-logrotate;pm2 set pm2-logrotate:max_size 10M;pm2 set pm2-logrotate:retain 7
三 自动化部署方案
- 方案 A Git Hooks 轻量自动部署(服务器侧)
- 创建裸仓库:git init --bare /var/repo/myapp.git
- 编写钩子 /var/repo/myapp.git/hooks/post-receive(示例)
- #!/usr/bin/env bash
set -e
WORK_TREE=/var/www/myapp/releases/$(date +%Y%m%d%H%M%S)
mkdir -p “$WORK_TREE”
git --git-dir=/var/repo/myapp.git --work-tree=“$WORK_TREE” checkout -f
ln -sfn “$WORK_TREE” /var/www/myapp/current
chown -R myapp:myapp /var/www/myapp
重启服务(见下一节 systemd)
systemctl --user restart myapp || sudo systemctl restart myapp echo “$(date): deployed $WORK_TREE” > > /var/log/myapp-deploy.log
- #!/usr/bin/env bash
set -e
WORK_TREE=/var/www/myapp/releases/$(date +%Y%m%d%H%M%S)
mkdir -p “$WORK_TREE”
git --git-dir=/var/repo/myapp.git --work-tree=“$WORK_TREE” checkout -f
ln -sfn “$WORK_TREE” /var/www/myapp/current
chown -R myapp:myapp /var/www/myapp
- 客户端推送触发:git remote add prod root@server:/var/repo/myapp.git & & git push prod main
- 方案 B GitHub Webhooks(Node.js 服务监听)
- 服务端监听脚本 deploy.js(使用 github-webhook-handler)
- const http = require(‘http’); const createHandler = require(‘github-webhook-handler’); const handler = createHandler({ path: ‘/autodeploy’, secret: ‘YOUR_SECRET’ } ); http.createServer((req,res)=> handler(req,res,()=> res.end(‘404’))).listen(7777); handler.on(‘push’, (e)=> { /* 执行 git pull / npm install / 重启服务 */ } );
- GitHub 仓库 Webhooks 配置:Payload URL(http://your-domain/autodeploy)、Content type(application/json)、Secret(与代码一致)
- 服务端监听脚本 deploy.js(使用 github-webhook-handler)
- 方案 C 远程 CI/CD(GitHub Actions 示例)
- 使用 ssh-action 执行远程命令:git pull、yarn/npm install --production、pm2 reload all
- 适合多机、多环境、审批与回滚流程
四 反向代理与发布编排
- Nginx 反向代理与健康检查
- /etc/nginx/conf.d/myapp.conf
- server { listen 80; server_name _; location / { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection ‘upgrade’; } location /healthz { access_log off; return 200 “OK”; } }
- 语法检查与生效:nginx -t & & systemctl reload nginx
- /etc/nginx/conf.d/myapp.conf
- systemd 托管 Node 服务(/etc/systemd/system/myapp.service)
- [Unit] Description=MyApp Node.js Service; After=network.target
- [Service] ExecStart=/usr/bin/node /var/www/myapp/current/app.js;
WorkingDirectory=/var/www/myapp/current
- Restart=always; User=myapp; Environment=NODE_ENV=production
- [Install] WantedBy=multi-user.target
- 启用:systemctl daemon-reload & & systemctl enable --now myapp;查看日志:journalctl -u myapp -f
五 监控告警与可观测性
- 进程与应用监控
- PM2 内置监控:pm2 monit;日志集中:pm2 logs;结合 pm2-logrotate 控制日志体积与保留
- 指标与告警:接入 PM2 Keymetrics 或自建 Prometheus + Grafana(Node Exporter + 应用指标暴露)
- 系统层诊断
- 动态追踪与排障:strace -p -v -s 2048;性能分析可用 perf/systemtap/eBPF 等工具
- 告警落地
- 结合日志关键字、HTTP 健康检查失败、进程异常退出、内存阈值等触发 企业微信/钉钉/Slack 告警(通过脚本或 webhook 推送)
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: nodejs在centos上如何实现自动化运维
本文地址: https://pptw.com/jishu/776663.html
