Spaces:
Paused
Paused
# ⚙️ Étape 1 : Image de base stable avec GLIBC + wheels compatibles | |
FROM python:3.10-slim | |
# 📦 Étape 2 : dépendances système minimales | |
RUN apt-get update && apt-get install -y \ | |
build-essential \ | |
git \ | |
cmake \ | |
curl \ | |
libopenblas-dev \ | |
libsqlite3-dev \ | |
libgl1 \ | |
libglib2.0-0 \ | |
libomp-dev \ | |
&& rm -rf /var/lib/apt/lists/* | |
# 👤 Étape 3 : Créer un utilisateur non-root "appuser" | |
RUN useradd -ms /bin/bash appuser | |
# 📁 Étape 4 : Créer le dossier de travail avec droits pour appuser | |
WORKDIR /code | |
RUN mkdir -p /code/.streamlit && chown -R appuser:appuser /code | |
# ⚠️ Étape 5 : définir le HOME pour Streamlit | |
ENV HOME="/code" | |
# 📥 Étape 6 : copier les wheels (llama-cpp-python précompilée) | |
COPY wheels/ ./wheels/ | |
# ⚡ Étape 7 : installer pip et la wheel locale | |
RUN pip install --no-cache-dir --upgrade pip setuptools wheel \ | |
&& pip install --no-cache-dir ./wheels/llama_cpp_python-0.3.14-*.whl | |
# 📄 Étape 8 : copier requirements.txt (sans llama-cpp-python dedans) | |
COPY requirements.txt . | |
# 📦 Étape 9 : installer le reste des dépendances | |
RUN pip install --no-cache-dir --prefer-binary -r requirements.txt | |
# 📁 Étape 10 : copier tout le code de l'application | |
COPY . . | |
# 👤 Étape 11 : basculer en utilisateur non-root pour exécution | |
USER appuser | |
# 🌐 Étape 12 : exposer le port Streamlit | |
EXPOSE 7860 | |
# 🚀 Étape 13 : lancer Streamlit | |
CMD ["streamlit", "run", "app.py", "--server.port=7860", "--server.address=0.0.0.0"] | |