Spaces:
Runtime error
Runtime error
| ARG NODE_VERSION=22.13.0 | |
| FROM node:${NODE_VERSION} AS base | |
| WORKDIR /app | |
| ENV NODE_ENV="production" \ | |
| PUPPETEER_CACHE_DIR=/app/.cache \ | |
| DISPLAY=:10 \ | |
| PATH="/usr/bin:/app/selenium/driver:${PATH}" \ | |
| CHROME_BIN=/usr/bin/chromium \ | |
| CHROME_PATH=/usr/bin/chromium | |
| LABEL org.opencontainers.image.source="https://github.com/steel-dev/steel-browser" | |
| # Install dependencies | |
| RUN rm -f /etc/apt/apt.conf.d/docker-clean; \ | |
| echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache; \ | |
| apt-get update -qq && \ | |
| DEBIAN_FRONTEND=noninteractive apt-get -yq dist-upgrade | |
| # Stage 1: Build UI | |
| FROM node:${NODE_VERSION} AS ui-build | |
| WORKDIR /app | |
| # Copy root workspace files for UI build | |
| COPY --link package.json package-lock.json ./ | |
| COPY --link ui/ ./ui/ | |
| # Install UI dependencies and build with correct base path | |
| RUN npm ci --include=dev -w ui --ignore-scripts | |
| RUN VITE_API_URL="" VITE_WS_URL="" npm run build -w ui -- --base=/ui | |
| # Stage 2: Build API | |
| FROM base AS api-build | |
| RUN apt-get update && \ | |
| DEBIAN_FRONTEND=noninteractive apt-get install -y \ | |
| build-essential \ | |
| pkg-config \ | |
| python-is-python3 \ | |
| xvfb | |
| # Copy root workspace files for API build | |
| COPY --link package.json package-lock.json ./ | |
| # Remove or override the prepare script to avoid husky in Docker | |
| RUN npm pkg set scripts.prepare="echo skip husky" | |
| COPY --link api/ ./api/ | |
| # Install dependencies for API | |
| RUN npm ci --include=dev --workspace=api | |
| # Install dependencies for recorder extension separately | |
| RUN cd api/extensions/recorder && npm ci --include=dev && cd - | |
| # Build the API package | |
| RUN npm run build -w api | |
| # Build the recorder extension | |
| RUN cd api/extensions/recorder && \ | |
| npm run build && \ | |
| cd - | |
| # Prune dev dependencies | |
| RUN npm prune --omit=dev -w api | |
| RUN cd api/extensions/recorder && npm prune --omit=dev && cd - | |
| # Stage 3: Production | |
| FROM base AS production | |
| # Install production dependencies | |
| RUN apt-get update && \ | |
| DEBIAN_FRONTEND=noninteractive apt-get install -yq --no-install-recommends \ | |
| wget \ | |
| nginx \ | |
| gnupg \ | |
| fonts-ipafont-gothic \ | |
| fonts-wqy-zenhei \ | |
| fonts-thai-tlwg \ | |
| fonts-kacst \ | |
| fonts-freefont-ttf \ | |
| libxss1 \ | |
| xvfb \ | |
| curl \ | |
| unzip \ | |
| default-jre \ | |
| dbus \ | |
| dbus-x11 \ | |
| procps \ | |
| x11-xserver-utils | |
| # Install Chrome and ChromeDriver | |
| RUN apt-get update && \ | |
| DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ | |
| wget \ | |
| ca-certificates \ | |
| curl \ | |
| unzip \ | |
| # Download and install Chromium | |
| && apt-get install -y chromium chromium-driver \ | |
| # Clean up | |
| && apt-get clean \ | |
| && rm -rf /var/lib/apt/lists/* \ | |
| && rm -rf /var/cache/apt/* | |
| RUN mkdir -p /files | |
| # Copy the built API from api-build stage | |
| COPY --from=api-build /app /app | |
| # Copy the built UI from ui-build stage into the API container | |
| COPY --from=ui-build /app/ui/dist /app/ui/dist | |
| # Copy entrypoint script | |
| COPY --chmod=755 api/entrypoint.sh /app/api/entrypoint.sh | |
| EXPOSE 3000 9223 | |
| ENV HOST_IP=localhost \ | |
| DBUS_SESSION_BUS_ADDRESS=autolaunch: | |
| ENTRYPOINT ["/app/api/entrypoint.sh"] | |