2026-08-26 12:12:33 +02:00
|
|
|
|
# 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
|
2026-08-26 14:07:14 +02:00
|
|
|
|
COPY --from=ghcr.io/astral-sh/uv:0.11 /uv /bin/uv
|
2026-08-26 12:12:33 +02:00
|
|
|
|
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
|
2026-08-26 12:14:10 +02:00
|
|
|
|
# waitress avslutter rent på SIGINT; SIGTERM ignoreres når den kjører som PID 1.
|
|
|
|
|
|
STOPSIGNAL SIGINT
|
2026-08-26 14:07:14 +02:00
|
|
|
|
HEALTHCHECK --interval=30s --timeout=3s CMD curl -fsS "http://localhost:8080${SOAPBOX_BASE_PATH}/" >/dev/null || exit 1
|
2026-08-26 12:12:33 +02:00
|
|
|
|
CMD ["soapbox", "serve"]
|