File size: 1,282 Bytes
5f3b9bc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 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'