部署
前端项目部署将静态文件上传到服务器上,用户每次访问时获取静态资源,不需要持续运行。
后端项目部署则是将服务器端代码部署到服务器上,通常需要持续运行以处理请求和提供服务。
监听http端口
127.0.0.1
:本地环回地址,只能本机访问。- 用于开发或测试,确保服务不暴露给外部设备。
0.0.0.0
:通配地址,绑定所有网络接口。- 用于外部访问,可接收来自局域网或公网的请求(取决于网络配置)。
vite.config.js
/webpack.config.js
:
devServer: {
host: '0.0.0.0', // 允许外部访问
port: 8080, // 自定义端口
}
- Flask:
app.run(host='0.0.0.0', port=5000)
The --host
option is used to specify the network interface on which the Flask development server should listen for incoming requests.
- Spring Boot:
application.properties
:
server.address=0.0.0.0
server.port=8080
网络协议/测试
- Ping 测试只要求服务器在线并连接到网络,不需要应用程序监听。(ICMP)
- Curl 测试需要服务器上有应用程序在指定端口监听,并且能处理 HTTP 请求。
- SSH 是用于 远程登录 和 安全命令行管理 的协议
ssh -i ./be_key.pem ec2-user@3.27.205.207
ssh user@msra-dki-02 //msra-dki-02 会被解析成一个 IP 地址或对应的主机名
scp -i ./be_key.pem ./app.py ec2-user@3.27.205.207:/home/ec2-user/app.py
IP
1. 私有IP地址(Private IP)
用于局域网,不能在互联网中直接路由:
- 10.0.0.0 - 10.255.255.255(A类,掩码:255.0.0.0)
- 172.16.0.0 - 172.31.255.255(B类,掩码:255.240.0.0)
- 192.168.0.0 - 192.168.255.255(C类,掩码:255.255.0.0)
2. 本地环回地址(Loopback Address)
- 127.0.0.0 - 127.255.255.255
- 通常是
127.0.0.1
,表示本地计算机自身。
- 用于测试本地网络栈,不会发送到任何网络设备。
- 通常是
每个网络协议或服务会绑定到一个特定的端口。

Flask实现的功能:
- 路由管理:定义 URL 路径和处理请求的函数
- 持续地接受请求并响应:接收 HTTP 请求并返回响应
最简单的Flask例子:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def home():
return "Hello, World!"
@app.route('/api/data', methods=['GET'])
def get_data():
return jsonify({"message": "This is your data!"})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Flask 本身不处理并发。Flask 的 app.py
只加载一次,多个请求被 Web 服务器调度分发给不同的 worker 处理。不是每次请求都重启服务。
Nginx
前端 | 后端 | |
dev | npm start 入口文件在开发服务器。 | python app.py / flask run 服务运行在开发服务器。 |
prod | Nginx, CDN Nginx直接从disk取文件返回,不再需要运行服务器。 | Nginx 使用Gunicorn持续运行。 |
Nginx:Web服务器。主要作用是转发80和443的请求给服务端口/文件目录。
# nginx.conf
server {
listen 80; # HTTP
server_name example.com;
# 前端静态资源
location / {
root /var/www/frontend/build;
index index.html;
try_files $uri /index.html;
}
# 后端 API 请求转发
location /api/ { # 最长匹配
proxy_pass http://127.0.0.1:5000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
- 网页访问的 URL 是
http://example.com/
,直接请求前端静态页面。
- 前端调用后端接口时,URL 以
http://example.com/api/
开头,比如请求用户数据可能是http://example.com/api/users
,Nginx 会把它转发到本地后端服务(如 Flask 的http://127.0.0.1:5000/users
)。
Docker+Nginx 部署服务
一个Docker一般打包一个服务。
Nginx作为一个单独的服务运行在一个docker中。
docker端口映射:把宿主机的一个端口
的流量转发到docker的一个端口
。
# docker-compose.yml
version: '3'
services:
flask-app:
build: ./flask
ports:
- "5000:5000"
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- flask-app
Docker+Nginx 部署服务的流程:
- flask 打包进 docker 0
- nginx 打包进 docker 1
- 运行 docker 0,flask在 docker 0: 5000 持续监听请求
- 运行 docker 1,nginx 持续监听 http 请求并转发给 docker 0: 5000
请求的路径:宿主机: 80 → docker 1: 80 → docker 0: 5000