# ────────────────────────────────────────── # Stage 1: Build del binario Go # Los assets del frontend (public/) se compilan localmente # antes del push con: npm run production # ────────────────────────────────────────── FROM golang:1.22-alpine AS builder WORKDIR /app # Instalar dependencias del sistema necesarias para CGO (argon2, etc.) RUN apk add --no-cache gcc musl-dev COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED=1 GOOS=linux go build -ldflags="-s -w" -o apiv2 . # ────────────────────────────────────────── # Stage 3: Imagen final mínima # ────────────────────────────────────────── FROM alpine:3.20 WORKDIR /app # Certificados TLS y timezone RUN apk add --no-cache ca-certificates tzdata # Copiar binario compilado COPY --from=builder /app/apiv2 . # Copiar archivos estáticos y plantillas COPY --from=builder /app/public ./public COPY --from=builder /app/resources/views ./resources/views COPY --from=builder /app/assets ./assets # Copiar configuración real (las credenciales se sobreescriben con variables de entorno) COPY config.yml ./config.yml EXPOSE 8080 ENTRYPOINT ["./apiv2", "-config", "config.yml"]