python- 如何把 Flask 应用部署到正式(生产)环境服务器上运行

如何把 Flask 应用部署到正式(生产)环境服务器上运行。


🧩 一、开发阶段 vs 生产阶段

在 开发阶段

app.run(host="0.0.0.0", port=5000, debug=True)

这是 Flask 自带的「开发服务器(Werkzeug 服务器)」,
优点是方便调试,缺点是:

  • 仅供开发用;
  • 单线程,不支持高并发;
  • 没有日志、守护进程、自动重启等特性。

不能直接用在正式环境!

在 正式生产环境,你需要使用 一个可靠的 WSGI Web 服务器 来运行 Flask 应用。


🚀 二、生产环境推荐部署方式

最常见的三种选项:

部署方式 Web 服务器 说明
① Gunicorn + Nginx Python 最常用方案,稳定、安全 ✅ 推荐
② uWSGI + Nginx 传统经典方案,性能优良 常用于大型项目
③ Docker 容器 可移植性强,易于云部署 结合 1 或 2 使用

🧠 三、核心思路(通用流程)

核心逻辑是:

Flask 应用本身不对外暴露,只监听内部 socket;
由 Nginx 或系统服务转发外部请求给它。

整体结构如下:

浏览器 → Nginx (80/443端口)
        ↳ 反向代理 → Gunicorn (WSGI)
                      ↳ Flask app.run() 内部逻辑

🧱 四、具体部署步骤(以 Gunicorn 为例)

假设你的 Flask 代码文件是 app.py,并且内容是:

from flask import Flask
app = Flask(__name__)

@app.route("/")
def index():
    return "欢迎访问正式环境!"

✅ 第一步:安装依赖

在你的服务器(Linux 或云主机)上执行:

pip install flask gunicorn

✅ 第二步:测试启动

运行:

gunicorn -w 4 -b 0.0.0.0:8080 app:app

参数解释:

参数 说明
-w 4 启动 4 个 worker 进程(提升并发能力)
-b 0.0.0.0:8080 绑定所有网卡的 8080 端口
app:app 格式是「文件名:Flask实例名」

如果你访问 http://服务器IP:8080
页面就会看到 “欢迎访问正式环境”。


✅ 第三步(可选):用 Nginx 做反向代理

安装 Nginx(例如 Ubuntu):

sudo apt install nginx

编辑 Nginx 配置(位于 /etc/nginx/sites-enabled/default):

server {
    listen 80;
    server_name mydomain.***;  # 改成你的域名或服务器 IP

    location / {
        proxy_pass http://127.0.0.1:8080;   # 转发给 Gunicorn
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

重启 Nginx:

sudo systemctl restart nginx

然后在浏览器访问你的正式网址(例如 http://mydomain.***/)即可上线访问。


✅ 第四步(可选):后台运行服务

部署一般都需要守护进程工具,比如:

工具 功能
systemd Linux 系统自带服务管理器
supervisor 管理多进程 / 自动重启进程

以 systemd 为例,创建服务单元文件:

/etc/systemd/system/flask_app.service
[Unit]
Description=Flask Production App
After=***work.target

[Service]
User=www-data
WorkingDirectory=/srv/app
ExecStart=/usr/local/bin/gunicorn -w 4 -b 127.0.0.1:8080 app:app
Restart=always

[Install]
WantedBy=multi-user.target

启动服务:

sudo systemctl daemon-reload
sudo systemctl enable flask_app
sudo systemctl start flask_app

✅ 这样你重启服务器后 Flask 服务也会自动启动。


💡 五、不同 IP/域名下如何运行

当你部署好后,app.run() 不再使用,因为这行仅在开发模式下运行。
正式环境里由 Gunicorn 或 uWSGI 接管。

但是如果想自己在测试服务器手动运行,也可以:

app.run(host="0.0.0.0", port=8080)

其中:

  • host="0.0.0.0" 表示接受来自任何 IP 的请求;
  • port=8080 是端口号(可改成 80 或 5000 等)。

实际上线时建议让 Gunicorn/Nginx 做 HTTP 入口,
Flask 应用只在本地端口监听,不直接暴露。


📊 六、简单部署方案总结

场景 推荐启动方式 是否适合生产
本地调试 app.run(debug=True) ❌ 仅限开发
临时局域网访问 app.run(host='0.0.0.0', port=5000) ⚠️ 可测试
生产正式站点 gunicorn app:appuwsgi --ini conf ✅ 推荐
云/容器环境 docker run ...(容器封装) ✅ 推荐

✅ 七、总结一张图

客户端(浏览器)
       ↓
   [Nginx 80/443端口]   ← 处理静态文件 / SSL
       ↓
   [Gunicorn WSGI服务器] ← 运行多进程 Flask
       ↓
   [Flask 程序 app.py]  ← 真正处理业务逻辑

转载请说明出处内容投诉
CSS教程网 » python- 如何把 Flask 应用部署到正式(生产)环境服务器上运行

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买