当前位置:首页 > 知识 > python部署web项目 正文

python部署web项目

来源:烟消火灭网   作者:综合   时间:2026-10-17 05:50:34

python部署web项目

我上周把一个Flask应用扔到服务器上,部署折腾了四个小时才跑通。部署最坑的部署不是代码,是部署环境——本地跑得好好的,一到线上就报错。部署这事让我明白,部署部署的部署本质不是“把文件传上去”,而是部署把运行环境完整地搬过去。

先别急着装uwsgi或者gunicorn。部署第一步是部署搞定虚拟环境。我见过太多人直接pip install到系统Python里,部署结果依赖版本冲突,部署改一个包崩三个服务。部署用venv隔离,部署这是部署底线。创建环境、激活、装依赖,三步走完,你的项目才算有了自己的“小房间”。

然后选服务器。别用Flask自带的开发服务器,那是给调试用的,单线程、扛不住并发,线上跑起来分分钟卡死。我一般用gunicorn,简单粗暴。启动命令就一行:gunicorn -w 4 -b 0.0.0.0:8000 app:app。-w是进程数,别贪多,小项目4个够了,多了反而吃内存。-b绑定的地址,0.0.0.0表示监听所有网卡,这样外部才能访问到。

但gunicorn本身是个Python进程,挂掉也不会自动重启。这时候需要supervisor或者systemd来管它。我偏好systemd,毕竟Ubuntu和CentOS都自带。写个service文件,指定ExecStart路径,再把Restart=always加上,进程崩了系统会自动拉起来。这步省不得,不然半夜服务挂了,你还在睡觉,用户全在骂娘。

静态文件是个坑。Flask默认能处理静态资源,但性能很差。生产环境应该让Nginx直接托管静态文件,把动态请求转发给gunicorn。Nginx配置里location /static/指向你的静态目录,location /走proxy_pass转发到127.0.0.1:8000。这样动静分离,压力小一个量级。我第一次没配,直接让Flask扛图片,结果内存涨到1.5G,吓得赶紧改。

还有个容易被忽略的东西——环境变量。数据库密码、API密钥这些不能写死在代码里,更不能提交到Git仓库。用.env文件存,代码里通过os.environ读取。部署时把.env放到服务器上,权限设成600。有一次我朋友把密钥传到GitHub,五分钟内就被爬虫扫到,云厂商直接发短信警告他服务器被入侵了。

最后说下日志。别用print调试,那玩意儿在后台根本看不到输出。用logging模块,把日志写到文件里,按天轮转。gunicorn的errorlog和accesslog也要配好。出了问题先看日志,别瞎猜——90%的部署问题都是日志里能找到答案的。

部署这事,本质上就是一次环境复刻。你本地能跑,服务器上也该能跑,跑不起来就是环境差异没处理好。把虚拟环境、进程管理、反向代理、配置分离这四件事做好,基本就稳了。剩下的小坑,踩一次记住一次,下次就顺了。

标签:

责任编辑:时尚