# Hugin-Server auf Red Hat UBI 9 minimal, für OpenShift (→ KONZEPT.md 18).
#
#   docker build -t hugin server/
#   docker run --rm -p 8080:8080 -e HUGIN_ADMIN_TOKEN=geheim hugin           # Server
#   docker run --rm -e HUGIN_DATABASE_URL=… hugin migrate                    # Migrations-Job
#
# Läuft als beliebiger Benutzer der Gruppe 0 (OpenShift). Ohne HUGIN_DATABASE_URL liegt
# die SQLite-Datenbank unter /data; dort ein Volume einhängen, sonst ist sie beim
# Neustart weg. Mit PostgreSQL braucht der Container kein Volume.

ARG UBI=registry.access.redhat.com/ubi9/ubi-minimal:9.7

# --- Bauen: Abhängigkeiten aus uv.lock in ein venv unter /opt/hugin
FROM ${UBI} AS build
RUN microdnf install -y --nodocs --setopt=install_weak_deps=0 python3.12 python3.12-pip \
 && microdnf clean all
RUN python3.12 -m pip install --no-cache-dir uv==0.11.25
ENV UV_PROJECT_ENVIRONMENT=/opt/hugin \
    UV_PYTHON=/usr/bin/python3.12 \
    UV_PYTHON_DOWNLOADS=never \
    UV_COMPILE_BYTECODE=1 \
    UV_LINK_MODE=copy \
    UV_NO_CACHE=1
WORKDIR /src
# Erst nur die Abhängigkeiten, damit diese Schicht bei Codeänderungen bleibt
COPY pyproject.toml uv.lock ./
RUN uv sync --frozen --no-dev --no-install-project
COPY src ./src
RUN uv sync --frozen --no-dev --no-editable

# --- Laufzeit: nur Python und das venv
FROM ${UBI}
RUN microdnf install -y --nodocs --setopt=install_weak_deps=0 python3.12 \
 && microdnf clean all
COPY --from=build /opt/hugin /opt/hugin
RUN mkdir /data && chgrp 0 /data && chmod g=u /data
ENV PATH=/opt/hugin/bin:$PATH \
    PYTHONUNBUFFERED=1 \
    PYTHONDONTWRITEBYTECODE=1 \
    HUGIN_DATABASE_URL=sqlite:////data/hugin.db
WORKDIR /data
USER 1001
EXPOSE 8080
ENTRYPOINT ["hugin-server"]
CMD ["run"]
