Replace @code/env and @code/primitives imports with local modules so the Node deploy artifact does not resolve workspace packages to TypeScript source at runtime. Switch Docker build to pnpm frozen install, add runner Dockerfile and a liveness health endpoint.
49 lines
1.3 KiB
Docker
49 lines
1.3 KiB
Docker
FROM oven/bun:1.3.14 AS bun
|
|
|
|
FROM node:24-bookworm-slim AS build
|
|
|
|
COPY --from=bun /usr/local/bin/bun /usr/local/bin/bun
|
|
|
|
WORKDIR /app
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
g++ \
|
|
make \
|
|
python3 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# pnpm-lock.yaml is authoritative; Bun would migrate it and reject frozen mode.
|
|
RUN npm install --global pnpm@11.17.0
|
|
|
|
COPY . .
|
|
RUN pnpm install --frozen-lockfile
|
|
RUN node packages/agents/node_modules/@flue/cli/bin/flue.mjs build --target node --root packages/agents
|
|
|
|
FROM node:24-bookworm-slim
|
|
|
|
ENV NODE_ENV=production
|
|
ENV PORT=3000
|
|
|
|
WORKDIR /app
|
|
|
|
COPY --from=build /app /app
|
|
COPY --from=bun /usr/local/bin/bun /usr/local/bin/bun
|
|
|
|
# Attempt preparation occurs in the Flue handler: it clones repositories and
|
|
# installs their dependencies before the runner mounts the shared checkout.
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
git \
|
|
openssh-client \
|
|
&& rm -rf /var/lib/apt/lists/* \
|
|
&& groupadd --system --gid 10001 zopu \
|
|
&& useradd --system --uid 10001 --gid zopu --home-dir /nonexistent zopu \
|
|
&& mkdir -p /var/lib/zopu/workspaces \
|
|
&& chown -R zopu:zopu /app /var/lib/zopu
|
|
USER zopu
|
|
|
|
EXPOSE 3000
|
|
|
|
CMD ["node", "packages/agents/dist/server.mjs"]
|