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

news2025/6/4 1:55:47

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 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.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.coloradmin.cn/o/2395440.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国高分辨率高质量地面CO数据集(2013-2023)

时间分辨率&#xff1a;日空间分辨率&#xff1a;1km - 10km共享方式&#xff1a;开放获取数据大小&#xff1a;9.83 GB数据时间范围&#xff1a;2013-01-01 — 2023-12-31元数据更新时间&#xff1a;2024-08-19 数据集摘要 ChinaHighCO数据集是中国高分辨率高质量近地表空气污…

GO——内存逃逸分析

一、可能导致逃逸的5中情况 package mainimport "fmt"func main() {f1()f2()f3()f4()f5() }type animal interface {run() }type dog struct{}func (d *dog) run() {fmt.Println("狗在跑") }// 指针、map、切片为返回值的会发生内存逃逸 func f1() (*int,…

MinVerse 3D触觉鼠标的技术原理与创新解析

MinVerse3D触觉鼠标通过三维交互和触觉反馈技术&#xff0c;彻底颠覆了传统二维鼠标的操作方式。用户在操作虚拟物体时&#xff0c;可以真实感知表面质感、重量和阻力。这种技术不仅为数字环境注入了深度与临场感&#xff0c;还在3D设计、游戏开发和工程仿真等领域展现了广泛潜…

乾元通渠道商中标青海省自然灾害应急能力提升工程基层防灾项目

近日&#xff0c;乾元通渠道商中标青海省自然灾害应急能力提升工程基层防灾项目&#xff0c;乾元通作为设备厂家&#xff0c;为项目提供通信指挥类装备&#xff08;多链路聚合设备&#xff09;QYT-X1。 青岛乾元通数码科技有限公司作为国家应急产业企业&#xff0c;深耕于数据调…

openssl-aes-ctr使用openmp加速

openssl-aes-ctr使用openmp加速 openssl-aes-ctropenmp omp for openssl-aes-ctr 本文采用openssl-1.1.1w进行开发验证开发&#xff1b;因为aes-ctr加解密模式中&#xff0c;不依赖与上一个模块的加/解密的内容&#xff0c;所以对于aes-ctr加解密模式是比较适合进行并行加速的…

PHP+MySQL开发语言 在线下单订水送水小程序源码及搭建指南

随着互联网技术的不断发展&#xff0c;在线下单订水送水服务为人们所需要。分享一款 PHP 和 MySQL 搭建一个功能完善的在线订水送水小程序源码及搭建教程。这个系统将包含用户端和管理端两部分&#xff0c;用户可以在线下单、查询订单状态&#xff0c;管理员可以处理订单、管理…

计算机网络第1章(上):网络组成与三种交换方式全解析

目录 一、计算机网络的概念二、计算机网络的组成和功能2.1 计算机网络的组成2.2 计算机网络的功能 三、电路交换、报文交换、分组交换3.1 电路交换&#xff08;Circuit Switching&#xff09;3.2 报文交换&#xff08;Message Switching&#xff09;3.3 分组交换&#xff08;Pa…

Android studio进阶开发(七)---做一个完整的登录系统(前后端连接)

我们已经讲过了okhttp和登录系统的使用&#xff0c;我们今天做一个完整的登录系统&#xff0c;后端用springmybatis去做 数据库内容 -- 创建学生信息表 CREATE TABLE student_info (id SERIAL PRIMARY KEY, -- 添加自增主键name VARCHAR(255) NOT NULL,number INT NOT NULL,…

计算机网络第1章(下):网络性能指标与分层模型全面解析

目录 一、计算机网络的性能指标1.1 性能指标1&#xff1a;速率1.2 性能指标2&#xff1a;带宽1.3 性能指标3&#xff1a;吞吐量1.4 性能指标4&#xff1a;时延1.5 性能指标5&#xff1a;时延带宽积1.6 性能指标6&#xff1a;往返时延1.7 性能指标7&#xff1a;信道利用率 二、计…

恶意软件清理工具,让Mac电脑安全更简单

