File size: 3,257 Bytes
b07bb2c d75ac2b b07bb2c d75ac2b 7dbb323 d75ac2b b07bb2c d75ac2b b07bb2c d75ac2b | 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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | # OpenClaw on Hugging Face Spaces β with Groq Support
# δΌεηΉοΌnode η¨ζ·ζε»ΊοΌζΆι€ chownοΌγεεΉΆ RUN ε±οΌεε°ε±εΌιοΌ
FROM node:22-bookworm
SHELL ["/bin/bash", "-c"]
# ββ Layer 1 (root): η³»η»δΎθ΅ + ε·₯ε
·οΌε
¨ι¨εεΉΆδΈΊδΈε±οΌβββββββββββββββββββββββββ
RUN echo "[build][layer1] System deps + tools..." && START=$(date +%s) \
&& apt-get update \
&& apt-get install -y --no-install-recommends git ca-certificates curl python3 python3-pip patch \
&& rm -rf /var/lib/apt/lists/* \
&& pip3 install --no-cache-dir --break-system-packages huggingface_hub \
&& corepack enable \
&& mkdir -p /app \
&& chown node:node /app \
&& mkdir -p /home/node/.openclaw/workspace /home/node/.openclaw/credentials \
&& chown -R node:node /home/node \
&& echo "[build][layer1] System deps + tools: $(($(date +%s) - START))s"
# ββ εζ’ε° node η¨ζ·οΌεη»ζζζδ½ι½δ»₯ node θΊ«δ»½οΌζ ι chownοΌβββββββββββββββ
USER node
ENV HOME=/home/node
WORKDIR /app
# ββ Layer 2 (node): Clone + Patch + Install + BuildοΌεεΉΆδΈΊδΈε±οΌβββββββββββββ
COPY --chown=node:node patches /app/patches
RUN echo "[build][layer2] Clone + install + build..." && START=$(date +%s) \
&& git clone --depth 1 https://github.com/openclaw/openclaw.git openclaw \
&& echo "[build] git clone: $(($(date +%s) - START))s" \
&& cd openclaw \
&& for p in /app/patches/*.patch; do \
if [ -f "$p" ]; then \
patch -p1 < "$p" \
&& echo "[build] patch applied: $(basename $p)"; \
fi; \
done \
&& T1=$(date +%s) \
&& pnpm install --frozen-lockfile \
&& echo "[build] pnpm install: $(($(date +%s) - T1))s" \
&& T2=$(date +%s) \
&& pnpm build \
&& echo "[build] pnpm build: $(($(date +%s) - T2))s" \
&& T3=$(date +%s) \
&& OPENCLAW_PREFER_PNPM=1 pnpm ui:build \
&& echo "[build] pnpm ui:build: $(($(date +%s) - T3))s" \
&& test -f dist/entry.js && echo "[build] OK dist/entry.js" \
&& test -f dist/plugin-sdk/index.js && echo "[build] OK dist/plugin-sdk/index.js" \
&& test -d extensions/telegram && echo "[build] OK extensions/telegram" \
&& test -d extensions/whatsapp && echo "[build] OK extensions/whatsapp" \
&& test -d dist/control-ui && echo "[build] OK dist/control-ui" \
&& mkdir -p /app/openclaw/empty-bundled-plugins \
&& node -e "console.log(require('./package.json').version)" > /app/openclaw/.version \
&& echo "[build] version: $(cat /app/openclaw/.version)" \
&& echo "[build][layer2] Total clone+install+build: $(($(date +%s) - START))s"
# ββ Layer 3 (node): Scripts + Config ββββββββββββββββββββββββββββββββββββββββββ
COPY --chown=node:node scripts /home/node/scripts
COPY --chown=node:node openclaw.json /home/node/scripts/openclaw.json.default
RUN chmod +x /home/node/scripts/entrypoint.sh /home/node/scripts/sync_hf.py
ENV NODE_ENV=production
ENV OPENCLAW_BUNDLED_PLUGINS_DIR=/app/openclaw/empty-bundled-plugins
ENV OPENCLAW_PREFER_PNPM=1
ENV PATH="/home/node/.local/bin:$PATH"
WORKDIR /home/node
CMD ["/home/node/scripts/entrypoint.sh"]
|