FROM golang:1.23-alpine AS backend
WORKDIR /app/backend
COPY backend/go.mod backend/go.sum ./
RUN go mod download
COPY backend/ ./
RUN go build -o /traefik-gui ./cmd/traefik-gui

FROM node:20-alpine AS frontend
WORKDIR /app/frontend
COPY frontend/package.json frontend/package-lock.json* ./
RUN npm ci || npm install
COPY frontend/ ./
RUN npm run build

FROM alpine:3.19
RUN apk add --no-cache ca-certificates && \
    addgroup -S traefik-gui && \
    adduser -S -G traefik-gui traefik-gui && \
    mkdir -p /app/frontend/dist /data && \
    chown -R traefik-gui:traefik-gui /app/frontend/dist /data
COPY --from=backend /traefik-gui /usr/local/bin/traefik-gui
COPY --from=frontend /app/frontend/dist /app/frontend/dist
RUN chmod 755 /usr/local/bin/traefik-gui && \
    chown -R traefik-gui:traefik-gui /app/frontend/dist
EXPOSE 8080
USER traefik-gui
ENTRYPOINT ["traefik-gui"]
