uploadtik / Dockerfile
haaaaus's picture
Create Dockerfile
5f3b9bc verified
# 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'