Files
open-web-agent-rs/Local.Dockerfile
2025-06-05 22:42:17 -04:00

89 lines
2.2 KiB
Docker

# Stage 1: Build the Rust agent-core binary
FROM rust:1-slim-bullseye as agent-server-builder
WORKDIR /build-context
# Install only the minimal required build dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
pkg-config \
musl-tools \
&& rm -rf /var/lib/apt/lists/*
# Build for musl to ensure static linking
RUN rustup target add aarch64-unknown-linux-musl
# Copy only necessary files for building
COPY Cargo.toml Cargo.lock ./
COPY crates ./crates
COPY assets ./assets
# Build with musl target for static linking
RUN cargo build -p agent-server --release --target aarch64-unknown-linux-musl && \
strip /build-context/target/aarch64-unknown-linux-musl/release/agent-server
# Stage 2: Build Bun dependencies
FROM oven/bun:alpine as node-builder
# Install system dependencies and node-gyp
RUN apk add --no-cache \
ca-certificates \
curl \
unzip \
git \
python3 \
py3-pip \
build-base \
pkgconf \
cmake \
nodejs \
npm \
bash \
chromium \
nss \
freetype \
freetype-dev \
harfbuzz \
ca-certificates \
ttf-freefont \
font-noto-emoji \
nodejs \
wqy-zenhei \
&& rm -rf /var/cache/* \
&& mkdir /var/cache/apk \
&& npm install -g node-gyp
WORKDIR /app
# dep files
COPY packages packages
COPY package.json package-lock.json bun.lockb ./
## Install deps
RUN bun install
FROM node:20-bookworm as app
WORKDIR /app
# Install playwright
ENV PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=/usr/lib/chromium/chromium \
PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1
RUN npx -y playwright@1.49.1 install --with-deps chromium && npm install -g bun
COPY --from=node-builder /app/node_modules ./node_modules
COPY --from=node-builder /app/package.json .
COPY --from=node-builder /app/packages ./packages
COPY --from=agent-server-builder /build-context/target/aarch64-unknown-linux-musl/release/agent-server ./agent-server
# Ensure the binary is executable
RUN chmod +x ./agent-server
# copy agent source files
COPY packages/genaiscript-rust-shim/dist ./dist
# Expose the required port
EXPOSE 3006
# Set the entrypoint to the Rust binary
ENTRYPOINT ["./agent-server"]