# Base Node image FROM node:20-bookworm-slim WORKDIR /app # Git cần để clone repo RUN apt-get update && apt-get install -y --no-install-recommends git ca-certificates \ && rm -rf /var/lib/apt/lists/* # Hugging Face Spaces thường set PORT, nhưng bạn nói app dùng 3000 ENV PORT=3000 EXPOSE 3000 # Repo URL sẽ truyền qua biến môi trường khi chạy (Spaces "Variables and secrets") # Ví dụ: REPO_URL=https://github.com/username/repo.git ENV REPO_URL="" # (Tuỳ chọn) Nhánh hoặc tag ENV REPO_REF="main" # Start script: clone repo rồi chạy node server # - Nếu có package-lock.json => npm ci # - Nếu chỉ có package.json => npm install # - Nếu không có package.json => chạy trực tiếp entry (mặc định server.js) ENV NODE_ENTRY="server.js" CMD bash -lc '\ set -euo pipefail; \ if [ -z "${REPO_URL}" ]; then echo "ERROR: REPO_URL is empty"; exit 1; fi; \ rm -rf /app/src; \ git clone --depth 1 --branch "${REPO_REF}" "${REPO_URL}" /app/src; \ cd /app/src; \ if [ -f package.json ]; then \ if [ -f package-lock.json ]; then npm ci --omit=dev; else npm install --omit=dev; fi; \ if npm run | grep -qE " start"; then npm run start; else node "${NODE_ENTRY}"; fi; \ else \ node "${NODE_ENTRY}"; \ fi'