soapbox/Containerfile

37 lines
1.4 KiB
Text
Raw Normal View History

# 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"]