Melika Kheirieh commited on
Commit
fec0f37
·
1 Parent(s): 4acedbc

feat(docker): convert to multi-stage build with healthcheck and HF optimization

Browse files
Files changed (1) hide show
  1. Dockerfile +26 -52
Dockerfile CHANGED
@@ -1,61 +1,35 @@
1
- # ---------- Base ----------
2
- FROM python:3.12-slim AS base
3
-
4
  WORKDIR /app
5
- ENV PYTHONUNBUFFERED=1 \
6
- PYTHONDONTWRITEBYTECODE=1
7
 
8
- # ---------- Install dependencies ----------
 
 
 
 
9
  COPY requirements.txt .
10
- RUN pip install --no-cache-dir -r requirements.txt \
11
- && pip install --no-cache-dir supervisor
 
 
 
 
12
 
13
- # ---------- Gradio env (for Hugging Face) ----------
14
- ENV GRADIO_SERVER_NAME=0.0.0.0
15
- ENV GRADIO_SERVER_PORT=7860
16
 
17
- # ---------- Copy source ----------
18
  COPY . .
19
 
20
  # ---------- Metadata & Healthcheck ----------
21
- LABEL maintainer="melika kheirieh"
22
- LABEL description="NL2SQL Copilot full stack (FastAPI + Gradio)"
23
-
24
- # lightweight healthcheck without curl
25
- HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
26
- CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8000/healthz')" || exit 1
27
-
28
- # ---------- Supervisor config ----------
29
- RUN echo "[supervisord]" > /etc/supervisord.conf \
30
- && echo "nodaemon=true" >> /etc/supervisord.conf \
31
- && echo "" >> /etc/supervisord.conf \
32
- && echo "[program:fastapi]" >> /etc/supervisord.conf \
33
- && echo "command=uvicorn main:app --host 0.0.0.0 --port 8000" >> /etc/supervisord.conf \
34
- && echo "autostart=true" >> /etc/supervisord.conf \
35
- && echo "" >> /etc/supervisord.conf \
36
- && echo "[program:gradio]" >> /etc/supervisord.conf \
37
- && echo "command=python app.py" >> /etc/supervisord.conf \
38
- && echo "autostart=true" >> /etc/supervisord.conf
39
-
40
- # ---------- Ports ----------
41
  EXPOSE 7860
42
- EXPOSE 8000
43
-
44
- # ---------- Entrypoint ----------
45
- CMD ["supervisord", "-c", "/etc/supervisord.conf"]
46
-
47
- # ---------- Supervisor config ----------
48
- RUN echo "[supervisord]" > /etc/supervisord.conf \
49
- && echo "nodaemon=true" >> /etc/supervisord.conf \
50
- && echo "" >> /etc/supervisord.conf \
51
- && echo "[program:fastapi]" >> /etc/supervisord.conf \
52
- && echo "command=uvicorn main:app --host 0.0.0.0 --port 8000" >> /etc/supervisord.conf \
53
- && echo "autostart=true" >> /etc/supervisord.conf \
54
- && echo "stdout_logfile=/dev/stdout" >> /etc/supervisord.conf \
55
- && echo "stderr_logfile=/dev/stderr" >> /etc/supervisord.conf \
56
- && echo "" >> /etc/supervisord.conf \
57
- && echo "[program:gradio]" >> /etc/supervisord.conf \
58
- && echo "command=python app.py" >> /etc/supervisord.conf \
59
- && echo "autostart=true" >> /etc/supervisord.conf \
60
- && echo "stdout_logfile=/dev/stdout" >> /etc/supervisord.conf \
61
- && echo "stderr_logfile=/dev/stderr" >> /etc/supervisord.conf
 
1
+ # ---------- Stage 1: Builder ----------
2
+ FROM python:3.12-slim AS builder
 
3
  WORKDIR /app
 
 
4
 
5
+ # Install system deps (curl for healthcheck)
6
+ RUN apt-get update && apt-get install -y --no-install-recommends curl \
7
+ && rm -rf /var/lib/apt/lists/*
8
+
9
+ # Install dependencies
10
  COPY requirements.txt .
11
+ RUN pip install --upgrade pip \
12
+ && pip install --no-cache-dir -r requirements.txt
13
+
14
+ # ---------- Stage 2: Runtime ----------
15
+ FROM python:3.12-slim AS runtime
16
+ WORKDIR /app
17
 
18
+ # Copy from builder
19
+ COPY --from=builder /usr/local/lib/python3.12 /usr/local/lib/python3.12
20
+ COPY --from=builder /usr/local/bin /usr/local/bin
21
 
22
+ # Copy project files
23
  COPY . .
24
 
25
  # ---------- Metadata & Healthcheck ----------
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  EXPOSE 7860
27
+ HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
28
+ CMD curl -f http://localhost:7860/ || exit 1
29
+
30
+ # ---------- Run the App ----------
31
+ # 👉 Gradio version
32
+ # CMD ["python", "app.py"]
33
+
34
+ # 👉 FastAPI version
35
+ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]