1. Process(进程)

定义:正在运行的程序实例。每个进程有独立的地址空间、代码、数据、堆栈,以及操作系统分配的资源(文件描述符、内存等)。

核心概念
- PID:进程唯一标识符。
- 父进程与子进程:通过 fork() 创建新进程。
- 守护进程(Daemon):在后台运行、脱离终端的长期进程,如 Nginx、Gunicorn。
- 进程状态:运行(R)、睡眠(S)、僵尸(Z)等。

与部署相关
- Web 应用(如 Gunicorn)通常以守护进程方式运行。
- 查看进程:ps auxtophtop
- 信号控制:kill -9 <PID> 强制终止,kill -15 优雅终止。

示例

# 查看所有 nginx 进程
ps aux | grep nginx

2. Port(端口)

定义:网络通信中用于区分不同服务或应用程序的逻辑标识,范围 0-65535。IP 地址定位主机,端口定位主机上的具体进程。

端口分类
- 熟知端口(0-1023):系统保留,如 HTTP(80)、HTTPS(443)、SSH(22)、MySQL(3306)。
- 注册端口(1024-49151):用户服务可用,如 Django/Flask 默认 5000、Gunicorn 常用 8000。
- 动态/私有端口(49152-65535):临时分配给客户端。

常见操作
- 查看端口占用:netstat -tulnss -tuln
- 检查某个端口是否监听:lsof -i :80
- 防火墙开放端口:ufw allow 80/tcp(Ubuntu)

在部署链中的作用
- Nginx 监听 80/443(对外)。
- Gunicorn 监听本地端口(如 8000)或 Unix Socket,只允许 Nginx 访问。


3. Nginx

定义:高性能的 HTTP 服务器和反向代理服务器,也支持负载均衡、缓存、SSL 终止等。

核心功能
- 静态文件服务:直接返回 HTML/CSS/JS/图片,效率极高。
- 反向代理:将请求转发给后端应用(如 Gunicorn)。
- 负载均衡:分发请求到多个后端节点。
- SSL 终止:处理 HTTPS 加密/解密,减轻后端负担。

配置示例(反向代理到 Gunicorn)

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    location /static/ {
        alias /var/www/example/static/;
    }
}

为什么需要 Nginx
- Python Web 服务器(如 Gunicorn)处理静态文件性能差。
- 提供缓冲、限流、重写等边缘功能。


4. Reverse Proxy(反向代理)

定义:代理服务器的一种,代表客户端向后端服务器请求资源,然后将响应返回给客户端。客户端不知道后端服务器的存在。

正向代理 vs 反向代理

类型 代理对象 典型用途 客户端感知
正向代理 客户端 翻墙、匿名、缓存 需要手动配置代理
反向代理 服务器 负载均衡、安全、SSL 无感知(以为直接访问服务器)

工作流程

客户端 → (访问 example.com) → Nginx(反向代理)→ 内网多个后端实例(Gunicorn、Flask)

优点
- 隐藏后端真实 IP 和架构。
- 提供负载均衡和故障转移。
- 集中处理 SSL 证书、压缩、缓存、访问日志。

你之前提到的链路中 Nginx 的位置就是反向代理角色


5. HTTPS(HTTP over TLS/SSL)

定义:在 HTTP 基础上加入 TLS/SSL 加密层,实现通信加密、身份验证和数据完整性保护。

核心组件
- 证书(Certificate):由 CA(证书颁发机构)签发,包含域名、公钥等信息。
- 加密流程
1. 客户端请求 HTTPS 网址。
2. 服务器返回证书。
3. 客户端验证证书(信任链、域名匹配、是否过期)。
4. 客户端生成随机密钥(对称加密密钥),用证书中的公钥加密后发送给服务器。
5. 双方使用该对称密钥加密后续通信。

为什么需要 HTTPS
- 防止中间人攻击(窃听、篡改)。
- 浏览器信任(显示锁标志)。
- SEO 排名提升、支持 HTTP/2 等高级特性。

部署常用工具
- Let’s Encrypt:免费自动签发证书。
- Certbot:自动化配置 Nginx + 证书续期。

Nginx HTTPS 配置示例

server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    # ... 其余配置
}

6. Docker

定义:一种容器化平台,将应用及其所有依赖(代码、运行时、系统工具、库)打包成一个轻量级、可移植的容器。

核心概念
- 镜像(Image):只读模板,定义容器内容(如 python:3.10-slim)。
- 容器(Container):镜像的运行实例,可被启动、停止、删除。
- Dockerfile:自动化构建镜像的脚本。
- 仓库(Registry):存储和分发镜像(如 Docker Hub)。

与虚拟机的对比

特性 容器(Docker) 虚拟机(VM)
操作系统 共享宿主机内核 每个 VM 有独立内核
启动时间 毫秒级 秒级到分钟级
资源占用 低(仅应用+依赖) 高(完整 OS 开销)
隔离级别 进程级隔离 硬件级虚拟化

典型部署流程
1. 编写 Dockerfile 定义 Flask 应用环境。
2. 构建镜像:docker build -t myapp .
3. 运行容器:docker run -p 80:8000 myapp
4. 使用 Docker Compose 编排多个容器(App + Nginx + PostgreSQL + Redis)。

Dockerfile 示例(Flask + Gunicorn)

FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["gunicorn", "-b", "0.0.0.0:8000", "app:app"]

为什么 Docker 重要
- 环境一致性(开发、测试、生产)。
- 快速部署和回滚。
- 易于水平扩展和微服务化。


概念关联图(部署视角)

开发者编写 Flask 应用
       │
       ▼
Docker 打包应用 + 环境(镜像)
       │
       ▼
服务器(Linux 宿主机)
       │
       ├─ 进程(Gunicorn worker 进程)
       ├─ 端口(80、443 给 Nginx,8000 给 Gunicorn)
       │
       ▼
Nginx(反向代理 + HTTPS 终止)
       │
       ▼
外部用户通过 HTTPS 访问

各环节职责
- Linux 进程:管理运行中的应用(Nginx、Gunicorn 都是后台进程)。
- 端口:让多个服务共存,Nginx 占 80/443 对外,Gunicorn 占内部端口。
- Nginx:反向代理,处理静态文件和 HTTPS。
- Reverse Proxy:模式,将请求转发到内网应用服务器。
- HTTPS:保证公网通信安全。
- Docker:打包整个环境,简化部署和运维。


小结

概念 一句话总结 关键命令/操作
Process 运行中的程序 ps, kill
Port 服务监听的逻辑通道 netstat, lsof, ufw
Nginx 高性能 Web 服务器/反向代理 配置文件 /etc/nginx/nginx.conf
Reverse Proxy 代表服务器接收请求并转发 Nginx 的 proxy_pass 指令
HTTPS 加密 HTTP 通信 SSL 证书,端口 443
Docker 轻量级应用容器化 docker build, docker run, docker-compose