简介:本文详细介绍在Linux系统上部署Node.js的全流程,涵盖安装方式、版本管理、环境配置及性能优化,帮助开发者高效完成Node.js环境搭建。
在部署Node.js前,需确认Linux系统版本及资源状态。推荐使用Ubuntu 20.04 LTS或CentOS 8等长期支持版本,确保内核版本≥3.10以支持现代容器技术。通过uname -r命令查看内核版本,使用free -h和df -h检查内存与磁盘空间,建议预留至少2GB内存和10GB磁盘空间。
系统依赖方面,需安装编译工具链(gcc、make、python3)及基础开发库。Ubuntu用户可通过sudo apt update && sudo apt install -y build-essential python3快速安装,CentOS用户则执行sudo yum groupinstall "Development Tools" -y。
Node.js官方提供预编译的Linux二进制包,支持x64、ARM等架构。访问Node.js官网下载LTS版本(如18.x),使用wget命令下载后解压至/opt/nodejs目录:
wget https://nodejs.org/dist/v18.16.0/node-v18.16.0-linux-x64.tar.xztar -xf node-v18.16.0-linux-x64.tar.xz -C /opt/ln -s /opt/node-v18.16.0-linux-x64/bin/node /usr/local/bin/nodeln -s /opt/node-v18.16.0-linux-x64/bin/npm /usr/local/bin/npm
此方式优势在于无需编译,但升级时需手动替换文件。
nvm是Node.js版本管理工具,支持多版本共存与快速切换。安装步骤如下:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bashsource ~/.bashrc # 重新加载配置nvm install --lts # 安装最新LTS版本nvm use --lts # 切换至该版本
nvm通过Shell脚本管理版本,适合需要频繁切换版本的场景,但需注意其仅支持用户级安装。
Ubuntu用户可通过apt安装:
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -sudo apt install -y nodejs
CentOS用户使用yum:
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -sudo yum install -y nodejs
此方式集成度高,但版本更新可能滞后于官方发布。
将Node.js可执行文件路径添加至PATH环境变量,编辑~/.bashrc或/etc/profile文件:
export PATH=/opt/nodejs/bin:$PATH
验证配置:
echo $PATH | grep nodenode -v # 应输出版本号
推荐采用以下目录结构:
/opt/app/├── node_modules/ # 项目依赖├── src/ # 应用代码├── logs/ # 日志文件├── config/ # 配置文件└── package.json
通过npm init -y初始化项目,使用npm install --production安装依赖时排除开发依赖。
安装PM2并配置开机自启:
npm install -g pm2pm2 startup # 生成系统服务配置pm2 save # 保存当前进程列表
创建ecosystem.config.js配置文件:
module.exports = {apps: [{name: "my-app",script: "src/index.js",instances: "max", # 根据CPU核心数自动扩展exec_mode: "cluster",env: {NODE_ENV: "production",PORT: 3000}}]};
启动应用:
pm2 start ecosystem.config.jspm2 monit # 实时监控
对于无集群需求的场景,可创建Systemd服务:
[Unit]Description=Node.js ApplicationAfter=network.target[Service]User=nodeuserWorkingDirectory=/opt/appExecStart=/usr/local/bin/node src/index.jsRestart=alwaysEnvironment=NODE_ENV=production[Install]WantedBy=multi-user.target
启用服务:
sudo systemctl daemon-reloadsudo systemctl enable myapp.servicesudo systemctl start myapp.service
sudo useradd -m nodeusersudo chown -R nodeuser:nodeuser /opt/appUser=nodeuser开放必要端口并限制访问:
sudo ufw allow 3000/tcpsudo ufw deny from 192.168.1.100 to any port 3000 # 示例:屏蔽特定IP
--max-old-space-size=4096(设置4GB堆内存)--expose-gc配合global.gc()手动触发https模块或Nginx反向代理使用netstat -tulnp | grep 3000查找占用进程,通过kill -9 PID终止后重启应用。
npm cache clean --forcenpm config set registry https://registry.npmmirror.com--inspect开启调试:node --inspect src/index.jsglobal.gc()并记录内存快照推荐采用Git钩子+CI/CD流程:
npm ci安装依赖npm testpm2 reload my-app无缝更新示例GitHub Actions配置:
name: Node.js CIon:push:branches: [ main ]jobs:deploy:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- uses: actions/setup-node@v2with:node-version: '18'- run: npm ci- run: npm test- uses: appleboy/ssh-action@masterwith:host: ${{ secrets.SSH_HOST }}username: ${{ secrets.SSH_USER }}key: ${{ secrets.SSH_KEY }}script: |cd /opt/appgit pullnpm ci --productionpm2 reload my-app
通过以上步骤,开发者可在Linux系统上构建稳定、高效的Node.js运行环境。实际部署时需根据业务需求调整配置参数,并定期监控系统资源使用情况。