# 第一阶段:构建(包含源码,用于打包) FROM python:3.10 as builder # 使用 LABEL 替代 MAINTAINER LABEL maintainer="CuiHongEn" # 设置时区 ENV TZ Asia/Shanghai # 设置容器内工作目录 WORKDIR /home # 安装系统依赖(打包需要) RUN apt-get update && apt-get install -y --no-install-recommends \ gcc \ && rm -rf /var/lib/apt/lists/* # 将当前主机目录全部文件复制至容器工作目录 COPY ./backend/requirements.txt . # 安装依赖 RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple # 复制项目源码(仅构建阶段需要) COPY . . # 使用PyInstaller打包(重点:指定入口为main.py的cli命令) # 注意:--hidden-import需根据实际依赖补充(动态导入的模块) RUN pyinstaller --name=hd_crane_gs \ --onefile \ # Uvicorn相关 --hidden-import=uvicorn.logging \ --hidden-import=uvicorn.loops \ --hidden-import=uvicorn.loops.auto \ --hidden-import=uvicorn.protocols \ --hidden-import=uvicorn.protocols.http \ --hidden-import=uvicorn.protocols.http.auto \ --hidden-import=uvicorn.protocols.websockets \ --hidden-import=uvicorn.protocols.websockets.auto \ --hidden-import=uvicorn.lifespan \ --hidden-import=uvicorn.lifespan.on \ # Alembic相关 --hidden-import=alembic.autogenerate \ --hidden-import=alembic.runtime.migration \ --hidden-import=alembic.runtime.environment \ # 项目内部模块(根据实际结构补充) --hidden-import=app.config.setting \ --hidden-import=app.plugin.init_app \ --hidden-import=app.core.logger \ --hidden-import=app.utils.banner \ --hidden-import=app.utils.console \ --hidden-import=app.common.enums \ main.py # 第二阶段:运行(仅包含运行时,无源码) FROM python:3.10 # 设置工作目录 WORKDIR /home # 从构建阶段复制打包后的可执行文件 COPY --from=builder /app/dist/fastapiadmin . # 复制Alembic迁移脚本(如果需要运行migrate命令) # 注意:只复制迁移脚本目录,不含源码 COPY --from=builder /app/alembic /app/alembic COPY --from=builder /app/alembic.ini /app/alembic.ini # 运行应用 CMD ["./hd_crane_gs", "run", "--env=prod"] # 暴露端口 EXPOSE 8001