59 lines
2.4 KiB
Docker
59 lines
2.4 KiB
Docker
# ---------------------------------------------------------------------------
|
|
# Étape 1 — dépendances Python via uv (cache couche par couche)
|
|
# ---------------------------------------------------------------------------
|
|
FROM ghcr.io/astral-sh/uv:python3.13-bookworm-slim AS builder
|
|
ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy
|
|
WORKDIR /opt/ohm
|
|
|
|
# D'abord les métadonnées seules : couche réutilisable tant que uv.lock ne bouge pas
|
|
COPY pyproject.toml uv.lock ./
|
|
RUN uv sync --frozen --no-dev --no-install-project --no-cache
|
|
|
|
# Puis le code
|
|
COPY app ./app
|
|
RUN uv sync --frozen --no-dev --no-cache
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Étape 2 — image d'exécution minimale
|
|
# ---------------------------------------------------------------------------
|
|
FROM python:3.13-slim-bookworm
|
|
|
|
LABEL org.opencontainers.image.source="https://git.lanro.eu/Roman/ohm_streaming" \
|
|
org.opencontainers.image.description="Ohm Stream Downloader — outil technique d'automatisation, ne fournit ni n'héberge aucun contenu. L'usage relève de la seule responsabilité de l'utilisateur (droit d'auteur)."
|
|
# ffmpeg (téléchargements HLS), ca-certificates (scraping HTTPS),
|
|
# gosu (bascule utilisateur non-root dans l'entrypoint)
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends ffmpeg ca-certificates gosu \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Utilisateur non-root
|
|
RUN useradd --create-home --uid 1000 ohm
|
|
|
|
WORKDIR /opt/ohm
|
|
COPY --from=builder --chown=ohm:ohm /opt/ohm/.venv ./.venv
|
|
COPY --chown=ohm:ohm app ./app
|
|
COPY --chown=ohm:ohm docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
|
|
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
|
|
|
|
ENV PATH="/opt/ohm/.venv/bin:$PATH" \
|
|
PYTHONUNBUFFERED=1 \
|
|
# Chemins montés en volumes par docker-compose
|
|
OHM_DATA_DIR=/data \
|
|
OHM_DOWNLOAD_DIR=/downloads \
|
|
OHM_DATABASE_PATH=/data/ohm.db
|
|
|
|
# Version cuite dans l'image par scripts/release.sh (build-arg VERSION)
|
|
ARG VERSION=dev
|
|
ENV OHM_VERSION=${VERSION}
|
|
|
|
RUN mkdir -p /data /downloads && chown -R ohm:ohm /opt/ohm /data /downloads
|
|
# Root par défaut : l'entrypoint chown les volumes puis passe en « ohm »
|
|
|
|
EXPOSE 8777
|
|
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
|
|
CMD ["python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8777/health', timeout=4)"]
|
|
|
|
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
|
|
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8777"]
|