You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已搭建Flask REST API,如何在本机运行另一Flask模板渲染服务器?

同一机器运行多个Flask服务器的实现方案

嘿,这个需求其实很常见,核心思路就是让不同的Flask服务监听机器上的不同端口,再配合合适的启动方式来管理。下面给你几个从开发到生产都适用的方案:

一、开发环境:直接指定端口启动(最简单)

这是开发阶段最快捷的方式,只需要给每个Flask服务分配独一无二的端口即可:

1. 代码中指定端口

在你的两个Flask应用代码里,分别设置不同的port参数:

  • API服务器(比如api_app.py):
from flask import Flask
app = Flask(__name__)

# 你的API路由逻辑...

if __name__ == '__main__':
    app.run(port=5000, debug=True)  # 监听5000端口
  • 模板渲染服务器(比如web_app.py):
from flask import Flask, render_template
app = Flask(__name__)

# 你的模板路由逻辑...

if __name__ == '__main__':
    app.run(port=5001, debug=True)  # 监听5001端口

然后分别运行两个脚本就行。

2. 命令行启动指定端口

如果用flask run命令启动,直接通过--port参数指定:

  • 启动API服务:
export FLASK_APP=api_app.py
flask run --port 5000
  • 启动模板服务:
export FLASK_APP=web_app.py
flask run --port 5001

要是想让服务后台运行,可以加nohup或者用screen工具:

nohup flask run --port 5000 &

二、生产环境:使用WSGI服务器(更稳定)

Flask自带的开发服务器性能弱、不安全,生产环境一定要用专业的WSGI服务器,比如Gunicorn或uWSGI,同样通过指定不同端口来区分服务:

以Gunicorn为例

  1. 先安装Gunicorn:
pip install gunicorn
  1. 分别启动两个服务:
  • 启动API服务(绑定5000端口,4个工作进程):
gunicorn -w 4 -b 0.0.0.0:5000 api_app:app
  • 启动模板服务(绑定5001端口,4个工作进程):
gunicorn -w 4 -b 0.0.0.0:5001 web_app:app
  1. 进阶:用配置文件管理
    可以给每个服务单独写配置文件,比如api_gunicorn.conf.py:
bind = "0.0.0.0:5000"
workers = 4
timeout = 120

启动时指定配置文件:

gunicorn -c api_gunicorn.conf.py api_app:app

三、进阶优化:用反向代理统一入口(更优雅)

如果不想让用户记住不同的端口,可以用Nginx做反向代理,把同一个域名下的不同路径转发到对应的Flask服务:

Nginx配置示例

编辑Nginx的配置文件(比如/etc/nginx/sites-available/flask_services):

server {
    listen 80;
    server_name your-domain.com;

    # 转发API请求到5000端口
    location /api/ {
        proxy_pass http://127.0.0.1:5000/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # 转发模板渲染请求到5001端口
    location /web/ {
        proxy_pass http://127.0.0.1:5001/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

然后启用配置并重启Nginx:

ln -s /etc/nginx/sites-available/flask_services /etc/nginx/sites-enabled/
nginx -t && systemctl restart nginx

这样用户访问your-domain.com/api就会到API服务,访问your-domain.com/web就到模板服务,体验更友好。

几个注意事项

  • 端口冲突检查:启动前可以用ss -tulpn | grep <端口号>检查端口是否被占用;
  • 虚拟环境隔离:建议给每个Flask服务单独创建虚拟环境,避免依赖版本冲突;
  • 生产环境禁用debug:Flask的debug=True模式有安全风险,生产环境一定要关掉;
  • 进程管理:生产环境可以用systemd配置服务单元,实现开机自启和进程监控。

内容的提问来源于stack exchange,提问作者Lee Merlas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:30:14