​你的Mac最近是不是开始表演"电子迷惑行为"&#xff1f;浏览器主页突然变成澳门赌场&#xff0c;风扇转得比直升机螺旋桨还猛......恭喜你&#xff01;可能中奖获得"恶意软件大礼包"&#xff01;别慌&#xff0c;今天就教你用恶意软件清理工具化身数字特工…

HackMyVM-Jabita

信息搜集 主机发现 ┌──(kali㉿kali)-[~] └─$ nmap -sn 192.168.43.0/24 Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-01 05:20 EDT Nmap scan report for 192.168.43.1 Host is up (0.020s latency). MAC Address: C6:45:66:05:91:88 (Unknown) Nmap scan repo…

112 Gbps 及以上串行链路的有效链路均衡

通道均衡已成为当今高速串行链路的关键机制。目前有许多均衡方案&#xff0c;例如发射机加重均衡、接收机CTLE&#xff08;连续时间线性均衡器&#xff09;、FFE&#xff08;前馈均衡器&#xff09;、DFE&#xff08;判决反馈均衡器&#xff09;和FEC&#xff08;前向纠错&…

Python-13(永久存储)

创建并打开文件 open(file,mode)函数 该函数用于打开一个文件并返回对应的文件对象。 file参数指定的是文件路径和文件名&#xff0c;如果没有添加路径&#xff0c;那么默认将文件创建在python的主文件夹里面。mode参数指定的是打开的模式&#xff0c;r表示读取&#xff08;…

记录一次session安装应用recyclerview更新数据的bug

首先抛出异常日志&#xff0c;在 先说结论&#xff1a;因为session安装监听是在点击事件里面&#xff0c;所以会保留旧的对象数据 直接上代码&#xff0c;原有的逻辑是点击时执行session安装&#xff0c;并注册监听回调 private fun installApk(position: Int) {val packageIns…

大数据-274 Spark MLib - 基础介绍 机器学习算法 剪枝 后剪枝 ID3 C4.5 CART

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大模型篇章已经开始&#xff01; 目前已经更新到了第 22 篇&#xff1a;大语言模型 22 - MCP 自动操作 FigmaCursor 自动设计原型 Java篇开…

力扣面试150题--二叉树的锯齿形层序遍历

Day 56 题目描述 思路 锯齿形就是一层是从左向右&#xff0c;一层是从右向左&#xff0c;那么我们可以分析样例&#xff0c;对于第奇数层是从左向右&#xff0c;第偶数层是从右向左&#xff0c;于是可以采取一个计数器&#xff0c;采取链表方式&#xff0c;从左向右就是正常插…

如何在 CentOS / RHEL 上修改 MySQL 默认数据目录 ?

MySQL 是一个广泛使用的开源关系数据库管理系统(RDBMS)&#xff0c;为无数的 web 应用程序和服务提供支持。默认情况下&#xff0c;MySQL 将其数据存储在预定义的目录中&#xff0c;这可能并不总是适合您的需求。您可能希望将数据目录移动到另一个位置以获得更好的性能和安全性…

简历制作要精而不简

不得不说&#xff0c;不管是春招&#xff0c;还是秋招&#xff0c;我们在求职时&#xff0c;第一步便是制作一份简历。不得不承认&#xff0c;好的简历&#xff0c;就像一块敲门砖&#xff0c;能让面试官眼前一亮&#xff0c;让应聘成功的概率增添一分。 对于一个初次求职者来…

SPA-RL:通过Stepwise Progress Attribution训练LLM智能体

SPA-RL&#xff1a;通过Stepwise Progress Attribution训练LLM智能体 在大语言模型&#xff08;LLM&#xff09;驱动智能体发展的浪潮中&#xff0c;强化学习&#xff08;RL&#xff09;面临着延迟奖励这一关键挑战。本文提出的SPA-RL框架&#xff0c;通过创新的分步进度归因机…

【深度学习】9. CNN性能提升-轻量化模型专辑:SqueezeNet / MobileNet / ShuffleNet / EfficientNet

SqueezeNet / MobileNet / ShuffleNet / EfficientNet 一、背景与动机 随着深度神经网络在图像识别任务上取得巨大成功&#xff0c;它们的结构越来越深、参数越来越多。然而在移动端或嵌入式设备中&#xff1a; 存储资源有限推理计算能力弱能耗受限 因此&#xff0c;研究者…