当前位置: 首页 > news >正文

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/服务器


🧰 工具经验:

工具作用
PM2Node.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 的优势:

功能clusterPM2
多进程支持
日志管理
崩溃自动重启
热重载、部署脚本
状态监控(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 APIon:push:branches: [main]jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkout@v2- name: Install depsrun: npm ci- name: Run Testsrun: npm test- name: Deploy via SSHrun: 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: ./frontendports:- "80:80"backend:build: ./backendports:- "3000:3000"environment:- NODE_ENV=productionnginx:image: nginx:latestvolumes:- ./nginx/default.conf:/etc/nginx/conf.d/default.confports:- "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.1Node 项目如何部署构建 + 上传 + 启动服务(PM2/Nginx/Docker)
7.2PM2 与 cluster 区别PM2 是 cluster 的增强版,支持守护/日志/UI 等
7.3跨域怎么处理后端加 CORS 中间件,前端配置 withCredentials
7.4持续集成的工具和流程GitHub Actions / GitLab CI / Jenkins,触发构建测试
7.5Docker 部署全栈项目前后端 + DB 容器编排,使用 docker-compose 管理


http://www.xdnf.cn/news/751501.html

相关文章:

  • Linux服务器 TensorFlow找不到GPU
  • 手写ArrayList和LinkedList
  • VulnStack|红日靶场——红队评估四
  • 卫生间改造翻新怎么选产品?我在瑞尔特找到了解决方案
  • 什么是闭包
  • 4-香豆酸:CoA连接酶晶体-文献精读138
  • Kubernetes RBAC权限控制:从入门到实战
  • LLM推理相关指标
  • 【深度学习-Day 20】PyTorch入门:核心数据结构张量(Tensor)详解与操作
  • 一周学会Pandas2之Python数据处理与分析-数据重塑与透视-melt() - 融化 / 逆透视 (宽 -> 长)
  • 2.5/Q2,Charls最新文章解读
  • transformer 输入三视图线段输出长宽高 笔记
  • 大模型应用开发之预训练
  • DAY 16 numpy数组与shap深入理解
  • 【第三十八周】BLIP-2:一种高效的视觉语言预训练框架
  • 介绍一种LDPC码译码器
  • Python 爱心图案代码
  • 计算晶体结构和电子能带的软件
  • 【Python高阶】面向对象
  • C语言-10.字符串
  • 【Day41】
  • 非常有趣的桌面萌宠互动软件
  • 单板机8088C语言计划
  • 前端面经 get和post区别
  • 使用交叉编译工具提示stubs-32.h:7:11: fatal error: gnu/stubs-soft.h: 没有那个文件或目录的解决办法
  • Baklib内容中台革新企业知识实践
  • AI 社交和AI情绪价值的思考
  • 高并发抽奖系统优化方案
  • python训练营day40
  • 共享内存-systemV