已搭建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为例
- 先安装Gunicorn:
pip install gunicorn
- 分别启动两个服务:
- 启动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
- 进阶:用配置文件管理
可以给每个服务单独写配置文件,比如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
相关产品推荐
相关产品推荐

