一、Ubuntu系统环境准备与Node.js安装
在开始部署Node.js应用程序前,必须确保Ubuntu服务器具备完善的运行环境。推荐使用LTS(Long Term Support)版本的Ubuntu系统,如20.04或22.04,这些版本提供长期稳定支持。通过NVM(Node Version Manager)安装Node.js是最佳实践,它允许开发者灵活切换不同Node版本。执行curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
命令安装NVM后,即可使用nvm install --lts
安装最新的LTS版本Node.js。为什么选择NVM而非系统包管理器?因为它能避免权限问题,且支持多版本并行管理。
二、Node.js应用程序部署流程详解
完成环境配置后,需要将开发好的Node.js应用部署到服务器。通过Git克隆项目代码到/var/www
目录,或使用SFTP上传打包后的项目文件。关键步骤包括运行npm install --production
安装生产环境依赖,配置.env
环境变量文件,以及设置适当的文件权限。特别要注意的是,Node.js应用不应以root用户运行,建议创建专用系统用户并赋予必要权限。如何确保依赖安装的完整性?可以通过npm ci
命令替代常规安装,它能严格遵循package-lock.json
确保依赖版本一致性。
三、PM2进程管理器配置与优化
PM2作为Node.js应用的生产级进程管理器,能有效保证应用的高可用性。通过npm install pm2 -g
全局安装后,使用pm2 start app.js --name "my-app"
启动应用。PM2的核心功能包括日志管理(pm2 logs
)、性能监控(pm2 monit
)以及集群模式(pm2 start app.js -i max
)。配置ecosystem.config.js
文件可实现启动参数固化、环境变量管理和错误处理策略设置。当应用意外崩溃时,PM2会自动重启进程,这种守护进程机制大幅提升了服务稳定性。
四、Nginx反向代理与SSL配置
虽然Node.js可以独立处理HTTP请求,但在生产环境中配合Nginx反向代理能获得更好的性能和安全保障。在Ubuntu上通过apt install nginx
安装后,编辑/etc/nginx/sites-available/default
配置文件,添加upstream指向Node.js应用的本地端口(通常是3000或8080)。配置SSL证书时,Certbot工具可以自动完成Let's Encrypt证书申请和Nginx配置更新。为什么需要反向代理?它不仅能卸载SSL加解密负担,还能实现负载均衡、缓存静态资源以及防范DDoS攻击。
五、系统服务集成与开机自启
为确保Node.js应用随系统自动启动,需要将PM2进程注册为系统服务。执行pm2 startup systemd
生成服务配置,通过systemctl enable pm2-root
启用服务。对于需要同时启动的辅助服务(如Redis或MongoDB),应编写单独的Systemd单元文件。监控方面,可配置pm2-logrotate
模块自动切割日志,并结合Ubuntu内置的logrotate
实现二级日志管理。如何验证服务是否配置成功?使用systemctl status pm2-root
检查服务状态,并通过服务器重启测试自启功能。
六、性能监控与故障排查方案
完善的监控体系是保障Node.js应用稳定运行的关键。PM2内置的监控功能配合pm2-plus
云端仪表板可实时查看CPU/内存使用情况。对于深度性能分析,可使用Node.js自带的--inspect
参数启用调试器,或通过clinic.js
工具包进行诊断。日志管理方面,建议将PM2日志与Ubuntu系统日志(syslog)集成,并设置日志级别过滤。当出现高负载时,如何快速定位问题?结合htop
监控系统资源,node -v8-profiler
分析内存泄漏,以及Nginx访问日志分析请求模式。