Linux下怎么部署NodeJS

发布时间:2022-01-29 19:45:00 作者:zzz
来源:亿速云 阅读:287
# 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

二、Node.js安装

2.1 通过包管理器安装

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

2.2 使用NVM安装(推荐)

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

2.3 验证安装

node -v  # 应输出v18.x.x
npm -v   # 应输出9.x.x
npx -v

三、项目部署

3.1 代码获取

Git克隆

git clone https://github.com/your/repo.git
cd repo
npm install

直接上传

scp -r ./project nodeuser@server:/opt/app

3.2 依赖安装

生产环境应使用--production标志:

npm ci --only=production
# 或
npm install --production

3.3 环境变量配置

推荐使用.env文件:

# 创建.env文件
cat > .env <<EOF
NODE_ENV=production
PORT=3000
DB_HOST=localhost
DB_USER=appuser
EOF

使用dotenv包在应用中加载:

require('dotenv').config();

四、进程管理

4.1 使用PM2(推荐)

安装PM2:

npm install -g pm2

常用命令:

# 启动应用
pm2 start app.js --name "myapp"

# 查看列表
pm2 list

# 监控日志
pm2 logs

# 设置开机启动
pm2 startup
pm2 save

4.2 Systemd服务

创建服务文件/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

五、Web服务器配置

5.1 Nginx反向代理

示例配置/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

5.2 HTTPS配置(Let’s Encrypt)

安装certbot:

sudo apt install certbot python3-certbot-nginx

获取证书:

sudo certbot --nginx -d example.com

自动续期测试:

sudo certbot renew --dry-run

六、数据库集成

6.1 MongoDB安装

# 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

6.2 Redis安装

sudo apt install redis-server
sudo systemctl start redis
sudo systemctl enable redis

七、监控与日志

7.1 PM2监控

pm2 monit
pm2 install pm2-logrotate

7.2 日志管理

配置日志轮转/etc/logrotate.d/nodeapp

/opt/app/logs/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    copytruncate
}

八、安全加固

8.1 基础安全

# 防火墙设置
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw enable

# 非root用户运行
sudo chown -R nodeuser:nodeuser /opt/app

8.2 Node.js安全

npm audit fix
npx helmet

九、持续集成部署

9.1 GitHub Actions示例

.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

十、性能优化

10.1 Node.js配置

# 增加内存限制
node --max-old-space-size=4096 app.js

10.2 集群模式

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格式编写,涵盖了从环境准备到生产部署的完整流程,包含代码示例、配置片段和实用建议。可根据实际需求调整具体参数和配置细节。

推荐阅读:
  1. Linux下怎么部署springboot项目
  2. linux下如何部署kodexplorer

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux nodejs

上一篇:如何获取Python数组中所有元素及相应的下标索引值

下一篇:Linux系统umount命令怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》