FROM node:22 AS web-builder WORKDIR /web COPY web/package.json web/package-lock.json ./ COPY web/shared/package.json ./shared/package.json COPY web/frpc/package.json ./frpc/package.json COPY web/frps/package.json ./frps/package.json RUN npm ci COPY web/shared/ ./shared/ COPY web/frps/ ./frps/ RUN npm run build --workspace frps FROM golang:1.26 AS building COPY . /building COPY --from=web-builder /web/frps/dist /building/web/frps/dist WORKDIR /building RUN env CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -tags frps -o bin/frps ./cmd/frps FROM alpine:3 RUN apk add --no-cache tzdata COPY --from=building /building/bin/frps /usr/bin/frps ENTRYPOINT ["/usr/bin/frps"]