docker部署本地项目ppt-generation教程

内容纲要

一、配置信息:

1、linux:
Ubuntu 22.04 64 位
2、docker:
Docker version 25.0.5(阿里云源)
3、MySQL
8.0.36 / 8.0.37
4、postgresql:
15
注意的点:
镜像、应用的版本号要注意和固定
拉取镜像的国内来源都要写好
下载什么之前都要配置好来源地址

二、安装docker

安装docker教程

三、上传项目并打包为镜像文件

上传项目到服务器

改Dockerfile文件内容

FROM python:3.12-slim
WORKDIR /app

# 安装 uv(国内清华源)
RUN pip install --no-cache-dir uv -i https://pypi.tuna.tsinghua.edu.cn/simple

# 复制依赖文件
COPY pyproject.toml ./

# ==========================================
# 核心:自动删除可能存在的国外 lock
# 自动用国内源重新生成 lock
# --system 则是强制跳过虚拟环境,直接将包安装到操作系统全局的 Python 环境中
# ==========================================
RUN rm -f uv.lock && \
    UV_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple \
    uv lock && \
    UV_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple \
    uv pip install --system -e .

# 复制代码
COPY . .

# 启动服务
EXPOSE 8000
CMD ["uvicorn", "api.app:app", "--host", "0.0.0.0", "--port", "8000"]

命令解析:

uv sync:这就是用来下载依赖包
这是核心命令,意思是“根据 uv.lock 文件安装依赖”。
作用:它会读取 uv.lock,然后去下载并安装所有列出的第三方库。

--frozen:
含义:严格模式。
作用:它要求 pyproject.toml(项目定义)和 uv.lock(锁定版本)必须完全一
致。如果 uv.lock 不存在,或者它不是基于当前的 pyproject.toml 生成
的,uv 就会报错退出,不会自动去重新生成锁文件。
Docker 构建中,不希望构建过程“偷偷”修改了依赖版本。--frozen 确保了构建的可复现性。

--no-install-project:
含义:不安装当前项目本身。

依赖包被下载到哪里去了
当你执行uv sync时,uv默认会在当前工作目录(WORKDIR /app)下创建一个虚拟环境(.venv)
所有的第三方库(如 flask, requests 等)都会被解压并安装在这个 .venv/lib/python3.12/site-packages 目录下。

四、启动容器服务

1、写好docker-compose.yaml文件

services:
  app:
    # 直接使用你已经打包好的镜像
    image: ppt_generation:v1.0  # 你的镜像名字
    ports:
      - "8000:8000"
    depends_on:
      - mysql
      - postgres
    restart: always
    environment:
      # 🔥 🔥 🔥 关键:强制覆盖代码里的 host
      MYSQL_HOST: mysql
      POSTGRESQL_HOST: postgres

  mysql:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: user_login_info
    volumes:
      - mysql_data:/var/lib/mysql

  postgres:
    image: postgres:15
    restart: always
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: abc123456
      POSTGRES_DB: postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  mysql_data:
  postgres_data:

2、启动容器

docker compose up -d

3、实时查看容器日志(排查错误最关键)

docker compose logs -f

4、排查错误所需要的docker命令

查看所有容器

docker ps -a

停止容器

docker stop <容器名称或ID>

删除容器

docker rm <容器名称或ID>

清除所有已经停止的容器

docker container prune

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部