NodeJS全栈开发面试题讲解——P7 DevOps 与部署和跨域等 - 详解
✅ 7.1 如何部署 Node.js 项目到生产环境?用过哪些工具?
面试官您好,我部署 Node.js 项目通常分为 构建 → 上传 → 启动服务 三步,常用工具包括 PM2、Nginx、Docker、Git Hooks、CI/CD 工具。
️ 主要部署步骤:
构建前端(如 Next.js/Vue):
npm run build部署后端(NestJS/Express):
生产环境配置
.env.production安装依赖
npm ci(锁定版本)启动服务(如使用 PM2)
通过 Nginx 配置反向代理:
实现负载均衡、跨域处理、HTTPS 代理等
使用 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 maxpm2 savepm2 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:18WORKDIR /appCOPY . .RUN npm ci && npm run buildCMD ["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 管理 |
浙公网安备 33010602011771号