NodeJS全栈开发面试题讲解——P7 DevOps 与部署和跨域等

7.1 如何部署 Node.js 项目到生产环境?用过哪些工具?

面试官您好,我部署 Node.js 项目通常分为 构建 → 上传 → 启动服务 三步,常用工具包括 PM2、Nginx、Docker、Git Hooks、CI/CD 工具


🛠️ 主要部署步骤:

  1. 构建前端(如 Next.js/Vue)

    npm run build

  2. 部署后端(NestJS/Express)

    • 生产环境配置 .env.production

    • 安装依赖 npm ci(锁定版本)

    • 启动服务(如使用 PM2)

  3. 通过 Nginx 配置反向代理

    • 实现负载均衡、跨域处理、HTTPS 代理等
  4. 使用 Git + CI 工具部署上线

    • 如 GitHub Actions + Docker/服务器

🧰 工具经验:

工具 作用
PM2 Node.js 进程管理与守护进程
Nginx 反向代理、负载均衡、跨域处理
Docker 环境一致性部署
Git Hooks 提交/部署自动化
GitHub Actions / GitLab CI 持续集成部署

7.2 用过 PM2 吗?它和 cluster 模块有什么不同?

是的,生产环境我常使用 PM2,它底层基于 cluster,但更强大且易用。


🧱 cluster 模块

  • Node.js 内建模块,支持多进程复用 CPU 核心

  • 每个子进程共享同一个端口,通过 IPC 与主进程通信

    if (cluster.isMaster) {
    for (let i = 0; i < cpuCount; i++) cluster.fork();
    } else {
    app.listen(3000);
    }

🛡️ PM2 的优势:

功能 cluster PM2
多进程支持
日志管理
崩溃自动重启
热重载、部署脚本
状态监控(Web UI) ✅(pm2 monit / pm2-plus)

✅ 使用示例:

复制代码
pm2 start dist/main.js --name my-api -i max
pm2 save
pm2 startup  # 开机自启

7.3 前后端部署在不同域名下时如何处理跨域?

我会从服务端和前端两个层面解决 CORS 问题:


🌍 场景:前端部署在 https://frontend.com,后端是 https://api.backend.com


✅ 后端处理方式(以 Express 为例):

使用 cors 中间件:

复制代码
app.use(cors({
  origin: 'https://frontend.com',
  credentials: true, // 允许携带 cookie
}));

NestJS 中可在 main.ts

复制代码
app.enableCors({
  origin: 'https://frontend.com',
  credentials: true,
});

✅ 前端请求配置(Axios):

复制代码
axios.get('/api/data', {
  withCredentials: true // 携带 cookie
});

7.4 如何实现持续集成?你知道哪些 CI 工具?

我配置过 GitHub Actions 来自动执行 构建 → 测试 → 部署 的流程。


CI(Continuous Integration)核心目标:

  • 代码合并自动化检查、测试、打包、部署

  • 减少人为操作错误,提升上线效率


✅ 常用 CI 工具:

工具 优点
GitHub Actions 原生支持 GitHub,文档全
GitLab CI/CD 与 GitLab 深度集成
Jenkins 功能强大,可插件化
CircleCI / Travis 云平台集成,轻量快速

✅ 示例(GitHub Actions 配置 .github/workflows/deploy.yml):

复制代码
name: Deploy Node API

on:
  push:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Install deps
        run: npm ci
      - name: Run Tests
        run: npm test
      - name: Deploy via SSH
        run: ssh ubuntu@xxx 'cd /app && git pull && pm2 restart my-api'

7.5 如何用 Docker 部署一个全栈项目?

我实际操作过使用 Docker + Docker Compose 一键部署前后端 + DB 环境。


🚢 Docker 部署好处:

  • 环境一致性

  • 一键构建镜像,便于扩展、迁移、CI/CD

  • 可结合 K8s 实现微服务架构


✅ 示例结构(全栈项目):

复制代码
.
├── docker-compose.yml
├── backend/
│   └── Dockerfile
├── frontend/
│   └── Dockerfile
└── nginx/
    └── default.conf

✅ docker-compose.yml

复制代码
version: "3.8"
services:
  frontend:
    build: ./frontend
    ports:
      - "80:80"

  backend:
    build: ./backend
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=production

  nginx:
    image: nginx:latest
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    ports:
      - "8080:80"
    depends_on:
      - frontend
      - backend

✅ 后端 Dockerfile 示例

复制代码
FROM node:18
WORKDIR /app
COPY . .
RUN npm ci && npm run build
CMD ["node", "dist/main.js"]

✅ 总结一图

编号 问题 核心回答要点
7.1 Node 项目如何部署 构建 + 上传 + 启动服务(PM2/Nginx/Docker)
7.2 PM2 与 cluster 区别 PM2 是 cluster 的增强版,支持守护/日志/UI 等
7.3 跨域怎么处理 后端加 CORS 中间件,前端配置 withCredentials
7.4 持续集成的工具和流程 GitHub Actions / GitLab CI / Jenkins,触发构建测试
7.5 Docker 部署全栈项目 前后端 + DB 容器编排,使用 docker-compose 管理

相关推荐
PAK向日葵5 分钟前
【算法导论】PDD 0817笔试题题解
算法·面试
加班是不可能的,除非双倍日工资2 小时前
css预编译器实现星空背景图
前端·css·vue3
wyiyiyi3 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
gnip3 小时前
vite和webpack打包结构控制
前端·javascript
excel4 小时前
在二维 Canvas 中模拟三角形绕 X、Y 轴旋转
前端
阿华的代码王国4 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
一条上岸小咸鱼4 小时前
Kotlin 基本数据类型(三):Booleans、Characters
android·前端·kotlin
Jimmy4 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
ZXT4 小时前
promise & async await总结
前端
Jerry说前后端4 小时前
RecyclerView 性能优化:从原理到实践的深度优化方案
android·前端·性能优化