| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- # 第一阶段:构建(包含源码,用于打包)
- 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 pyinstaller>=5.13.0
- # 复制项目源码(仅构建阶段需要)
- 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 \
- backend/main.py
- # 第二阶段:运行(仅包含运行时,无源码)
- FROM python:3.10
- # 设置工作目录
- WORKDIR /home
- # 从构建阶段复制打包后的可执行文件
- COPY --from=builder /home/dist/hd_crane_gs .
- # 复制Alembic迁移脚本(如果需要运行migrate命令)
- # 注意:只复制迁移脚本目录,不含源码
- COPY --from=builder /home/alembic /app/alembic
- COPY --from=builder /home/alembic.ini /app/alembic.ini
- # 运行应用
- CMD ["./hd_crane_gs", "run", "--env=prod"]
- # 暴露端口
- EXPOSE 8001
|