# Bolt 框架 Docker 镜像
# 多阶段构建优化生产镜像

# ============ 构建阶段 ============
FROM python:3.12-slim AS builder

WORKDIR /app

# 安装构建依赖（利用 Docker layer cache）
RUN apt-get update && apt-get install -y --no-install-recommends \
    build-essential \
    && rm -rf /var/lib/apt/lists/*

# 复制包定义与源码（hatchling 构建需要 bolt/ 源码与 README 元数据）
COPY pyproject.toml README.md ./
COPY bolt ./bolt

# 创建虚拟环境并安装包及其核心依赖
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
RUN pip install --no-cache-dir --upgrade pip && pip install --no-cache-dir .

# ============ 生产阶段 ============
FROM python:3.12-slim AS production

WORKDIR /app

# 安装运行时系统依赖
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    && rm -rf /var/lib/apt/lists/* \
    && useradd --create-home --shell /bin/bash appuser

# 从构建阶段复制虚拟环境（bolt 包及其依赖已安装其中）
COPY --from=builder /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"

# 安全：非 root 用户运行
RUN chown -R appuser:appuser /app
USER appuser

# 环境变量
ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    BOLT_ENVIRONMENT=production

# 暴露端口（8000: API, 9090: 指标，需 BOLT_METRICS_SERVER_ENABLED=true）
EXPOSE 8000 9090

# 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD curl -f http://localhost:8000/health || exit 1

# 默认命令：内置演示应用（健康检查等基础端点），生产部署请覆盖为业务 app
CMD ["uvicorn", "bolt.__main__:app", "--host", "0.0.0.0", "--port", "8000"]
