| # Image de base Node.js | |
| FROM node:20-slim | |
| # socat = petit relais TCP qui fera le pont 0.0.0.0 -> 127.0.0.1 | |
| # (installation en root, pendant le build) | |
| RUN apt-get update \ | |
| && apt-get install -y --no-install-recommends socat \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Installation globale de 9router | |
| RUN npm install -g 9router@0.4.63 | |
| # --- Spécificité HuggingFace Spaces --- | |
| # UID 1000 = utilisateur "node" déjà présent dans l'image. | |
| USER node | |
| ENV HOME=/home/node \ | |
| PATH=/home/node/.local/bin:$PATH | |
| WORKDIR $HOME/app | |
| # Port exposé = port attendu par HuggingFace | |
| EXPOSE 7860 | |
| # Architecture : | |
| # - 9router tourne EN ARRIERE-PLAN sur 127.0.0.1:8080 (port interne) | |
| # - socat reste AU PREMIER PLAN (PID 1) : il écoute sur 0.0.0.0:7860 | |
| # et relaie tout vers 127.0.0.1:8080 | |
| # => le conteneur reste vivant (socat) ET le health check externe de | |
| # HuggingFace atteint bien le port 7860. | |
| CMD 9router --host 127.0.0.1 --port 8080 --no-browser --skip-update --log & \ | |
| sleep 5 && \ | |
| exec socat TCP-LISTEN:7860,fork,reuseaddr TCP:127.0.0.1:8080 |