Python web 应用现在都用什么部署?Flask、Tornado、Django 等框架的部署方案

公司的项目目前是 supervisor 。

额,每当代码更新,我都是新开一个服务,再在 nginx 把流量切过去,没问题就把老的停了。当然, python 的 virtualenv 都是公用的。。。

尝试 docker 后,发现这个其实很适合 python 部署。开一个容器,切流量…

实际使用后,发现没有必要在 docker 里使用 virtualenv 之类的,因为每个容器都是独立的。

求大佬分享经验。
Python web 应用现在都用什么部署?Flask、Tornado、Django 等框架的部署方案

11 回复

venv + django/flask + supervisor + uwsgi + nginx. 未上 docker


现在Python Web应用的部署方式挺多的,主要看你的应用场景和框架选择。

对于Flask这种轻量级框架,最常用的就是搭配Gunicorn或uWSGI作为应用服务器,前面用Nginx做反向代理。Gunicorn配置简单,适合中小型项目,uWSGI性能更好但配置复杂些。Django官方推荐也是这个组合。

Tornado本身是异步框架,自带高性能服务器,可以直接用它的HTTPServer跑,但生产环境建议还是加个Nginx在前面处理静态文件和负载均衡。

Django项目除了Gunicorn+nginx,现在用Daphne部署ASGI应用也越来越流行,特别是需要WebSocket支持的时候。

容器化部署现在很主流,用Docker打包应用,配合Docker Compose管理多服务,再通过Kubernetes做容器编排,这套方案适合微服务架构。

Serverless也是个选择,像AWS Lambda、Vercel这些平台,适合事件驱动或流量波动大的应用,但冷启动问题需要考虑。

云平台托管服务用起来最省事,比如Heroku、PythonAnywhere,还有各大云商的App Engine,不用操心服务器管理。

简单说就是传统部署用WSGI服务器+nginx,现代部署走容器化,省事就选云托管。

docker 里面肯定没必要 env 了。多此一举。
option 1 : django + env + supervisor +gunicorn +nginx
option 2 : django + supervisor +gunicorn +nginx 个人认为生产环境只跑一个服务的话用不用 env 无所谓
option 3 : docker(django + gunicorn) + nginx


受教了。

想换成 docker + nginx 了。

docker tornado

使用 docker
对于 wsgi 之类的,在 docker 里面跑一个 uwsgi/gunicorn ,然后开多个 worker
对于 tornado, 在 docker 里可以用 multiprocess 起多个 tornado 进程,但是公用一个端口; 或者使用 supervisor 起多个 tornado 进程,运行在不同的端口

docker 里面把各种依赖全装了,基础镜像选择 alpine

只要是能简单横向扩展,自身无状态的服务,都能用 docker 直接扩

公司项目也是 tornado 。

感谢大佬的干货分享。

嗯,确实啊。

实测基础镜像选 alpine 并没那么好,不少的包安装都有问题,某些包(比如 airflow 依赖的 psutil )连使用 python:slim 都需要安装 gcc 。

依赖都是可以装的,只有部分,例如 cx_oracle 依赖的 glibc 不全,其余的都可以装上

选用 alpine skiing 的最大好处是可以减小镜像体积,方便 pull 和 push ,可以快速扩容

cx_oracle 也是可以搞定的。构建的时候,复制 oracle 对应 lib 到 docker 目标文件夹,然后再装 cx_oracle. 一些设置在写 dockerfile 一并搞完。

回到顶部