首页 / 部署

用 Docker 把 Python 网站一键部署到云服务器

部署2026-09-30

“在我机器上能跑”是程序员最心虚的一句话。Docker 解决的正是这个问题:把应用和它的运行环境一起打包,搬到任何一台装了 Docker 的服务器上都能原样跑起来。下面是我部署 Python 网站的真实流程。

一、一个最小可用的 Dockerfile

Python 项目最怕镜像臃肿。用 slim 基础镜像、加 --no-cache-dir、写好 .dockerignore,镜像能小一大圈:

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]

二、用 docker-compose 编排多容器

一个网站通常不是单打独斗:应用、MySQL、后台静态资源最好分开。compose 一份文件就把关系定清楚,启动只要一条命令:

services:
  api:
    build: .
    ports: ["8000:8000"]
    depends_on: [db]
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: "***"
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

三、数据必须落盘,容器才能“随便删”

容器本身是易逝的——重启、更新、重建都会丢里面的东西。所以数据库、上传文件这类“状态”一定要挂到宿主机的卷上(如上例的 db_data)。这样哪怕把容器整个删掉重来,数据也还在。

关键纪律:更新应用时只重建“应用容器”,千万别把数据库容器也顺手重建了,否则数据卷以外的东西会丢。我习惯把数据库和应用分开管理,数据库容器几乎不动。

四、部署流程固化成几步

这一套跑熟之后,部署从“提心吊胆”变成了“机械操作”。

五、别忘了备份

Docker 让部署变简单,但备份不能省。我每天对 MySQL 做一次 mysqldump 并保留多份历史,真出问题能回滚到任意一天。部署再优雅,没有备份也等于零。

下一篇聊安全:小程序后端免不了要和微信打交道,接口怎么鉴权、分享链接怎么防篡改,我会在下一篇展开。

← 返回首页