2026-10-02 00:32:53 +08:00
ARG PYTHON_BASE = python:3.14.5-slim-bookworm@sha256:ec58d916f9e24a6035cab2bdf07f6206c4cc092a16613c60597534711332d9d6
FROM ${PYTHON_BASE }
2026-10-02 00:41:24 +08:00
ARG DEBIAN_MIRROR = deb.debian.org
2026-10-02 00:03:48 +08:00
ENV PYTHONDONTWRITEBYTECODE = 1 PYTHONUNBUFFERED = 1 TZ = Asia/Shanghai \
2026-10-02 01:02:49 +08:00
DATA_DIR = /data CONFIG_DIR = /config
2026-10-02 00:03:48 +08:00
WORKDIR /app
# CJK fonts intentionally retained for readable Chinese rendering.
2026-10-02 00:49:07 +08:00
RUN --mount= type = bind,source= build-cache/debs,target= /build-debs,readonly sed -i "s|http://deb.debian.org|https:// ${ DEBIAN_MIRROR } |g" /etc/apt/sources.list.d/debian.sources \
&& apt-get update \
&& if [ -f /build-debs/fonts-noto-cjk.deb ] ; then \
font_version = $( apt-cache policy fonts-noto-cjk | awk '$1=="Candidate:" {print $2}' ) ; \
font_sha = $( apt-cache show "fonts-noto-cjk= $font_version " | awk '$1=="SHA256:" {print $2;exit}' ) ; \
test -n " $font_sha " ; \
echo " $font_sha /build-debs/fonts-noto-cjk.deb" | sha256sum -c -; \
2026-10-02 00:52:58 +08:00
apt-get install -y --no-install-recommends tzdata; \
dpkg -i /build-debs/fonts-noto-cjk.deb; \
2026-10-02 00:50:59 +08:00
else apt-get install -y --no-install-recommends fonts-noto-cjk tzdata; fi \
2026-10-02 00:03:48 +08:00
&& rm -rf /var/lib/apt/lists/* \
&& groupadd --gid 10333 frameflow && useradd --uid 10333 --gid 10333 --no-create-home frameflow \
&& mkdir -p /data/images /data/generated /data/cache /config \
&& chown -R 10333:10333 /data /config
COPY requirements.lock ./
2026-10-02 01:02:49 +08:00
RUN --mount= type = bind,source= build-cache/wheels,target= /build-wheels,readonly \
if [ -f /build-wheels/SHA256SUMS ] ; then \
( cd /build-wheels && sha256sum -c SHA256SUMS) \
&& pip install --no-cache-dir --no-index --find-links= /build-wheels -r requirements.lock; \
else pip install --no-cache-dir -r requirements.lock; fi
2026-10-02 00:03:48 +08:00
COPY pigway_frame_flow ./pigway_frame_flow
COPY vendor ./vendor
2026-10-02 01:02:49 +08:00
ARG BUILD_COMMIT = development
ARG BUILD_TIME = unknown
ENV BUILD_COMMIT = $BUILD_COMMIT BUILD_TIME = $BUILD_TIME
2026-10-02 00:03:48 +08:00
USER 10333:10333
EXPOSE 18787
HEALTHCHECK --interval= 30s --timeout= 5s --start-period= 20s --retries= 3 \
CMD python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:18787/health',timeout=3)"
CMD [ "python" , "-m" , "uvicorn" , "pigway_frame_flow.main:app" , "--host" , "0.0.0.0" , "--port" , "18787" , "--workers" , "1" , "--no-access-log" ]