# syntax=docker/dockerfile:1

FROM python:3.13-slim AS base

ENV PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUTF8=1 \
    PYTHONIOENCODING=utf-8 \
    PIP_NO_CACHE_DIR=1 \
    PIP_DISABLE_PIP_VERSION_CHECK=1

WORKDIR /srv/gateway

# 依存を先に入れて、アプリ変更時のレイヤ再利用を効かせる。
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY app ./app

# 非 root で実行する。/data は名前付きボリュームを想定。
RUN useradd --system --uid 10001 --create-home --home-dir /home/gateway gateway \
    && mkdir -p /data \
    && chown -R gateway:gateway /data /srv/gateway

USER gateway

VOLUME ["/data"]

ENV HOST=0.0.0.0 \
    PORT=3000 \
    CONTROL_PORT=3001 \
    DB_PATH=/data/gateway.db

EXPOSE 3000 3001

# control ポートの /healthz は認証不要。公開ポートにはエンドポイントを生やさない。
# strict は付けない。上流の障害でコンテナを unhealthy にすると、
# depends_on で待つ admin まで起動できなくなる。
# 503 なら urlopen が HTTPError を送出して非ゼロ終了する。
HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 CMD python -c "import os,urllib.request; urllib.request.urlopen('http://127.0.0.1:' + os.environ.get('CONTROL_PORT', '3001') + '/healthz', timeout=4)"

CMD ["python", "-m", "app.main"]
