# App AEDE : la caisse de la Librairie (aucune cle, aucune graine : la Cave signe hors ligne)
# L'image de base est epinglee par son empreinte : install.sh la releve a la premiere installation (docker pull, puis
# RepoDigests) et la garde dans .env (AEDE_BASE=python@sha256:...). Une reconstruction ne tire donc jamais une autre image
# sans que l'auteur l'ait decide (effacer la ligne AEDE_BASE de .env, puis relancer install.sh). Audit serveur I4.
ARG AEDE_BASE=python:3.11-slim
FROM ${AEDE_BASE}
# les dependances, epinglees par leur empreinte (audit serveur I4) : un paquet de PyPI qui changerait d'un octet est refuse
COPY requirements.txt /tmp/requirements.txt
RUN pip install --no-cache-dir --require-hashes --only-binary=:all: -r /tmp/requirements.txt && rm /tmp/requirements.txt && useradd -u 1000 -m aede
WORKDIR /app
COPY aede_app/ /app/
ENV AEDE_DONNEES=/donnees AEDE_PAQUET=/paquet AEDE_PORT=8080 PYTHONUNBUFFERED=1
# deux zones d'allocation au plus : la memoire liberee par un fil ne reste pas gardee dans une zone par fil (contre-audit, N1)
ENV MALLOC_ARENA_MAX=2
RUN mkdir -p /donnees && chown aede /donnees && chmod 700 /donnees      # la base vive, lisible par la caisse seule (umask 077 : web.py)
USER aede
VOLUME ["/donnees"]
EXPOSE 8080
HEALTHCHECK --interval=60s --timeout=5s CMD python -c "import urllib.request;urllib.request.urlopen('http://127.0.0.1:8080/sante',timeout=4)"
CMD ["python", "web.py"]
