温馨提示×

Debian下Node.js项目如何部署到云

小樊
39
2025-12-04 19:38:55
栏目: 云计算

Debian云服务器上部署Node.js项目的实操指南

一 准备与基础环境

  • 更新系统并安装基础工具
    • 执行:sudo apt update && sudo apt upgrade -y && sudo apt install -y curl wget git build-essential
  • 安装 Node.js(两种常用方式,二选一)
    • 方式A NodeSource 仓库(系统级,便于多用户与系统服务)
      • 示例(LTS):curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - && sudo apt-get install -y nodejs
    • 方式B NVM(用户级,便于多版本并存)
      • 安装:curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
      • 加载:source ~/.bashrc
      • 安装LTS:nvm install --lts && nvm use --lts && nvm alias default node
  • 验证:node -vnpm -v
  • 全局包与权限(避免 sudo 全局安装)
    • 配置:mkdir ~/.npm-global && npm config set prefix '~/.npm-global'
    • 写入 PATH:echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc && source ~/.bashrc
    • 升级与常用工具:npm install -g npm@latest pm2

二 部署与进程管理

  • 上传与构建
    • 方式1 Git:git clone <repo> /opt/myapp && cd /opt/myapp
    • 方式2 上传包:tar -xvf project.tar.gz -C /opt && cd /opt/project
    • 安装依赖:npm ci --only=production(或 npm install 含 devDependencies)
    • 构建步骤(如有):npm run build
  • 用 PM2 启动与守护
    • 基本:pm2 start app.js --name "myapp"pm2 start npm --name "myapp" -- run start
    • 配置文件 ecosystem.config.js(推荐)
      • 示例:
        module.exports = {
          apps: [{
            name: 'myapp',
            script: 'app.js',
            instances: 'max',
            exec_mode: 'cluster',
            autorestart: true,
            watch: false,
            max_memory_restart: '1G',
            env: { NODE_ENV: 'development' },
            env_production: { NODE_ENV: 'production', PORT: 3000 }
          }]
        };
        
      • 启动:pm2 start ecosystem.config.js --env production
    • 常用运维:pm2 listpm2 logs myapppm2 restart/reload myapppm2 monit
    • 开机自启:pm2 startup 并按提示执行生成的命令

三 反向代理与域名 HTTPS

  • 安装 Nginx:sudo apt install -y nginx
  • 站点配置 /etc/nginx/sites-available/default
    server {
      listen 80;
      server_name your_domain_or_ip;
    
      location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        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;
      }
    }
    
  • 生效:sudo nginx -t && sudo systemctl reload nginx
  • 防火墙放行:sudo ufw allow 'Nginx Full'
  • 免费 HTTPS(Certbot)
    • 安装:sudo apt install -y certbot python3-certbot-nginx
    • 申请并自动配置:sudo certbot --nginx -d your_domain_or_ip
    • 自动续期(建议):sudo crontab -e 加入 0 12 * * * /usr/bin/certbot renew --quiet

四 自动化部署与多实例扩展

  • 零停机发布(PM2 部署)
    • ecosystem.config.js 增加:
      deploy: {
        production: {
          user: 'deploy',
          host: 'YOUR_SERVER_IP',
          ref: 'origin/main',
          repo: 'git@github.com:org/repo.git',
          path: '/opt/myapp',
          'post-deploy': 'npm ci --only=production && pm2 reload ecosystem.config.js --env production'
        }
      }
      
    • 首次:pm2 deploy production setup
    • 更新:pm2 deploy production update
  • 多实例与负载均衡
    • PM2 集群:pm2 start app.js -i max 或在配置中 instances: 'max', exec_mode: 'cluster'
    • 多机负载均衡(Nginx)
      upstream node_app {
        server 10.0.0.11:3000;
        server 10.0.0.12:3000;
      }
      server {
        listen 80;
        location / { proxy_pass http://node_app; }
      }
      
    • 重启 Nginx:sudo systemctl reload nginx
  • 可选监控(Prometheus + Grafana)
    • 在应用中引入 prom-client 暴露指标,Prometheus 抓取 :3000/metrics,Grafana 可视化

五 常见问题与排查清单

  • 端口与防火墙
    • 云厂商安全组/本机防火墙需放行 80/443;应用端口(如 3000)仅在 127.0.0.1 监听更安全,由 Nginx 反向代理对外暴露
  • 权限与全局包
    • 避免 sudo npm -g;使用 NVM 或配置 ~/.npm-global 的 PATH
  • 环境变量与构建
    • 区分 envenv_production;前端静态资源构建产物路径与 publicdist 保持一致
  • 日志与故障定位
    • pm2 logs myapp -fpm2 monit;Nginx 错误日志:/var/log/nginx/error.log
  • 优雅重启与回滚
    • 发布用 pm2 reload(零停机);回滚执行 pm2 deploy production revert
  • 内存与重启策略
    • 配置 max_memory_restart;必要时增加实例数或垂直扩容

0