折腾了好几个晚上,Python项目部署失败,这滋味我太懂了。网上教程看了一堆,服务器环境配了一遍又一遍,最后项目还是跑不起来。崩溃吗?太崩溃了。
你本地跑得好好的,一到线上就报错。要么是版本不对,要么少了个依赖,要么系统环境不一样。代码没毛病,环境出了鬼。这种情况,改代码没用,得从根上解决问题。
我后来用了Docker,这玩意儿说白了一个轻量级虚拟机,把你的应用和它需要的所有东西打包在一起。你本地怎么跑,线上就怎么跑,一模一样。再也不用怕那句“在我电脑上明明是好的”。
用Docker部署Python项目,有个标准模板可以用。我直接给你一个能用的东西,你照着改就行。
第一步,创建Dockerfile。
在你的项目根目录,新建一个文件叫 Dockerfile,把下面内容贴进去。
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ['python', 'app.py']
解释一下。第一行指定用哪个Python版本,3.11-slim是最小镜像,体积小。第二行设定工作目录。然后拷贝依赖文件,安装依赖,再把整个项目复制进去。
第二步,准备依赖清单。
在项目根目录创建一个 requirements.txt 文件。把你项目需要的Python库写进去。比如你用Flask就写 flask,用Django就写 django。别漏了,少一个就启动不了。
flask==3.0.0
gunicorn==21.2.0
版本号建议写具体,免得将来库更新了不兼容。
第三步,构建并运行。
在项目目录打开终端,执行这个命令。
docker build -t my-python-app .
docker run -p 5000:5000 my-python-app
-t 后面是给镜像取的名字。 -p 5000:5000 是把宿主机的5000端口映射到容器的5000端口。你的应用要是用的别的端口,改一下数字就行。
运行起来后,浏览器访问 localhost:5000 就能看到了。成功了的话,你会看到你的应用界面。
这个模板解决了我最多的痛点。以前部署一个Flask应用要装Python,装虚拟环境,装nginx,还要处理文件权限。现在一个 docker run 搞定。
关键是,你的同事或者服务器管理员不需要懂Python,不需要装任何Python工具。他们只要装了Docker,跑这个命令就能把你的项目跑起来。
有读者问我,用了Docker是不是就万事大吉了。不是的,你代码本身还是得写对。Docker只是把环境问题彻底消灭了。你本地能跑,线上就一定可以。
最后提醒一句,别忘了把你的 .gitignore 文件配置好,别把虚拟环境和打包文件传上去。Dockerfile和requirements.txt一定要放在项目根目录。
下次部署再失败,试试这个方法。从创建项目到线上运行,十分钟都用不了。