# Soapbox – lettest mulig image: python:alpine + git + appen. # Bygg (fra repo-rot): # BUILDAH_FORMAT=docker podman build \ # --build-arg BUILD_DATE="$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ # --build-arg GIT_REVISION="$(git describe --always --dirty)" \ # -t soapbox . FROM python:3.13-alpine AS build COPY --from=ghcr.io/astral-sh/uv:0.11 /uv /bin/uv WORKDIR /app ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy UV_PYTHON_DOWNLOADS=never COPY pyproject.toml uv.lock README.md ./ RUN uv sync --frozen --no-dev --no-install-project COPY soapbox ./soapbox RUN uv sync --frozen --no-dev FROM python:3.13-alpine ARG BUILD_DATE ARG GIT_REVISION LABEL org.opencontainers.image.title="soapbox" \ org.opencontainers.image.created="${BUILD_DATE}" \ org.opencontainers.image.revision="${GIT_REVISION}" RUN apk add --no-cache git curl \ && printf 'build_date=%s\ngit_revision=%s\n' "${BUILD_DATE}" "${GIT_REVISION}" > /etc/build-info \ && adduser -D -u 1000 soapbox \ && mkdir -p /data && chown soapbox:soapbox /data WORKDIR /app COPY --from=build --chown=soapbox:soapbox /app /app USER soapbox ENV PATH="/app/.venv/bin:$PATH" \ SOAPBOX_DATA_DIR=/data \ PYTHONUNBUFFERED=1 VOLUME /data EXPOSE 8080 # waitress avslutter rent på SIGINT; SIGTERM ignoreres når den kjører som PID 1. STOPSIGNAL SIGINT HEALTHCHECK --interval=30s --timeout=3s CMD curl -fsS "http://localhost:8080${SOAPBOX_BASE_PATH}/" >/dev/null || exit 1 CMD ["soapbox", "serve"]