HamidOmarov commited on
Commit
dcc717e
·
1 Parent(s): ae65368

build(docker): add Dockerfile and boot entrypoint for HF Spaces

Browse files
Files changed (2) hide show
  1. Dockerfile +30 -6
  2. boot.py +32 -0
Dockerfile CHANGED
@@ -1,9 +1,33 @@
1
- FROM python:3.11-slim
 
 
 
 
 
2
  WORKDIR /app
3
- ENV HF_HOME=/app/.cache TRANSFORMERS_CACHE=/app/.cache HUGGINGFACE_HUB_CACHE=/app/.cache SENTENCE_TRANSFORMERS_HOME=/app/.cache PYTHONUNBUFFERED=1
4
- RUN mkdir -p /app/.cache /app/data/uploads /app/data/index && chmod -R 777 /app/.cache /app/data
5
- COPY requirements.txt ./
6
- RUN pip install --no-cache-dir -r requirements.txt
 
 
 
 
 
 
 
 
7
  COPY . .
 
 
 
 
 
 
 
 
 
 
 
8
  EXPOSE 7860
9
- CMD ["uvicorn","app.api:app","--host","0.0.0.0","--port","7860"]
 
1
+ FROM python:3.11-slim
2
+
3
+ ENV PYTHONDONTWRITEBYTECODE=1 \
4
+ PYTHONUNBUFFERED=1 \
5
+ PIP_NO_CACHE_DIR=1
6
+
7
  WORKDIR /app
8
+
9
+ # Sistəm asılılıqları (faiss, pypdf s. üçün build-essential faydalıdır)
10
+ RUN apt-get update && apt-get install -y --no-install-recommends build-essential && \
11
+ rm -rf /var/lib/apt/lists/*
12
+
13
+ # Python asılılıqları
14
+ COPY requirements.txt .
15
+ RUN python -m pip install --upgrade pip && \
16
+ (pip install --no-cache-dir -r requirements.txt || true) && \
17
+ pip install --no-cache-dir fastapi uvicorn[standard]
18
+
19
+ # Mənbə
20
  COPY . .
21
+
22
+ # Default ENV-lər (kodunda istifadə olunursa)
23
+ ENV APP_ROOT=/app \
24
+ DATA_DIR=/app/data \
25
+ UPLOAD_DIR=/app/uploads \
26
+ INDEX_DIR=/app/index \
27
+ HF_HOME=/app/.cache \
28
+ EMBED_MODEL=sentence-transformers/all-MiniLM-L6-v2 \
29
+ OUTPUT_LANG=en
30
+
31
+ # HF $PORT-u verir; fallback 7860
32
  EXPOSE 7860
33
+ CMD ["python","-u","boot.py"]
boot.py ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os, sys, importlib
2
+ import uvicorn
3
+
4
+ candidates = [
5
+ os.getenv("APP_MODULE"),
6
+ "app.main:app",
7
+ "main:app",
8
+ "app.api:app",
9
+ "app.server:app",
10
+ ]
11
+
12
+ def try_run(spec: str):
13
+ mod, name = spec.split(":")
14
+ m = importlib.import_module(mod)
15
+ app = getattr(m, name)
16
+ port = int(os.getenv("PORT", "7860"))
17
+ uvicorn.run(app, host="0.0.0.0", port=port)
18
+
19
+ if __name__ == "__main__":
20
+ last_err = None
21
+ for cand in [c for c in candidates if c]:
22
+ try:
23
+ print(f"[boot] Trying {cand}", flush=True)
24
+ try_run(cand)
25
+ sys.exit(0)
26
+ except Exception as e:
27
+ print(f"[boot] Failed {cand}: {e}", flush=True)
28
+ last_err = e
29
+ print("[boot] No valid APP_MODULE found. Set env APP_MODULE='pkg.module:app'", flush=True)
30
+ if last_err:
31
+ raise last_err
32
+ sys.exit(1)