第六章:Nginx 是什么
6.1 基本介绍
Nginx(读音:engine-x,“引擎 X”),开源的 Web 服务器。
它具体干啥?简单说,三件事:
1. 提供静态文件服务(最常见)
你浏览器访问 https://example.com/index.html,Nginx 就把服务器上的 index.html 文件发给你。
浏览器请求 /index.html
│
▼
Nginx 监听 80/443 端口
│
▼
读取文件返回给浏览器
2. 反向代理(Reverse Proxy)
把请求转发到后端的另一个程序。比如:
- 浏览器访问
/api/xxx→ Nginx 转发到后端 Node.js 服务(端口 3000) - 浏览器访问
/→ Nginx 直接返回前端 HTML
3. 负载均衡(Load Balancing)
如果一个服务有 5 台服务器,Nginx 可以把请求轮流分配给它们,减轻单台压力。
6.2 在 gpt_image_playground 项目里的角色
看 deploy/Dockerfile 和 deploy/nginx.conf:
- Vite 构建出静态文件(HTML/JS/CSS)放在
dist/ - Docker 镜像里装了 Nginx
- Nginx 用配置文件
nginx.conf监听端口 - 用户访问时,Nginx 把
dist/里的文件返回出去 - 还能做”API 代理”,把
/api-proxy/开头的请求转发到 OpenAI
📌 类比:Nginx 是餐厅的”传菜员+迎宾员”——它不做菜(不跑代码),只负责把菜(静态文件)端给客人,或者把客人引到对应的房间(反向代理)。
6.3 同行竞品
| 名字 | 特点 |
|---|---|
| Nginx | 高性能、配置简单,最流行 |
| Apache | 老牌、功能多但配置复杂 |
| Caddy | 自动 HTTPS,新一代选手 |
| Traefik | 容器友好,K8s 常用 |
第七章:容器与容器化部署
7.1 容器是什么
容器(Container)= 隔离的、独立的运行环境。
最直观的类比:集装箱
- 海运集装箱发明前:货物千奇百怪,装船麻烦、容易损坏
- 集装箱发明后:所有货物先装进标准集装箱,船、卡车、火车都能直接搬
软件世界的”集装箱”:
- 容器化前:软件依赖五花八门,部署到不同机器经常出问题(“在我电脑上能跑啊!”)
- 容器化后:软件 + 依赖打包成集装箱,到哪都能跑
7.2 容器 vs 虚拟机
| 对比项 | 虚拟机 (VM) | 容器 (Container) |
|---|---|---|
| 隔离级别 | 完整操作系统 | 共享主机的内核,只隔离应用 |
| 启动速度 | 几十秒~几分钟 | 几秒 |
| 占用资源 | GB 级 | MB 级 |
| 性能开销 | 较大 | 几乎没有 |
| 类比 | 一栋独立别墅 | 公寓里的一户人家 |
7.3 容器化部署的好处
- 环境一致:“开发环境能跑,生产环境也能跑”
- 快速搬家:一个
docker pull就能在新机器上跑起来 - 资源利用高:一台服务器能跑几十上百个容器
- 方便扩展:流量大了?再启动 5 个一样的容器分担
- 版本回滚快:出问题了切回旧镜像即可
7.4 容器化部署完整流程
开发阶段:
写代码 → 写 Dockerfile → docker build → 得到镜像
│
发布阶段: │
docker push → 把镜像传到镜像仓库(如 Docker Hub)
│
▼
部署阶段:
服务器上 docker pull 拉镜像 → docker run 启动容器 → 服务上线
│
▼
更新阶段:
改代码 → 重新 build 新镜像 → 新版本号 → push → 服务器 pull → 替换旧容器
7.5 容器生态名词扫盲
| 名词 | 全称/中文 | 是什么 |
|---|---|---|
| Docker | (专有名词) | 最流行的容器化工具 |
| Docker Hub | - | Docker 官方的镜像仓库(类似”应用商店”) |
| Image | 镜像 | 静态的、可分发的容器模板 |
| Container | 容器 | 镜像启动后的实例(在运行的程序) |
| Dockerfile | (专有名词) | 描述如何构建镜像的文本文件 |
| K8s | Kubernetes | 容器编排工具(管理几百上千个容器) |
| Compose | docker-compose | 一次启动多个相关容器(如 web + 数据库) |
| Registry | 镜像仓库 | 存储/分发镜像的服务(Docker Hub、阿里云ACR等) |
| Layer | 层 | 镜像由多个只读层叠加而成,可复用以省空间 |
最后更新:2026-06-02(据 git 提交历史回填,非内容重新审校日期)