logo

Node.js项目云服务器部署全指南:从本地到生产环境的完整实践

作者:carzy2025.10.10 15:48浏览量:1

简介:本文详细讲解将Node.js项目部署到云服务器的完整流程,涵盖环境准备、安全配置、自动化部署等关键环节,提供可复制的标准化操作方案。

一、部署前的核心准备工作

1.1 云服务器选型与配置

选择云服务器时需考虑三个核心要素:CPU核心数(建议2核起)、内存容量(4GB以上适合中小型项目)、网络带宽(按实际流量预估)。以阿里云ECS为例,推荐使用CentOS 7/8或Ubuntu 20.04 LTS系统,这些系统对Node.js有完善的兼容性支持。

配置实例时需特别注意:安全组规则要开放SSH(22)、HTTP(80)、HTTPS(443)及项目自定义端口(如3000)。建议初始配置时选择按量付费模式进行测试,确认无误后再转为包年包月。

1.2 本地项目规范化

在部署前需完成三项标准化工作:

  1. 版本控制:确保代码已提交至Git仓库,推荐使用语义化版本号(如v1.2.0)
  2. 依赖管理:执行npm install --production生成精简的node_modules
  3. 环境变量:创建.env.production文件,使用dotenv包管理生产环境配置

示例.env配置:

  1. NODE_ENV=production
  2. DB_HOST=127.0.0.1
  3. DB_PORT=3306
  4. JWT_SECRET=your_secure_key

二、服务器环境搭建

2.1 基础环境配置

通过SSH连接服务器后,执行以下步骤:

  1. # 更新系统包
  2. sudo apt update && sudo apt upgrade -y
  3. # 安装Node.js(使用nvm管理版本)
  4. curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
  5. source ~/.bashrc
  6. nvm install --lts
  7. # 安装PM2进程管理器
  8. npm install pm2 -g

2.2 安全加固措施

实施五项关键安全配置:

  1. 创建专用部署用户:
    1. sudo adduser deployer
    2. sudo usermod -aG sudo deployer
  2. 配置SSH密钥认证,禁用密码登录
  3. 安装fail2ban防止暴力破解
  4. 配置防火墙规则:
    1. sudo ufw allow 22/tcp
    2. sudo ufw allow 80/tcp
    3. sudo ufw allow 443/tcp
    4. sudo ufw enable
  5. 定期更新系统补丁(设置cron每周自动更新)

三、项目部署实施

3.1 代码传输与依赖安装

推荐使用rsync进行高效传输:

  1. rsync -avz --exclude='node_modules/' --exclude='.env' /local/path/ deployer@server_ip:/home/deployer/app

在服务器端执行:

  1. cd /home/deployer/app
  2. npm install --production

3.2 PM2进程管理配置

创建ecosystem.config.js配置文件:

  1. module.exports = {
  2. apps: [{
  3. name: 'my-node-app',
  4. script: 'app.js',
  5. instances: 'max', // 或指定具体数量
  6. exec_mode: 'cluster',
  7. env: {
  8. NODE_ENV: 'production',
  9. PORT: 3000
  10. },
  11. error_file: '/var/log/my-app-err.log',
  12. out_file: '/var/log/my-app-out.log'
  13. }]
  14. };

启动应用:

  1. pm2 start ecosystem.config.js
  2. pm2 save
  3. pm2 startup # 生成开机自启命令并执行

四、生产环境优化

4.1 反向代理配置

使用Nginx作为反向代理:

  1. server {
  2. listen 80;
  3. server_name yourdomain.com;
  4. location / {
  5. proxy_pass http://127.0.0.1:3000;
  6. proxy_http_version 1.1;
  7. proxy_set_header Upgrade $http_upgrade;
  8. proxy_set_header Connection 'upgrade';
  9. proxy_set_header Host $host;
  10. proxy_cache_bypass $http_upgrade;
  11. }
  12. }

4.2 日志管理方案

实施分级日志存储

  1. # 创建日志目录
  2. sudo mkdir /var/log/myapp
  3. sudo chown deployer:deployer /var/log/myapp
  4. # 配置logrotate
  5. sudo nano /etc/logrotate.d/myapp

logrotate配置示例:

  1. /var/log/myapp/*.log {
  2. daily
  3. missingok
  4. rotate 14
  5. compress
  6. delaycompress
  7. notifempty
  8. create 644 deployer deployer
  9. sharedscripts
  10. postrotate
  11. pm2 reloadLogs
  12. endscript
  13. }

五、持续集成部署方案

5.1 GitHub Actions工作流

创建.github/workflows/deploy.yml:

  1. name: Deploy to Production
  2. on:
  3. push:
  4. branches: [ main ]
  5. jobs:
  6. deploy:
  7. runs-on: ubuntu-latest
  8. steps:
  9. - uses: actions/checkout@v2
  10. - name: Install Node.js
  11. uses: actions/setup-node@v2
  12. with:
  13. node-version: '16'
  14. - run: npm ci
  15. - run: npm run build
  16. - name: Deploy to Server
  17. uses: appleboy/ssh-action@master
  18. with:
  19. host: ${{ secrets.SERVER_IP }}
  20. username: deployer
  21. key: ${{ secrets.SSH_PRIVATE_KEY }}
  22. script: |
  23. cd /home/deployer/app
  24. git pull origin main
  25. npm install --production
  26. pm2 reload my-node-app

5.2 监控与告警配置

设置PM2监控:

  1. pm2 monitor

配置Prometheus+Grafana监控方案:

  1. 安装prom-client包
  2. 创建metrics端点:
    ```javascript
    const promClient = require(‘prom-client’);
    const collectDefaultMetrics = promClient.collectDefaultMetrics;

collectDefaultMetrics();

app.get(‘/metrics’, (req, res) => {
res.set(‘Content-Type’, promClient.register.contentType);
res.end(promClient.register.metrics());
});

  1. # 六、常见问题解决方案
  2. ## 6.1 端口冲突处理
  3. 检查端口占用:
  4. ```bash
  5. sudo netstat -tulnp | grep LISTEN
  6. # 或
  7. sudo ss -tulnp | grep LISTEN

强制终止进程:

  1. sudo fuser -k 3000/tcp

6.2 内存泄漏排查

使用PM2内存分析:

  1. pm2 monit
  2. pm2 log --lines 100
  3. # 生成堆快照
  4. pm2 install pm2-logrotate
  5. pm2 set pm2-logrotate:max_size 10M

6.3 依赖问题解决

当出现Error: Cannot find module时:

  1. 删除node_modules和package-lock.json
  2. 重新执行npm install --production
  3. 检查node版本是否与开发环境一致

七、部署后验证清单

完成部署后需执行十项验证:

  1. 访问测试:curl http://localhost:3000
  2. 健康检查端点测试
  3. 数据库连接验证
  4. 第三方API调用测试
  5. 文件上传功能测试
  6. 邮件发送功能验证
  7. 性能基准测试(使用ab或wrk)
  8. 安全扫描(使用nmap或sslscan)
  9. 日志完整性检查
  10. 备份策略验证

通过以上系统化的部署流程,开发者可以建立稳定可靠的Node.js云服务环境。建议每季度进行一次部署流程回顾,根据项目发展调整资源配置和监控策略。对于高可用性要求的项目,可考虑实施蓝绿部署或金丝雀发布等高级部署策略。

相关文章推荐

发表评论

活动