feat: initial live.f12.rocks SFTP → gmic/rembg → web pipeline
Event pep stack with SFTPGo inbox, sequential worker, FastAPI gallery/remix, and Traefik-ready compose. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+58
@@ -0,0 +1,58 @@
|
||||
# Shared image for both the `worker` and `web` services. Which process
|
||||
# runs is decided by the `command:` in compose.yml, not by this file.
|
||||
FROM debian:bookworm-slim
|
||||
|
||||
ENV PYTHONUNBUFFERED=1 \
|
||||
PYTHONDONTWRITEBYTECODE=1 \
|
||||
PIP_NO_CACHE_DIR=1
|
||||
|
||||
# --- gmic ------------------------------------------------------------------
|
||||
# Debian bookworm's own `gmic` apt package is stuck at 2.9.4, whose bundled
|
||||
# filter library is missing commands the reference pipeline needs (e.g.
|
||||
# `fx_LCE`, one of the fixed POST_FILTERS — that one is not optional, so an
|
||||
# old stdlib breaks every single variant, not just a random filter pick).
|
||||
# We install the official gmic.eu build for Debian 12 instead (currently
|
||||
# 4.0.2), which has these commands built in.
|
||||
#
|
||||
# Trade-off: that package also pulls in the GIMP-plugin/Qt/GTK stack as
|
||||
# hard dependencies (it's one combined .deb for CLI + gimp plugin + zart),
|
||||
# adding a few hundred MB we don't otherwise need for a headless CLI tool.
|
||||
# Accepted pragmatically here — correctness over image size. If this ever
|
||||
# matters, the alternative is compiling gmic from source with `make cli`
|
||||
# (see https://gmic.eu/download.html) to skip the GUI dependencies.
|
||||
ARG GMIC_DEB_URL=https://gmic.eu/get_file.php?file=linux/gmic_4.0.2_debian12_bookworm_amd64.deb
|
||||
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
curl \
|
||||
python3 \
|
||||
python3-pip \
|
||||
&& curl -fsSL "$GMIC_DEB_URL" -o /tmp/gmic.deb \
|
||||
&& apt-get install -y --no-install-recommends /tmp/gmic.deb \
|
||||
&& rm -f /tmp/gmic.deb \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Bake in gmic's community filter definitions at build time (one network
|
||||
# fetch, ~6MB) so the wider fx_*/community filter set used by
|
||||
# background/foreground name lists resolves without needing outbound
|
||||
# internet at runtime. `nice` comes from coreutils (already present).
|
||||
ENV HOME=/app/.home
|
||||
RUN mkdir -p /app/.home && gmic -update
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY requirements.txt .
|
||||
# Installing system-wide (no venv) is intentional here: the container
|
||||
# itself is the isolation boundary, this is the standard pattern for
|
||||
# Python-on-slim-Docker images.
|
||||
RUN pip install --break-system-packages -r requirements.txt
|
||||
|
||||
COPY app ./app
|
||||
|
||||
# rembg downloads its ONNX model (u2net, ~176MB) from GitHub on first use
|
||||
# and caches it under $HOME/.u2net — persisted via the `rembg_cache`
|
||||
# volume in compose.yml so it survives container restarts.
|
||||
|
||||
# Overridden per-service in compose.yml (`worker` -> python -m app.worker,
|
||||
# `web` -> uvicorn app.main:app).
|
||||
CMD ["python3", "-m", "app.worker"]
|
||||
Reference in New Issue
Block a user