FROM node:22 AS web-builder
COPY web/package.json /web/package.json
COPY web/shared/ /web/shared/
COPY web/frpc/ /web/frpc/
WORKDIR /web
RUN npm install
WORKDIR /web/frpc
RUN npm run build
FROM golang:1.25 AS building
COPY . /building
COPY --from=web-builder /web/frpc/dist /building/web/frpc/dist
WORKDIR /building
RUN env CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -tags frpc -o bin/frpc ./cmd/frpc
FROM alpine:3.22
RUN apk add --no-cache tzdata ca-certificates
# Create a non-root user for better security
RUN addgroup -S frpc && adduser -S -G frpc frpc
COPY --from=building /building/bin/frpc /usr/bin/frpc
RUN chown frpc:frpc /usr/bin/frpc
USER frpc
ENTRYPOINT ["/usr/bin/frpc"]