# warp-web — the optional web client, as its own container. # # Build from the repository root (the client uses the shared apps/ui package): # # docker build -t warp-web -f apps/web/Dockerfile . # docker run -p 8080:8080 -e WARP_WEB_HOMESERVER=http://warp:8008 warp-web FROM node:22-alpine AS web WORKDIR /src RUN corepack enable # Lockfile and manifests first, so the package store survives source changes. COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./ COPY apps/ui/package.json ./apps/ui/ COPY apps/web/package.json ./apps/web/ RUN pnpm install --frozen-lockfile --filter @warp/web... COPY apps/ui ./apps/ui COPY apps/web ./apps/web RUN pnpm --filter @warp/web build FROM golang:1.26-alpine AS build WORKDIR /src/apps/web COPY apps/web/go.mod ./ COPY apps/web/cmd ./cmd COPY apps/web/host ./host COPY apps/web/client/client.go ./client/ COPY --from=web /src/apps/web/client/build/dist ./client/build/dist ARG VERSION=0.0.0-dev ENV CGO_ENABLED=0 GOWORK=off RUN go build -trimpath -ldflags "-s -w -X main.version=${VERSION}" -o /out/warp-web ./cmd/warp-web FROM alpine:3.21 RUN apk add --no-cache ca-certificates curl && adduser -D -u 10003 warp-web COPY --from=build /out/warp-web /usr/local/bin/warp-web USER warp-web ENV WARP_WEB_LISTEN=":8080" \ WARP_WEB_HOMESERVER="http://warp:8008" \ WARP_WEB_LOG_FORMAT="json" EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \ CMD curl -fsS http://127.0.0.1:8080/healthz || exit 1 ENTRYPOINT ["warp-web"]