Node.js项目部署到云服务器的完整流程有哪些?

将 Node.js 项目部署到云服务器(如阿里云 ECS、腾讯云 CVM、AWS EC2 等)的完整流程通常包含以下关键步骤。以下以 Ubuntu 20.04/22.04 为例,采用主流生产级方案(PM2 + Nginx + HTTPS):


✅ 一、前期准备

  1. 购买并配置云服务器

    • 选择操作系统(推荐 Ubuntu LTS)
    • 开放必要端口:22(SSH)、80(HTTP)、443(HTTPS)、自定义端口(如 3000
    • 配置安全组/防火墙规则
  2. 本地准备项目

    • 确保项目依赖已打包(package.json 存在)
    • 使用 .env 管理敏感配置(避免硬编码)
    • 测试本地运行正常:npm startnode app.js

✅ 二、上传代码到服务器

方式一:Git 拉取(推荐)

# 在服务器上克隆仓库
git clone https://github.com/yourname/your-project.git /var/www/your-project
cd /var/www/your-project

方式二:SCP/SFTP 传输

# 本地执行
scp -r ./dist/* user@your-server:/var/www/your-project/
# 或使用 rsync 增量同步
rsync -avz ./ dist/ user@server:/var/www/your-project/

💡 建议:生产环境使用 Git 拉取 + CI/CD 自动部署更可靠。


✅ 三、安装基础依赖

# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装 Node.js(推荐用 nvm 或官方源)
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs

# 验证版本
node -v  # 应 ≥ v18 LTS
npm -v

# 安装 PM2(进程管理器)
sudo npm install -g pm2

⚠️ 注意:优先使用 nvm 管理多版本 Node,避免全局污染:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
nvm install --lts

✅ 四、安装并配置数据库(如需)

  • MySQL/MariaDB
    sudo apt install mysql-server
    sudo mysql_secure_installation
  • PostgreSQL
    sudo apt install postgresql postgresql-contrib
  • 创建数据库与用户,导入 schema(.sql 文件或通过 ORM 迁移)

🔐 修改默认密码!禁止 root 远程登录。


✅ 五、配置应用环境变量

在项目根目录创建 .env 文件(切勿提交到 Git):

NODE_ENV=production
PORT=3000
DATABASE_URL=mysql://user:pass@localhost/dbname
JWT_SECRET=your-secret-key
REDIS_URL=redis://localhost:6379

启动时加载:

pm2 start app.js --env production
# 或配置 package.json scripts:
# "start": "pm2 start app.js --env production"

✅ 六、使用 PM2 启动应用

# 启动应用(假设主入口为 app.js)
pm2 start app.js --name my-app --env production

# 查看状态
pm2 status
pm2 logs my-app

# 设置开机自启
pm2 startup
pm2 save

✅ 推荐配置 ecosystem.config.js 实现统一管理:

module.exports = {
  apps: [{
    name: 'my-app',
    script: 'app.js',
    instances: 2,        // 多实例负载均衡
    exec_mode: 'cluster',// 集群模式
    env: {
      NODE_ENV: 'production',
      PORT: 3000
    },
    error_file: './logs/error.log',
    out_file: './logs/out.log'
  }]
};
// 启动:pm2 start ecosystem.config.js

✅ 七、反向X_X:Nginx 配置(必备)

1. 安装 Nginx

sudo apt install nginx -y

2. 创建站点配置 /etc/nginx/sites-available/my-app

server {
    listen 80;
    server_name your-domain.com www.your-domain.com;

    location / {
        proxy_pass http://127.0.0.1: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;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 静态资源缓存优化
    location /static/ {
        alias /var/www/your-project/dist/static/;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }
}

3. 启用站点 & 重载

sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/
sudo nginx -t          # 检查配置语法
sudo systemctl reload nginx

✅ 八、配置 SSL 证书(Let’s Encrypt 免费)

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your-domain.com -d www.your-domain.com

✅ 自动完成:

  • 生成证书
  • 配置 HTTPS
  • 自动续期(certbot renew 由 cron 定时执行)

✅ 九、安全加固建议

措施 操作
禁用 root SSH 登录 /etc/ssh/sshd_configPermitRootLogin no
改用密钥认证 ssh-keygen + authorized_keys
安装 fail2ban sudo apt install fail2ban
限制 IP 访问 UFW 防火墙:ufw allow from 1.2.3.4 to any port 22
定期更新系统 unattended-upgrades 启用自动安全补丁

✅ 十、监控与维护

  • 日志监控pm2 logs, journalctl -u nginx
  • 性能监控
    • 轻量:htop, pm2 monit
    • 专业:Prometheus + Grafana + Node Exporter
  • 备份策略
    • 数据库每日自动备份(mysqldump/pg_dump + cron)
    • 代码通过 Git 历史保留
    • 重要数据异地存储(如 OSS/S3)

🔄 可选进阶:CI/CD 自动化部署

使用 GitHub Actions + SSH 自动部署:

# .github/workflows/deploy.yml
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Deploy via SSH
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.HOST }}
          username: ${{ secrets.USER }}
          key: ${{ secrets.SSH_KEY }}
          script: |
            cd /var/www/your-project
            git pull origin main
            npm ci --only=production
            pm2 restart my-app

需要我针对你的具体场景(如:使用 Docker?TypeScript 项目?微服务架构?)提供定制化部署脚本或配置文件模板吗?

未经允许不得转载:CLOUD技术博 » Node.js项目部署到云服务器的完整流程有哪些?