简介:本文详细讲解Linux系统中Node.js的部署方法,涵盖环境准备、安装配置、版本管理及生产环境优化等核心环节,提供可落地的技术方案。
Node.js官方支持Linux x64架构,推荐使用Ubuntu 20.04 LTS/CentOS 8等长期维护版本。通过uname -m确认系统架构,使用cat /etc/os-release查看系统版本。建议配置至少2GB内存和20GB磁盘空间,可通过free -h和df -h检查资源。
基础依赖包括编译工具和安全库:
# Ubuntu/Debian系统sudo apt updatesudo apt install -y build-essential curl git libssl-dev# CentOS/RHEL系统sudo yum groupinstall -y "Development Tools"sudo yum install -y curl git openssl-devel
访问Node.js官网下载LTS版本,以18.x为例:
wget https://nodejs.org/dist/v18.17.0/node-v18.17.0-linux-x64.tar.xztar -xf node-v18.17.0-linux-x64.tar.xzsudo mv node-v18.17.0-linux-x64 /opt/nodejsecho 'export PATH=/opt/nodejs/bin:$PATH' | sudo tee /etc/profile.d/nodejs.shsource /etc/profile.d/nodejs.sh
验证安装:
node -v # 应输出v18.17.0npm -v # 应输出9.6.0+
NVM支持多版本共存和快速切换:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bashsource ~/.bashrcnvm install --ltsnvm use --lts
常用命令:
nvm list # 查看已安装版本nvm install 16.20.0 # 安装特定版本nvm alias default 18.17.0 # 设置默认版本
Ubuntu仓库版本可能滞后:
sudo apt install -y nodejs npm
CentOS需启用EPEL仓库:
sudo yum install -y epel-releasesudo yum install -y nodejs npm
推荐标准布局:
/opt/myapp/├── src/ # 应用代码├── node_modules/ # 依赖包├── logs/ # 日志文件├── config/ # 配置文件└── package.json # 项目描述
sudo npm install -g pm2pm2 start app.js --name "myapp"pm2 save # 保存进程列表pm2 startup # 生成开机启动脚本sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u root --hp /root
创建/etc/systemd/system/myapp.service:
[Unit]Description=Node.js ApplicationAfter=network.target[Service]Environment=NODE_ENV=productionWorkingDirectory=/opt/myappExecStart=/usr/bin/node src/app.jsRestart=alwaysUser=nodeuserGroup=nodegroup[Install]WantedBy=multi-user.target
启用服务:
sudo systemctl daemon-reloadsudo systemctl start myappsudo systemctl enable myapp
node --max-old-space-size=4096 app.jspm2 monit或htoppm2 start app.js --max-memory-restart 2G配置winston日志库示例:
const winston = require('winston');const logger = winston.createLogger({level: 'info',format: winston.format.json(),transports: [new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),new winston.transports.File({ filename: 'logs/combined.log' })]});
--inspect=0npm outdated + npm update| 现象 | 解决方案 | |
|---|---|---|
| 端口冲突 | `netstat -tulnp | grep :3000` + 修改端口 |
| 权限错误 | chown -R nodeuser:nodegroup /opt/myapp |
|
| 依赖缺失 | 删除node_modules后重新npm install |
|
| 内存溢出 | 增加堆内存或优化代码 |
node -e "console.log(os.loadavg())"on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3- uses: actions/setup-node@v3with:node-version: '18'- run: npm ci- run: npm test
2. 镜像部署方案:```dockerfileFROM node:18-alpineWORKDIR /appCOPY package*.json ./RUN npm install --productionCOPY . .EXPOSE 3000CMD ["node", "src/app.js"]
本文提供的方案经过实际生产环境验证,建议根据具体业务需求选择安装方式。对于关键业务系统,推荐采用NVM管理版本+PM2进程管理+Systemd服务的组合方案,配合完善的监控体系,可实现99.9%以上的可用性保障。