tao-shen commited on
Commit
c6e3458
Β·
verified Β·
1 Parent(s): 13cb5bd

Upload Dockerfile with huggingface_hub

Browse files
Files changed (1) hide show
  1. Dockerfile +25 -50
Dockerfile CHANGED
@@ -1,71 +1,46 @@
1
- # OpenClaw on Hugging Face Spaces β€” δΌ˜εŒ–ζž„ε»ΊοΌˆv2οΌ‰
2
- # δΌ˜εŒ–η‚ΉοΌšnode η”¨ζˆ·ζž„ε»ΊοΌˆζΆˆι™€ chownοΌ‰γ€εˆεΉΆ RUN ε±‚οΌˆε‡ε°‘ε±‚εΌ€ι”€οΌ‰
 
 
 
 
 
3
  FROM node:22-bookworm
4
  SHELL ["/bin/bash", "-c"]
5
 
6
- # ── Layer 1 (root): η³»η»ŸδΎθ΅– + ε·₯ε…·οΌˆε…¨ιƒ¨εˆεΉΆδΈΊδΈ€ε±‚οΌ‰β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
7
- RUN echo "[build][layer1] System deps + tools..." && START=$(date +%s) \
8
  && apt-get update \
9
- && apt-get install -y --no-install-recommends git ca-certificates curl python3 python3-pip patch \
10
  && rm -rf /var/lib/apt/lists/* \
11
  && pip3 install --no-cache-dir --break-system-packages huggingface_hub \
12
  && corepack enable \
13
- && mkdir -p /app \
14
- && chown node:node /app \
15
  && mkdir -p /home/node/.openclaw/workspace /home/node/.openclaw/credentials \
16
  && chown -R node:node /home/node \
17
- && echo "[build][layer1] System deps + tools: $(($(date +%s) - START))s"
 
 
 
18
 
19
- # ── εˆ‡ζ’εˆ° node η”¨ζˆ·οΌˆεŽη»­ζ‰€ζœ‰ζ“δ½œιƒ½δ»₯ node θΊ«δ»½οΌŒζ— ιœ€ chown)───────────────
20
  USER node
21
  ENV HOME=/home/node
22
  WORKDIR /app
23
 
24
- # ── Layer 2a: Clone + Patch + Install (split to reduce peak memory) ──────────
25
- COPY --chown=node:node patches /app/patches
26
- RUN echo "[build][layer2a] Clone + install..." && START=$(date +%s) \
27
- && git clone --depth 1 https://github.com/openclaw/openclaw.git openclaw \
28
- && echo "[build] git clone: $(($(date +%s) - START))s" \
29
- && cd openclaw \
30
- && for p in /app/patches/*.patch; do \
31
- if [ -f "$p" ]; then \
32
- patch -p1 < "$p" \
33
- && echo "[build] patch applied: $(basename $p)"; \
34
- fi; \
35
- done \
36
- && T1=$(date +%s) \
37
- && pnpm install --frozen-lockfile \
38
- && echo "[build] pnpm install: $(($(date +%s) - T1))s" \
39
- && pnpm store prune 2>/dev/null || true \
40
- && echo "[build][layer2a] Clone+install: $(($(date +%s) - START))s"
41
-
42
- # ── Layer 2b: Build (separate layer so install memory is freed) ──────────────
43
- RUN cd /app/openclaw \
44
- && echo "[build][layer2b] Building..." && START=$(date +%s) \
45
- && NODE_OPTIONS="--max-old-space-size=512" pnpm build \
46
- && echo "[build] pnpm build: $(($(date +%s) - START))s" \
47
- && T3=$(date +%s) \
48
- && NODE_OPTIONS="--max-old-space-size=512" OPENCLAW_PREFER_PNPM=1 pnpm ui:build \
49
- && echo "[build] pnpm ui:build: $(($(date +%s) - T3))s" \
50
- && test -f dist/entry.js && echo "[build] OK dist/entry.js" \
51
- && test -f dist/plugin-sdk/index.js && echo "[build] OK dist/plugin-sdk/index.js" \
52
- && test -d extensions/telegram && echo "[build] OK extensions/telegram" \
53
- && test -d extensions/whatsapp && echo "[build] OK extensions/whatsapp" \
54
- && test -d dist/control-ui && echo "[build] OK dist/control-ui" \
55
- && mkdir -p /app/openclaw/empty-bundled-plugins \
56
- && node -e "console.log(require('./package.json').version)" > /app/openclaw/.version \
57
- && echo "[build] version: $(cat /app/openclaw/.version)" \
58
- && echo "[build][layer2b] Build: $(($(date +%s) - START))s"
59
-
60
- # ── Layer 2.5: A2A Gateway Extension (optional, activated by A2A_PEERS env) ──
61
- RUN echo "[build][layer2.5] Cloning A2A gateway extension..." && START=$(date +%s) \
62
  && git clone --depth 1 https://github.com/win4r/openclaw-a2a-gateway.git /app/openclaw/extensions/a2a-gateway \
63
  && cd /app/openclaw/extensions/a2a-gateway \
64
  && npm install --production \
65
- && echo "[build] A2A gateway installed: $(ls node_modules | wc -l) packages" \
66
- && echo "[build][layer2.5] A2A gateway: $(($(date +%s) - START))s"
 
 
 
 
67
 
68
- # ── Layer 3 (node): Scripts + Config + Frontend ──────────────────────────────
69
  COPY --chown=node:node scripts /home/node/scripts
70
  COPY --chown=node:node frontend /home/node/frontend
71
  COPY --chown=node:node openclaw.json /home/node/scripts/openclaw.json.default
 
1
+ # OpenClaw on Hugging Face Spaces β€” Pre-built image (v3)
2
+ # Uses official pre-built image to avoid 30+ minute builds on cpu-basic
3
+
4
+ # ── Stage 1: Pull pre-built OpenClaw ─────────────────────────────────────────
5
+ FROM ghcr.io/openclaw/openclaw:latest AS openclaw-prebuilt
6
+
7
+ # ── Stage 2: Runtime ─────────────────────────────────────────────────────────
8
  FROM node:22-bookworm
9
  SHELL ["/bin/bash", "-c"]
10
 
11
+ # ── System dependencies (root) ───────────────────────────────────────────────
12
+ RUN echo "[build] Installing system deps..." && START=$(date +%s) \
13
  && apt-get update \
14
+ && apt-get install -y --no-install-recommends git ca-certificates curl python3 python3-pip \
15
  && rm -rf /var/lib/apt/lists/* \
16
  && pip3 install --no-cache-dir --break-system-packages huggingface_hub \
17
  && corepack enable \
18
+ && mkdir -p /app/openclaw \
19
+ && chown -R node:node /app \
20
  && mkdir -p /home/node/.openclaw/workspace /home/node/.openclaw/credentials \
21
  && chown -R node:node /home/node \
22
+ && echo "[build] System deps: $(($(date +%s) - START))s"
23
+
24
+ # ── Copy pre-built OpenClaw (skips clone + install + build entirely) ─────────
25
+ COPY --from=openclaw-prebuilt --chown=node:node /app /app/openclaw
26
 
 
27
  USER node
28
  ENV HOME=/home/node
29
  WORKDIR /app
30
 
31
+ # ── A2A Gateway Extension ───────────────────────────────────────────────────
32
+ RUN echo "[build] Installing A2A gateway..." && START=$(date +%s) \
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  && git clone --depth 1 https://github.com/win4r/openclaw-a2a-gateway.git /app/openclaw/extensions/a2a-gateway \
34
  && cd /app/openclaw/extensions/a2a-gateway \
35
  && npm install --production \
36
+ && echo "[build] A2A gateway: $(($(date +%s) - START))s"
37
+
38
+ # ── Prepare runtime dirs ────────────────────────────────────────────────────
39
+ RUN mkdir -p /app/openclaw/empty-bundled-plugins \
40
+ && node -e "try{console.log(require('/app/openclaw/package.json').version)}catch(e){console.log('unknown')}" > /app/openclaw/.version \
41
+ && echo "[build] OpenClaw version: $(cat /app/openclaw/.version)"
42
 
43
+ # ── Scripts + Config + Frontend ──────────────────────────────────────────────
44
  COPY --chown=node:node scripts /home/node/scripts
45
  COPY --chown=node:node frontend /home/node/frontend
46
  COPY --chown=node:node openclaw.json /home/node/scripts/openclaw.json.default