FROM --platform=$BUILDPLATFORM golang:1.26-bookworm AS builder
ARG NODE_VERSION=24.20.0
ARG TARGETOS
ARG TARGETARCH
ENV CI=1
WORKDIR /src
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends curl xz-utils ca-certificates; \
rm -rf /var/lib/apt/lists/*; \
barch="$(dpkg --print-architecture)"; \
case "$barch" in amd64) narch=x64 ;; arm64) narch=arm64 ;; *) echo "unsupported build arch: $barch" >&2; exit 1 ;; esac; \
curl -fsSL "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${narch}.tar.xz" \
| tar -xJ -C /usr/local --strip-components=1; \
corepack enable && corepack prepare pnpm@9 --activate; \
node --version
COPY app/web/package.json app/web/pnpm-lock.yaml app/web/
RUN cd app/web && pnpm install --frozen-lockfile
COPY . .
RUN cd app/web && NEXT_DIST_DIR=.next-build pnpm build
RUN deploy/package-web-runtime.sh "${NODE_VERSION}" "${TARGETOS}" "${TARGETARCH}" \
server/internal/webbundle/assets/web-runtime.tar.gz
RUN cd server && CGO_ENABLED=0 GOOS="${TARGETOS}" GOARCH="${TARGETARCH}" \
go build -trimpath -ldflags "-s -w" -o /out/knowforge-server .
FROM debian:bookworm-slim AS runtime
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends ca-certificates libstdc++6 wget; \
rm -rf /var/lib/apt/lists/*
ENV KNOWFORGE_DATA=/data \
KNOWFORGE_PORT=6969
WORKDIR /app
COPY --from=builder /out/knowforge-server /usr/local/bin/knowforge-server
RUN mkdir -p /data
VOLUME ["/data"]
EXPOSE 6969
HEALTHCHECK --interval=30s --timeout=5s --start-period=40s --retries=5 \
CMD wget -qO- "http://127.0.0.1:${KNOWFORGE_PORT}/api/v1/health" >/dev/null 2>&1 || exit 1
ENTRYPOINT ["/usr/local/bin/knowforge-server"]