# syntax=docker/dockerfile:1
# Netflix Mail Helper - A stable (Linux 容器化版本)
# 纯 Python 标准库实现，无需 pip 依赖。
FROM python:3.13-slim AS runtime

# 容器内始终禁用浏览器自动打开；管理员密码与 API Key 走环境变量。
ENV NETFLIX_MAIL_HELPER_NO_BROWSER=1 \
    NETFLIX_MAIL_HELPER_PORT=8765 \
    PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    TZ=Asia/Shanghai

# 安装极少量系统包：tini 做容器 1 号进程信号转发，curl 用于健康检查。
RUN apt-get update && apt-get install -y --no-install-recommends \
        tini curl ca-certificates tzdata \
    && rm -rf /var/lib/apt/lists/* \
    && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

WORKDIR /app

# 先复制静态资源与配置示例，利用层缓存；app.py 变动才重新复制代码层。
COPY static/ ./static/
COPY config.example.json ./config.example.json
COPY app.py ./app.py

# 运行用户：非 root，最小权限。
RUN useradd --create-home --shell /usr/sbin/nologin --uid 10001 appuser \
    && chown -R appuser:appuser /app

USER appuser

EXPOSE 8765

# 健康检查：容器内 curl 命中 /api/health。
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
    CMD curl --silent --fail --max-time 3 http://127.0.0.1:${NETFLIX_MAIL_HELPER_PORT}/api/health || exit 1

# tini 转发 SIGTERM/SIGINT，保证 docker stop 能优雅退出（触发 app.py 里的信号处理）。
ENTRYPOINT ["/usr/bin/tini", "--"]
CMD ["python", "-u", "app.py"]
