MyPersonalLifeCoach / Dockerfile
Alessandro Piana
dockerfile con logging 60
d9e7f33
# Usa un'immagine Python ufficiale
FROM python:3.10-slim
# Imposta la cartella di lavoro nell'immagine
WORKDIR /app
# Copia il file delle dipendenze e installale
COPY requirements.txt requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
# --- AGGIUNGI QUESTA RIGA PER LA SESSIONE ---
# Crea la cartella scrivibile per i file di sessione
RUN mkdir -p /data/flask_sessions && chmod 777 /data/flask_sessions
# Crea cartella per offload (necessaria per device_map="auto")
# --- PRE-CARICA MODELLO E TOKENIZER IN /data/hf_cache ---
RUN mkdir -p /data/hf_cache && \
python -c "\
from transformers import AutoTokenizer, AutoModelForCausalLM; \
import os; \
os.environ['HF_HOME'] = '/data/hf_cache'; \
print('Scarico tokenizer...'); \
AutoTokenizer.from_pretrained('microsoft/Phi-4', cache_dir='/data/hf_cache'); \
print('Tokenizer scaricato.'); \
" && \
echo "Modello pre-scaricato in /data/hf_cache"
# --- FINE PRE-CARICA ---
# === FIX DEFINITIVO PER getpwuid(): uid not found: 1000 ===
RUN adduser --uid 1000 --disabled-password --gecos '' appuser && \
mkdir -p /home/appuser && \
chown -R appuser:appuser /home/appuser
# Imposta utente e home
USER appuser
ENV HOME=/home/appuser
ENV USER=appuser
# === FINE FIX ===
#
# Crea offload folder con permissions corrette
RUN mkdir -p /tmp/offload && \
chown -R appuser:appuser /tmp/offload
# Copia tutto il resto del tuo progetto
COPY . .
# Esponi la porta richiesta da Hugging Face
EXPOSE 7860
# Questo farà sì che i tuoi comandi print() appaiano
# nei log in tempo reale, proprio come i logger.info().
#
ENV PYTHONUNBUFFERED=1
#
# Questo comando è CORRETTO.
# 1. Esegue la funzione Python, che (grazie alla tua modifica ad app.py)
# creerà il db in /data/lifecoach.db
# 2. Avvia Gunicorn sulla porta 7860 con i log attivati.
#
CMD python -c "from app import initialize_database; initialize_database()" && \
gunicorn --bind 0.0.0.0:7860 --workers 1 --threads 8 --timeout 300 --log-level=info --log-file=- app:app