|
|
@@ -1,5 +1,5 @@
|
|
|
-# 使用官方的 Python 3.10 镜像作为基础镜像
|
|
|
-FROM python:3.10
|
|
|
+# 第一阶段:构建(包含源码,用于打包)
|
|
|
+FROM python:3.10 as builder
|
|
|
|
|
|
# 使用 LABEL 替代 MAINTAINER
|
|
|
LABEL maintainer="CuiHongEn"
|
|
|
@@ -10,14 +10,65 @@ 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 ["python", "main.py", "run", "--env=prod"]
|
|
|
+CMD ["./hd_crane_gs", "run", "--env=prod"]
|
|
|
|
|
|
# 暴露端口
|
|
|
EXPOSE 8001
|