# Build stage - Frontend FROM node:20-alpine AS frontend-builder WORKDIR /app/frontend COPY frontend/package*.json ./ RUN npm ci COPY frontend/ ./ RUN npm run build # Build stage - Backend FROM golang:1.24-alpine AS backend-builder RUN apk add --no-cache git ca-certificates ENV GOTOOLCHAIN=local WORKDIR /app/backend COPY backend/go.* ./ RUN go mod download COPY backend/ ./ RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o bin/lokideploy . # Final stage - 内置 kubectl + helm,部署开箱即用 FROM alpine:3.19 RUN apk --no-cache add ca-certificates openssh-client curl bash ARG TARGETARCH=amd64 # 安装 kubectl(兼容大多数集群版本,±1 版本原则) RUN curl -fsSL -o /usr/local/bin/kubectl \ "https://dl.k8s.io/release/v1.31.0/bin/linux/${TARGETARCH}/kubectl" \ && chmod +x /usr/local/bin/kubectl # 安装 helm RUN mkdir -p /tmp/helm \ && curl -fsSL "https://get.helm.sh/helm-v3.16.3-linux-${TARGETARCH}.tar.gz" \ | tar -xz -C /tmp/helm \ && mv "/tmp/helm/linux-${TARGETARCH}/helm" /usr/local/bin/helm \ && chmod +x /usr/local/bin/helm \ && rm -rf /tmp/helm WORKDIR /app # Copy frontend build COPY --from=frontend-builder /app/frontend/dist ./dist # Copy backend binary COPY --from=backend-builder /app/backend/bin/lokideploy ./lokideploy RUN chmod +x ./lokideploy # Create data directory RUN mkdir -p /app/data # Environment ENV DATA_DIR=/app/data ENV SERVER_PORT=8080 ENV JWT_SECRET=lokideploy-secret-key-change-in-production EXPOSE 8080 # Serve frontend as static files CMD ["./lokideploy"]