奋斗
努力

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

云计算

将 Node.js 项目部署到云服务器(如阿里云 ECS、腾讯云 CVM、AWS EC2 等)的完整流程通常包含以下关键步骤。以下以 Linux 服务器(Ubuntu/Debian) 为例,采用 PM2 作为进程管理器(生产环境推荐方案),并涵盖从基础准备到持续优化的全流程:


✅ 一、前期准备

  1. 购买并配置云服务器

    • 选择操作系统(推荐 Ubuntu 20.04+ 或 CentOS 7+)
    • 开放必要端口(默认 SSH 22,Web 服务 80/443,Node 调试端口等)
    • 配置安全组/防火墙规则(仅开放所需端口)
  2. 本地项目准备

    • 确保 package.json 中 start 脚本正确(如 "start": "node app.js" 或 "start": "pm2 start server.js")
    • 检查环境变量(.env 文件应通过环境变量注入,不要硬编码敏感信息)
    • 测试本地运行:npm install && npm start

✅ 二、上传代码到服务器

方法 A:Git 拉取(推荐)

# 在服务器上初始化仓库或克隆已有项目
git clone <your-repo-url> /var/www/my-node-app
cd /var/www/my-node-app
git checkout main  # 或对应分支

方法 B:SCP/SFTP 上传

# 本地执行
scp -r ./dist/* user@your-server-ip:/var/www/my-node-app/
# 或打包后传输
tar czf project.tar.gz . && scp project.tar.gz user@server:/tmp/
ssh user@server 'cd /var/www && tar xzf /tmp/project.tar.gz'

💡 建议:使用 .gitignore 排除 node_modules、logs、.env 等,避免重复上传。


✅ 三、安装依赖与运行时环境

  1. 安装 Node.js & npm

    # 推荐用 nvm 管理版本(避免系统冲突)
    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
    source ~/.bashrc
    nvm install --lts
    nvm use --lts
    node -v && npm -v
  2. 安装 PM2(进程管理器)

    sudo npm install -g pm2
  3. 安装项目依赖

    cd /var/www/my-node-app
    npm ci  # 优先使用 package-lock.json,保证一致性
    # 或 npm install --production
  4. 配置环境变量

    • 创建 .env 文件(不提交到 Git)或使用系统级环境变量
    • 示例:nano /var/www/my-node-app/.env
      NODE_ENV=production
      PORT=3000
      DB_HOST=localhost
      DB_USER=root
      DB_PASS=your_secure_password
      JWT_SECRET=your_jwt_secret_key
    • 启动时由 PM2 自动加载(需配置 ecosystem.config.js,见下文)

✅ 四、配置并启动应用(PM2)

  1. 创建 PM2 配置文件(推荐方式)

    // ecosystem.config.js
    module.exports = {
     apps: [{
       name: 'my-node-app',
       script: './app.js',
       instances: 2,        // 多实例负载均衡(可选)
       exec_mode: 'cluster',// 或 'fork'
       env: {
         NODE_ENV: 'production',
         PORT: 3000
       },
       env_production: {
         NODE_ENV: 'production',
         DB_HOST: process.env.DB_HOST,
         // ...其他 prod 变量
       }
     }]
    };
  2. 启动应用

    pm2 start ecosystem.config.js
    pm2 save          # 保存配置,开机自启
    pm2 startup       # 生成 systemd 命令并执行(根据提示操作)
  3. 查看状态

    pm2 list
    pm2 logs my-node-app
    pm2 monit         # 实时监控资源

✅ 五、反向X_X与 HTTPS(Nginx + Let’s Encrypt)

⚠️ 直接暴露 Node 端口不安全,必须通过 Nginx 做反向X_X

  1. 安装 Nginx

    sudo apt update && sudo apt install nginx certbot python3-certbot-nginx -y
  2. 配置 Nginx 站点

    # /etc/nginx/sites-available/my-node-app
    server {
     listen 80;
     server_name your-domain.com www.your-domain.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;
     }
    
     # WebSocket 支持(如需)
     location /ws {
       proxy_pass http://localhost:3000/ws;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "Upgrade";
     }
    }
  3. 启用并测试配置

    sudo ln -s /etc/nginx/sites-available/my-node-app /etc/nginx/sites-enabled/
    sudo nginx -t && sudo systemctl reload nginx
  4. 申请免费 SSL 证书

    sudo certbot --nginx -d your-domain.com -d www.your-domain.com
    # 按提示输入邮箱,自动配置重定向和证书更新
  5. 验证访问

    • 浏览器访问 https://your-domain.com
    • 检查日志:sudo tail -f /var/log/nginx/access.log

✅ 六、监控与运维优化

工具 用途
PM2 进程管理、日志、重启、扩容
Nginx 反向X_X、静态文件缓存、限流
Supervisor/Systemd 替代 PM2 的系统级守护(可选)
Prometheus + Grafana 指标采集与可视化监控
ELK / Loki 集中式日志管理
Uptime Kuma / Pingdom 外部可用性监控

✅ 定期维护建议:

  • 设置自动更新证书:certbot renew --dry-run(实际每月自动运行)
  • 配置日志轮转:logrotate 处理 Nginx/PM2 日志
  • 备份数据库与重要数据(配合 cron 定时任务)

🔁 七、CI/CD 自动化(进阶)

结合 GitHub Actions / GitLab CI 实现自动部署:

# .github/workflows/deploy.yml
name: Deploy to Server
on:
  push:
    branches: [ main ]
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Deploy via SSH
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.SERVER_IP }}
          username: ${{ secrets.SSH_USER }}
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          script: |
            cd /var/www/my-node-app
            git pull origin main
            npm ci --production
            pm2 restart my-node-app

📌 注意事项

  • ❗ 永远不要在代码中明文存储密码/API Key
  • ❗ 生产环境禁用 NODE_ENV=development
  • ❗ 限制服务器资源(CPU/内存),防止 DDoS 攻击
  • ✅ 使用 Docker 可进一步提升可移植性与隔离性(适合复杂场景)

需要我提供:

  • 完整的 ecosystem.config.js 模板?
  • Dockerfile + docker-compose.yml 部署方案?
  • 特定云厂商(阿里云/腾讯云/AWS)的专属配置指南?

欢迎告诉我你的具体需求,我可以进一步定制! 🚀

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