FROM node:20-alpine AS web
WORKDIR /w
COPY frontend/package*.json ./
RUN npm ci --no-audit --no-fund
COPY frontend/ ./
RUN npx next build

FROM golang:1.22-alpine AS api
WORKDIR /b
COPY backend/ ./
RUN CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o /panel ./cmd/panel

FROM alpine:3.20
RUN adduser -D -u 10001 panel && apk add --no-cache ca-certificates curl
COPY --from=api /panel /usr/local/bin/panel
COPY --from=web /w/out /srv/web
ENV PANEL_LISTEN=0.0.0.0:8080 PANEL_STATIC_DIR=/srv/web
USER panel
EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=5s CMD curl -fsS http://127.0.0.1:8080/api/health || exit 1
ENTRYPOINT ["panel"]
CMD ["serve"]
