# 第一阶段：构建（包含源码，用于打包）
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 \
    # 若有其他路由/模块，继续补充
    --hidden-import=app.routers.xxx \  # 示例：替换为实际路由模块
    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
