CentOS Node.js项目如何管理
小樊
43
2025-11-25 19:12:12
CentOS 上 Node.js 项目的管理实践
一 版本管理
- 使用 NVM(Node Version Manager) 在同一台机器管理多个 Node.js 版本,适合开发与多项目并行:
- 安装与启用:
- 安装:curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
- 启用:执行 source ~/.bash_profile 或 source ~/.bashrc
- 常用命令:
- 安装版本:nvm install 18.17.0 或 nvm install --lts
- 切换版本:nvm use 18.17.0
- 设置默认:nvm alias default 18.17.0
- 查看版本:nvm ls-remote、nvm ls
- 使用 NodeSource 仓库通过 Yum 安装系统级版本(适合稳定生产环境):
- 添加仓库并安装(示例为 18.x):
- curl -sL https://rpm.nodesource.com/setup_18.x | sudo -E bash -
- sudo yum install -y nodejs
- 验证:node -v、npm -v
- 选择建议:开发/多版本并存优先 NVM;追求系统级稳定与自动化依赖处理优先 NodeSource + Yum。
二 依赖管理
- 使用 npm(默认包管理器):
- 初始化:npm init -y
- 安装生产依赖:npm install express --save
- 安装开发依赖:npm install webpack --save-dev
- 更新:npm update
- 卸载:npm uninstall package_name
- 使用 yarn(更快、严格的版本锁定):
- 安装:npm install -g yarn
- 初始化:yarn init
- 安装依赖:yarn add express;开发依赖:yarn add webpack --dev
- 更新:yarn upgrade
- 卸载:yarn remove package_name
- 使用 pnpm(节省磁盘、硬/符号链接共享依赖):
- 安装:npm install -g pnpm
- 安装依赖:pnpm add package-name;开发依赖:pnpm add package-name --save-dev
- 锁文件与一致性:npm 使用 package-lock.json,yarn 使用 yarn.lock,pnpm 使用 pnpm-lock.yaml,提交到代码库以确保各环境依赖一致。
三 进程管理与部署
- 使用 PM2(推荐,具备守护、集群、日志与开机自启):
- 安装:sudo npm install pm2 -g
- 启动:pm2 start app.js --name my-app
- 配置文件 ecosystem.config.js:
- 示例:
- module.exports = { apps: [{ name: ‘my-app’, script: ‘app.js’, instances: ‘max’, exec_mode: ‘cluster’, autorestart: true, watch: false, max_memory_restart: ‘1G’, env: { NODE_ENV: ‘development’ }, env_production: { NODE_ENV: ‘production’ } }] };
- 启动与热环境:pm2 start ecosystem.config.js --env production
- 常用命令:pm2 status、pm2 logs my-app、pm2 restart/stop my-app、pm2 monit
- 开机自启:pm2 startup
- 使用 systemd(系统级服务,适合不依赖 PM2 的场景):
- 创建服务文件:sudo vi /etc/systemd/system/my-nodejs-app.service
- 示例:
- [Unit] Description=My Node.js App;After=syslog.target network.target
- [Service] User=<your_user>;Group=<your_group>;WorkingDirectory=/path/to/app;Environment=NODE_ENV=production;ExecStart=/usr/bin/node /path/to/app/app.js;Restart=always
- [Install] WantedBy=multi-user.target
- 启用与操作:sudo systemctl daemon-reload;sudo systemctl start my-nodejs-app;sudo systemctl enable my-nodejs-app;sudo systemctl status my-nodejs-app
- 部署流程要点:
- 拉取代码:git clone && cd
- 安装依赖:npm install 或 yarn install
- 启动:pm2 start 或 systemctl start my-nodejs-app
- 验证:pm2 status 或 systemctl status my-nodejs-app。
四 反向代理与网络配置
- 使用 Nginx 作为反向代理(提升性能与安全):
- 安装与启停:sudo yum install -y nginx;sudo systemctl start nginx;sudo systemctl enable nginx
- 配置示例(/etc/nginx/conf.d/default.conf 或 /etc/nginx/nginx.conf):
- server { listen 80;server_name your_domain_or_IP;location / { proxy_pass http://localhost:3000;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection ‘upgrade’;proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;} }
- 使配置生效:sudo systemctl reload nginx
- 防火墙放行(如启用 firewalld):
- sudo firewall-cmd --permanent --zone=public --add-service=http
- sudo firewall-cmd --permanent --zone=public --add-service=https
- sudo firewall-cmd --reload。
五 日常运维与最佳实践
- 环境隔离:开发/测试/生产使用不同的 NODE_ENV 与 ecosystem.config.js 配置;PM2 通过 –env production 加载生产环境变量。
- 日志与监控:统一日志路径,使用 pm2 logs 与 pm2 monit 观察内存、CPU 与异常;必要时接入集中式日志系统。
- 安全加固:最小权限运行(systemd 指定 User/Group),隐藏 X-Powered-By,限制请求体大小,启用 Helmet(如适用),定期升级依赖与系统补丁。
- 自动化与发布:使用 Git hooks 或 CI/CD 执行测试、构建与滚动升级;蓝绿/金丝雀发布降低风险。
- 备份与回滚:备份 package.json 与锁文件、环境变量与 Nginx 配置;回滚时优先恢复代码与依赖版本,再重启服务。