Dockerfile 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. # 第一阶段:构建(包含源码,用于打包)
  2. FROM python:3.10 as builder
  3. # 使用 LABEL 替代 MAINTAINER
  4. LABEL maintainer="CuiHongEn"
  5. # 设置时区
  6. ENV TZ Asia/Shanghai
  7. # 设置容器内工作目录
  8. WORKDIR /home
  9. # 安装系统依赖(打包需要)
  10. RUN apt-get update && apt-get install -y --no-install-recommends \
  11. gcc \
  12. && rm -rf /var/lib/apt/lists/*
  13. # 将当前主机目录全部文件复制至容器工作目录
  14. COPY ./backend/requirements.txt .
  15. # 安装依赖
  16. RUN pip install --no-cache-dir -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller>=5.13.0
  17. # 复制项目源码(仅构建阶段需要)
  18. COPY . .
  19. # 使用PyInstaller打包(重点:指定入口为main.py的cli命令)
  20. # 注意:--hidden-import需根据实际依赖补充(动态导入的模块)
  21. RUN pyinstaller --name=hd_crane_gs \
  22. --onefile \
  23. # Uvicorn相关
  24. --hidden-import=uvicorn.logging \
  25. --hidden-import=uvicorn.loops \
  26. --hidden-import=uvicorn.loops.auto \
  27. --hidden-import=uvicorn.protocols \
  28. --hidden-import=uvicorn.protocols.http \
  29. --hidden-import=uvicorn.protocols.http.auto \
  30. --hidden-import=uvicorn.protocols.websockets \
  31. --hidden-import=uvicorn.protocols.websockets.auto \
  32. --hidden-import=uvicorn.lifespan \
  33. --hidden-import=uvicorn.lifespan.on \
  34. # Alembic相关
  35. --hidden-import=alembic.autogenerate \
  36. --hidden-import=alembic.runtime.migration \
  37. --hidden-import=alembic.runtime.environment \
  38. # 项目内部模块(根据实际结构补充)
  39. --hidden-import=app.config.setting \
  40. --hidden-import=app.plugin.init_app \
  41. --hidden-import=app.core.logger \
  42. --hidden-import=app.utils.banner \
  43. --hidden-import=app.utils.console \
  44. --hidden-import=app.common.enums \
  45. main.py
  46. # 第二阶段:运行(仅包含运行时,无源码)
  47. FROM python:3.10
  48. # 设置工作目录
  49. WORKDIR /home
  50. # 从构建阶段复制打包后的可执行文件
  51. COPY --from=builder /app/dist/fastapiadmin .
  52. # 复制Alembic迁移脚本(如果需要运行migrate命令)
  53. # 注意:只复制迁移脚本目录,不含源码
  54. COPY --from=builder /app/alembic /app/alembic
  55. COPY --from=builder /app/alembic.ini /app/alembic.ini
  56. # 运行应用
  57. CMD ["./hd_crane_gs", "run", "--env=prod"]
  58. # 暴露端口
  59. EXPOSE 8001