Spaces:
Running
Running
File size: 2,976 Bytes
5365372 51ec4bc d41fe21 5365372 51ec4bc d41fe21 5365372 d41fe21 5365372 eec7304 d41fe21 5365372 d41fe21 5365372 eec7304 5365372 51ec4bc d41fe21 5365372 d41fe21 51ec4bc d41fe21 51ec4bc 5365372 78e2c48 d41fe21 51ec4bc d41fe21 eec7304 d41fe21 51ec4bc d41fe21 | 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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | # ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# π¦ HuggingClaw β OpenClaw Gateway for HuggingFace Spaces
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# Multi-stage build: uses pre-built OpenClaw image for fast builds
# ββ Stage 1: Pull pre-built OpenClaw ββ
ARG OPENCLAW_VERSION=latest
FROM ghcr.io/openclaw/openclaw:${OPENCLAW_VERSION} AS openclaw
# ββ Stage 2: Runtime ββ
FROM node:22-slim
ARG OPENCLAW_VERSION=latest
# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
ca-certificates \
jq \
curl \
python3 \
python3-pip \
chromium \
libnss3 \
libatk1.0-0 \
libatk-bridge2.0-0 \
libdrm2 \
libgbm1 \
libxcomposite1 \
libxdamage1 \
libxrandr2 \
libxkbcommon0 \
libx11-6 \
libxext6 \
libxfixes3 \
libasound2 \
fonts-dejavu-core \
fonts-liberation \
fonts-noto-color-emoji \
fonts-freefont-ttf \
fonts-ipafont-gothic \
fonts-wqy-zenhei \
xfonts-scalable \
--no-install-recommends && \
pip3 install --no-cache-dir --break-system-packages huggingface_hub && \
rm -rf /var/lib/apt/lists/*
# Reuse existing node user (UID 1000)
RUN mkdir -p /home/node/app /home/node/.openclaw && \
chown -R 1000:1000 /home/node
# Copy pre-built OpenClaw (skips npm install entirely β much faster!)
COPY --from=openclaw --chown=1000:1000 /app /home/node/.openclaw/openclaw-app
# Add Playwright in an isolated sidecar node_modules so we do not mutate the
# bundled OpenClaw app dependency tree.
RUN mkdir -p /home/node/browser-deps && \
cd /home/node/browser-deps && \
npm init -y && \
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 npm install --omit=dev playwright@1.59.1
# Symlink openclaw CLI so it's available globally
RUN ln -s /home/node/.openclaw/openclaw-app/openclaw.mjs /usr/local/bin/openclaw 2>/dev/null || \
npm install -g openclaw@${OPENCLAW_VERSION}
# Copy HuggingClaw files
COPY --chown=1000:1000 dns-fix.js /opt/dns-fix.js
COPY --chown=1000:1000 health-server.js /home/node/app/health-server.js
COPY --chown=1000:1000 iframe-fix.cjs /home/node/app/iframe-fix.cjs
COPY --chown=1000:1000 start.sh /home/node/app/start.sh
COPY --chown=1000:1000 wa-guardian.js /home/node/app/wa-guardian.js
COPY --chown=1000:1000 workspace-sync.py /home/node/app/workspace-sync.py
RUN chmod +x /home/node/app/start.sh
USER node
ENV HOME=/home/node \
OPENCLAW_VERSION=${OPENCLAW_VERSION} \
PATH=/home/node/.local/bin:/usr/local/bin:$PATH \
NODE_PATH=/home/node/browser-deps/node_modules \
NODE_OPTIONS="--require /opt/dns-fix.js"
WORKDIR /home/node/app
EXPOSE 7861
CMD ["/home/node/app/start.sh"]
|