ajaxwin commited on
Commit
144ccd7
·
1 Parent(s): 2031e4c

refactor Dockerfile and requirements.txt: update base image, consolidate dependencies, and adjust NLTK data download

Browse files
Files changed (2) hide show
  1. Dockerfile +33 -29
  2. requirements.txt +1 -2
Dockerfile CHANGED
@@ -1,39 +1,43 @@
1
- # SmartAudit-Env Dockerfile
2
- # Supports: HF Space (Gradio on :7860) and REST API (FastAPI on :8000)
3
- #
4
- # Build: docker build -t smartaudit-env .
5
- # Run UI: docker run -p 7860:7860 smartaudit-env
6
- # Run API:docker run -p 8000:8000 smartaudit-env python -m uvicorn server:app --host 0.0.0.0 --port 8000
7
-
8
- FROM python:3.11-slim
9
-
10
- # ---- System deps ----
11
- RUN apt-get update && apt-get install -y --no-install-recommends \
12
- build-essential \
13
- curl \
14
  && rm -rf /var/lib/apt/lists/*
15
 
16
- # ---- Create non-root user (required by HF Spaces) ----
17
- RUN useradd -m -u 1000 user
18
- USER user
19
- ENV HOME=/home/user \
20
- PATH=/home/user/.local/bin:$PATH \
21
- PYTHONDONTWRITEBYTECODE=1 \
22
- PYTHONUNBUFFERED=1
 
 
 
 
23
 
24
  WORKDIR /app
25
 
26
- # ---- Python deps ----
27
- COPY --chown=user requirements.txt .
28
- RUN pip install --no-cache-dir --upgrade pip \
29
- && pip install --no-cache-dir -r requirements.txt
 
 
 
30
 
31
- # ---- Application code ----
32
- COPY --chown=user . .
33
 
34
- # ---- HF Space metadata (must expose port 7860) ----
35
- EXPOSE 7860 8000
36
 
37
- # ---- Default: launch Gradio UI ----
38
  CMD ["python", "-m", "uvicorn", "server.app:app", \
39
  "--host", "0.0.0.0", "--port", "7860", "--app-dir", "/app/env"]
 
1
+ ARG BASE_IMAGE=ghcr.io/meta-pytorch/openenv-base:latest
2
+
3
+ # -------- BUILDER STAGE --------
4
+ FROM python:3.12-slim AS builder
5
+
6
+ WORKDIR /app
7
+
8
+ RUN apt-get update && \
9
+ apt-get install -y --no-install-recommends \
10
+ git curl build-essential \
 
 
 
11
  && rm -rf /var/lib/apt/lists/*
12
 
13
+ COPY . /app/env
14
+ WORKDIR /app/env
15
+
16
+ # Install all deps except openenv (which lives in the base image)
17
+ RUN --mount=type=cache,target=/root/.cache/pip \
18
+ grep -v 'openenv' requirements.txt | \
19
+ pip install --target /app/packages -r /dev/stdin
20
+
21
+
22
+ # -------- RUNTIME STAGE --------
23
+ FROM ${BASE_IMAGE}
24
 
25
  WORKDIR /app
26
 
27
+ COPY --from=builder /app/env /app/env
28
+ COPY --from=builder /app/packages /app/packages
29
+
30
+ # Download NLTK data
31
+ RUN PYTHONPATH=/app/packages python -m nltk.downloader \
32
+ wordnet omw-1.4 stopwords punkt \
33
+ averaged_perceptron_tagger_eng punkt_tab
34
 
35
+ # /app/packages first so our versions win; openenv comes from base image's site-packages
36
+ ENV PYTHONPATH="/app/packages:/app/env:$PYTHONPATH"
37
 
38
+ HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
39
+ CMD curl -f http://localhost:7860/health || exit 1
40
 
41
+ ENTRYPOINT []
42
  CMD ["python", "-m", "uvicorn", "server.app:app", \
43
  "--host", "0.0.0.0", "--port", "7860", "--app-dir", "/app/env"]
requirements.txt CHANGED
@@ -9,5 +9,4 @@ pandas==2.2.2
9
  numpy==2.1.1
10
  scikit-learn==1.5.0
11
  sentence-transformers==3.0.1
12
- nltk==3.9.4
13
- openenv[core]>=0.2.0
 
9
  numpy==2.1.1
10
  scikit-learn==1.5.0
11
  sentence-transformers==3.0.1
12
+ nltk==3.9.4