Change HF_HOME
Browse files- Dockerfile +9 -2
- backend/runner/config.py +20 -8
Dockerfile
CHANGED
|
@@ -23,9 +23,16 @@ COPY . .
|
|
| 23 |
# HF routes traffic to $PORT β bind to it
|
| 24 |
ENV PORT=7860 PYTHONUNBUFFERED=1
|
| 25 |
|
| 26 |
-
# Set environment variables for
|
| 27 |
-
ENV
|
|
|
|
| 28 |
ENV STUB_MODE=0
|
| 29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
# Use ENTRYPOINT instead of CMD to prevent Hugging Face from overriding
|
| 31 |
ENTRYPOINT ["gunicorn", "-w", "1", "-k", "gthread", "-t", "300", "-b", "0.0.0.0:7860", "backend.runner.app:app"]
|
|
|
|
| 23 |
# HF routes traffic to $PORT β bind to it
|
| 24 |
ENV PORT=7860 PYTHONUNBUFFERED=1
|
| 25 |
|
| 26 |
+
# Set environment variables for HF Spaces
|
| 27 |
+
ENV HF_HOME=/data
|
| 28 |
+
ENV DATA_ROOT=/data
|
| 29 |
ENV STUB_MODE=0
|
| 30 |
|
| 31 |
+
# Create writable directories and set permissions
|
| 32 |
+
RUN mkdir -p /data/outputs /data/artifacts && \
|
| 33 |
+
chmod 755 /data && \
|
| 34 |
+
chmod 755 /data/outputs && \
|
| 35 |
+
chmod 755 /data/artifacts
|
| 36 |
+
|
| 37 |
# Use ENTRYPOINT instead of CMD to prevent Hugging Face from overriding
|
| 38 |
ENTRYPOINT ["gunicorn", "-w", "1", "-k", "gthread", "-t", "300", "-b", "0.0.0.0:7860", "backend.runner.app:app"]
|
backend/runner/config.py
CHANGED
|
@@ -11,15 +11,27 @@ PROJECT_ROOT = Path(__file__).resolve().parents[2]
|
|
| 11 |
DATA_READ_ROOT = PROJECT_ROOT / "data"
|
| 12 |
|
| 13 |
# WRITE root (Space volume - writable)
|
|
|
|
| 14 |
WRITE_ROOT = Path(os.getenv("HF_HOME", "/data"))
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
print(f"β
Using READ_ROOT: {DATA_READ_ROOT}")
|
| 25 |
|
|
|
|
| 11 |
DATA_READ_ROOT = PROJECT_ROOT / "data"
|
| 12 |
|
| 13 |
# WRITE root (Space volume - writable)
|
| 14 |
+
# HF Spaces uses /data for persistent storage
|
| 15 |
WRITE_ROOT = Path(os.getenv("HF_HOME", "/data"))
|
| 16 |
+
|
| 17 |
+
# Check if the directory exists and is writable
|
| 18 |
+
if not WRITE_ROOT.exists():
|
| 19 |
+
print(f"β οΈ WRITE_ROOT {WRITE_ROOT} does not exist, trying to create it")
|
| 20 |
+
try:
|
| 21 |
+
WRITE_ROOT.mkdir(parents=True, exist_ok=True)
|
| 22 |
+
print(f"β
Created WRITE_ROOT: {WRITE_ROOT}")
|
| 23 |
+
except Exception as e:
|
| 24 |
+
print(f"β Failed to create {WRITE_ROOT}: {e}")
|
| 25 |
+
raise RuntimeError(f"Cannot create writable directory: {e}")
|
| 26 |
+
|
| 27 |
+
# Check write permissions
|
| 28 |
+
if not os.access(WRITE_ROOT, os.W_OK):
|
| 29 |
+
print(f"β WRITE_ROOT {WRITE_ROOT} is not writable")
|
| 30 |
+
print(f"β Current permissions: {oct(WRITE_ROOT.stat().st_mode)[-3:]}")
|
| 31 |
+
print(f"β Owner: {WRITE_ROOT.owner()}")
|
| 32 |
+
raise RuntimeError(f"Directory {WRITE_ROOT} is not writable")
|
| 33 |
+
|
| 34 |
+
print(f"β
Using WRITE_ROOT: {WRITE_ROOT}")
|
| 35 |
|
| 36 |
print(f"β
Using READ_ROOT: {DATA_READ_ROOT}")
|
| 37 |
|