# Build stage FROM node:20-alpine AS node-builder WORKDIR /app COPY web/frontend/package*.json ./ RUN npm ci COPY web/frontend/ ./ RUN npm run build # Go stage FROM golang:1.23-alpine AS go-builder RUN apk add --no-cache git ca-certificates WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . # Copy frontend build COPY --from=node-builder /app/dist ./web/dist RUN CGO_ENABLED=0 GOOS=linux go build -ldflags="-w -s" -o llamalink ./cmd/llamalink # Final stage FROM alpine:3.19 RUN apk add --no-cache ca-certificates curl WORKDIR /app # Create non-root user RUN addgroup -g 1000 llamalink && \ adduser -u 1000 -G llamalink -s /bin/sh -D llamalink COPY --from=go-builder /app/llamalink . COPY --from=go-builder /app/.env.example .env # Create data directory RUN mkdir -p /app/data && chown llamalink:llamalink /app/data USER llamalink EXPOSE 8000 ENV LLAMALINK_HOST=0.0.0.0 ENV LLAMALINK_PORT=8000 ENTRYPOINT ["./llamalink"]