45 lines
1.1 KiB
Docker
45 lines
1.1 KiB
Docker
# ======================================================================
|
|
# 多阶段构建:Stage 1 构建依赖 -> Stage 2 运行
|
|
# ======================================================================
|
|
FROM python:3.12-slim AS builder
|
|
|
|
WORKDIR /build
|
|
|
|
# 复制依赖清单
|
|
COPY pyproject.toml poetry.lock* ./
|
|
|
|
# 安装 poetry 并导出 requirements
|
|
RUN pip install --no-cache-dir poetry \
|
|
&& poetry export -f requirements.txt -o requirements.txt --without-hashes
|
|
|
|
# ======================================================================
|
|
FROM python:3.12-slim AS runtime
|
|
|
|
ENV PYTHONUNBUFFERED=1 \
|
|
PYTHONDONTWRITEBYTECODE=1 \
|
|
TZ=Asia/Shanghai
|
|
|
|
WORKDIR /data/apps
|
|
|
|
# 安装运行依赖
|
|
COPY --from=builder /build/requirements.txt ./
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
# 复制项目文件
|
|
COPY src ./src
|
|
COPY app.py ./
|
|
COPY alembic ./alembic
|
|
COPY alembic.ini ./
|
|
COPY .env.example ./.env
|
|
COPY scripts ./scripts
|
|
COPY templates ./templates
|
|
COPY static ./static
|
|
|
|
# 创建运行时目录
|
|
RUN mkdir -p uploads logs
|
|
|
|
EXPOSE 8041
|
|
|
|
# 启动应用
|
|
CMD ["python", "app.py"]
|