53 lines
1.9 KiB
Docker
53 lines
1.9 KiB
Docker
# simple-cost-dashboard
|
|
#
|
|
# Une seule image sert deux usages, avec la commande par défaut adaptée au
|
|
# déploiement Kubernetes envisagé :
|
|
# - Deployment "web" : lance l'API + le frontend (uvicorn), commande par défaut
|
|
# - CronJob "collect" : même image, commande surchargée :
|
|
# command: ["python", "collector/collect.py"]
|
|
# args: ["--config", "/config/config.json", "--db", "/data/cost_dashboard.db"]
|
|
#
|
|
# Ça évite de maintenir deux images distinctes pour deux moitiés de la même
|
|
# application.
|
|
|
|
FROM python:3.12-slim
|
|
|
|
# Dépendances système minimales (certificats TLS pour les appels AWS/Azure/
|
|
# taux de change ; rien de plus n'est nécessaire, pas de compilation requise
|
|
# par boto3/azure-identity/fastapi).
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends ca-certificates \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /app
|
|
|
|
COPY requirements.txt .
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
COPY api/ ./api/
|
|
COPY collector/ ./collector/
|
|
COPY db/ ./db/
|
|
COPY frontend/ ./frontend/
|
|
|
|
# Utilisateur non-root (bonne pratique, souvent imposée par les PodSecurityPolicy /
|
|
# PodSecurityStandards en Kubernetes).
|
|
RUN useradd --create-home --uid 1000 appuser
|
|
|
|
# Répertoire pour la base SQLite : à monter sur un PersistentVolume en k8s
|
|
# (sinon les données de collecte sont perdues à chaque redéploiement du pod).
|
|
RUN mkdir -p /data && chown -R appuser:appuser /data /app
|
|
VOLUME ["/data"]
|
|
|
|
ENV COST_DASHBOARD_DB=/data/cost_dashboard.db \
|
|
PYTHONUNBUFFERED=1
|
|
|
|
USER appuser
|
|
|
|
EXPOSE 8000
|
|
|
|
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s \
|
|
CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')" || exit 1
|
|
|
|
# Commande par défaut : lance le serveur web. Le CronJob de collecte
|
|
# surcharge 'command'/'args' au niveau du manifeste Kubernetes (voir plus haut).
|
|
CMD ["uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "8000", "--app-dir", "/app"] |