您好,登录后才能下订单哦!
# Linux下怎么部署NodeJS
## 前言
Node.js作为基于Chrome V8引擎的JavaScript运行时环境,已成为现代Web开发中不可或缺的工具。在Linux系统上部署Node.js应用具有天然的性能优势和稳定性保障。本文将全面介绍从环境准备到生产环境优化的完整部署流程,涵盖常见场景的解决方案和最佳实践。
## 一、环境准备
### 1.1 系统要求
- **操作系统**:推荐Ubuntu LTS(20.04/22.04)、CentOS 7+/RHEL 8+等主流发行版
- **硬件配置**:
- 最低配置:1核CPU/1GB内存/10GB存储
- 生产推荐:2核CPU+/4GB内存+/SSD存储
- **网络环境**:需要访问外部软件源(或配置内部镜像)
### 1.2 用户权限管理
建议使用非root用户部署应用:
```bash
# 创建专用用户
sudo useradd -m -s /bin/bash nodeuser
sudo passwd nodeuser
# 添加到sudo组(可选)
sudo usermod -aG sudo nodeuser
Ubuntu/Debian:
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
CentOS/RHEL:
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo yum install -y nodejs
Node Version Manager允许灵活切换版本:
# 安装NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
# 加载环境变量
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# 安装指定版本
nvm install 18.16.0
nvm use 18.16.0
node -v # 应输出v18.x.x
npm -v # 应输出9.x.x
npx -v
Git克隆:
git clone https://github.com/your/repo.git
cd repo
npm install
直接上传:
scp -r ./project nodeuser@server:/opt/app
生产环境应使用--production
标志:
npm ci --only=production
# 或
npm install --production
推荐使用.env
文件:
# 创建.env文件
cat > .env <<EOF
NODE_ENV=production
PORT=3000
DB_HOST=localhost
DB_USER=appuser
EOF
使用dotenv
包在应用中加载:
require('dotenv').config();
安装PM2:
npm install -g pm2
常用命令:
# 启动应用
pm2 start app.js --name "myapp"
# 查看列表
pm2 list
# 监控日志
pm2 logs
# 设置开机启动
pm2 startup
pm2 save
创建服务文件/etc/systemd/system/nodeapp.service
:
[Unit]
Description=Node.js Application
After=network.target
[Service]
User=nodeuser
WorkingDirectory=/opt/app
Environment=NODE_ENV=production
ExecStart=/usr/bin/node /opt/app/index.js
Restart=always
[Install]
WantedBy=multi-user.target
启用服务:
sudo systemctl daemon-reload
sudo systemctl start nodeapp
sudo systemctl enable nodeapp
示例配置/etc/nginx/conf.d/nodeapp.conf
:
server {
listen 80;
server_name example.com;
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 nginx -t
sudo systemctl reload nginx
安装certbot:
sudo apt install certbot python3-certbot-nginx
获取证书:
sudo certbot --nginx -d example.com
自动续期测试:
sudo certbot renew --dry-run
# Ubuntu
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 656408E390CFB1F5
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt update
sudo apt install -y mongodb-org
# 启动服务
sudo systemctl start mongod
sudo systemctl enable mongod
sudo apt install redis-server
sudo systemctl start redis
sudo systemctl enable redis
pm2 monit
pm2 install pm2-logrotate
配置日志轮转/etc/logrotate.d/nodeapp
:
/opt/app/logs/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
copytruncate
}
# 防火墙设置
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable
# 非root用户运行
sudo chown -R nodeuser:nodeuser /opt/app
npm audit fix
npx helmet
.github/workflows/deploy.yml
:
name: Node.js CI/CD
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18
- run: npm ci
- run: npm test
- name: Deploy to Production
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.PROD_HOST }}
username: ${{ secrets.PROD_USER }}
key: ${{ secrets.PROD_SSH_KEY }}
script: |
cd /opt/app
git pull
npm ci --production
pm2 restart myapp
# 增加内存限制
node --max-old-space-size=4096 app.js
const cluster = require('cluster');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
require('./app');
}
netstat -tulnp | grep :3000
kill -9 <PID>
node --inspect app.js
# 使用Chrome DevTools分析
rm -rf node_modules package-lock.json
npm cache clean --force
npm install
本文详细介绍了Linux环境下Node.js应用的完整部署流程。实际部署时,应根据项目需求调整配置参数,并定期更新Node.js版本以获得安全补丁和性能改进。建议结合容器化技术(如Docker)实现更灵活的部署方案。
”`
该文档包含约4500字,采用Markdown格式编写,涵盖了从环境准备到生产部署的完整流程,包含代码示例、配置片段和实用建议。可根据实际需求调整具体参数和配置细节。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。