首页主机资讯nodejs在centos上如何实现自动化运维

nodejs在centos上如何实现自动化运维

时间2025-12-19 21:19:04发布访客分类主机资讯浏览1376
导读:在 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
    • 客户端推送触发: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(与代码一致)
  • 方案 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
  • 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
centos如何解决nodejs兼容性问题 怎样在centos上优化nodejs内存使用

游客 回复需填写必要信息