Ctrl K
ComunidadGuías…

Dockerfile

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Multi-stage Dockerfile for KiloCenter (KC-Core)
# Build context: kilocenter-modules/ root
# Stage 1: Builder
FROM golang:1.26-alpine AS builder

RUN apk add --no-cache git make gcc musl-dev

WORKDIR /build

# Copy go.work first to enable workspace mode
COPY go.work go.work.sum ./

# Copy all modules referenced in go.work (required for workspace)
COPY KC-Core/ ./KC-Core/
COPY KC-DB/ ./KC-DB/
COPY KC-Gateway/ ./KC-Gateway/
COPY KC-Identity/ ./KC-Identity/
COPY KC-MQTT/ ./KC-MQTT/
COPY pkg/ ./pkg/

WORKDIR /build/KC-Core

RUN go mod download

ARG TARGETARCH
RUN CGO_ENABLED=1 GOOS=linux GOARCH=${TARGETARCH} go build \
    -ldflags="-w -s" \
    -o kilocenter ./cmd/kilocenter

RUN CGO_ENABLED=1 GOOS=linux GOARCH=${TARGETARCH} go build \
    -ldflags="-w -s" \
    -o certgen ./cmd/certgen

WORKDIR /build/KC-DB

RUN CGO_ENABLED=1 GOOS=linux GOARCH=${TARGETARCH} go build \
    -ldflags="-w -s" \
    -o rekey ./cmd/rekey

RUN CGO_ENABLED=1 GOOS=linux GOARCH=${TARGETARCH} go build \
    -ldflags="-w -s" \
    -o migrate ./cmd/migrate

WORKDIR /build/KC-Core

# Stage 2: Runtime
FROM alpine:3.23
ARG SOURCE_URL=https://github.com/Kiloiot/kilo-service-center
ARG DOCS_URL=https://docs.kiloiot.io/
LABEL org.opencontainers.image.title="KiloCenter"
LABEL org.opencontainers.image.description="Open-source MIOTY Service Center"
LABEL org.opencontainers.image.url=$SOURCE_URL
LABEL org.opencontainers.image.source=$SOURCE_URL
LABEL org.opencontainers.image.documentation=$DOCS_URL
LABEL org.opencontainers.image.licenses="AGPL-3.0-or-later"
LABEL org.opencontainers.image.vendor="Tim Kravchunovsky"
LABEL org.opencontainers.image.authors="Tim Kravchunovsky"

RUN apk add --no-cache ca-certificates tzdata

RUN addgroup -g 1000 kilocenter && \
    adduser -D -u 1000 -G kilocenter kilocenter

RUN mkdir -p /app/certificates /app/migrations /app/logs && \
    chown -R kilocenter:kilocenter /app

COPY --from=builder /build/KC-Core/kilocenter /usr/local/bin/kilocenter
COPY --from=builder /build/KC-Core/certgen /usr/local/bin/certgen
COPY --from=builder /build/KC-DB/rekey /usr/local/bin/rekey
COPY --from=builder /build/KC-DB/migrate /usr/local/bin/migrate
COPY --from=builder /build/KC-DB/migrations /app/migrations

USER kilocenter

WORKDIR /app

# Expose ports (internal gRPC: 50051, BSSCI: 5000, SCACI: 5001, Health: 8086)
EXPOSE 50051 5000 5001 8086

HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
    CMD wget -q --spider http://localhost:8086/health || exit 1

STOPSIGNAL SIGTERM

ENTRYPOINT ["kilocenter"]
CMD ["-config", "/app/config/config.yaml"]