FROM golang:1.22-alpine AS builder RUN apk add --no-cache build-base ARG APP_VERSION=unknown ARG GIT_COMMIT=unknown ARG BUILD_TIME=unknown # Build server WORKDIR /build/server COPY cmd/server/go.mod cmd/server/go.sum ./ RUN go mod download COPY cmd/server/ ./ RUN go build -ldflags "-X main.Version=${APP_VERSION} -X main.Commit=${GIT_COMMIT} -X main.BuildTime=${BUILD_TIME}" -o /corescope-server . # Build ingestor WORKDIR /build/ingestor COPY cmd/ingestor/go.mod cmd/ingestor/go.sum ./ RUN go mod download COPY cmd/ingestor/ ./ RUN go build -o /corescope-ingestor . # Runtime image FROM alpine:3.20 RUN apk add --no-cache mosquitto mosquitto-clients supervisor caddy wget WORKDIR /app # Go binaries COPY --from=builder /corescope-server /corescope-ingestor /app/ # Frontend assets + config COPY public/ ./public/ COPY config.example.json channel-rainbow.json ./ # Bake git commit SHA — manage.sh and CI write .git-commit before build # Default to "unknown" if not provided RUN echo "unknown" > .git-commit # Supervisor + Mosquitto + Caddy config COPY docker/supervisord-go.conf /etc/supervisor/conf.d/supervisord.conf COPY docker/mosquitto.conf /etc/mosquitto/mosquitto.conf COPY docker/Caddyfile /etc/caddy/Caddyfile # Data directory RUN mkdir -p /app/data /var/lib/mosquitto /data/caddy && \ chown -R mosquitto:mosquitto /var/lib/mosquitto # Entrypoint COPY docker/entrypoint-go.sh /entrypoint.sh RUN chmod +x /entrypoint.sh EXPOSE 80 443 1883 VOLUME ["/app/data", "/data/caddy"] ENTRYPOINT ["/entrypoint.sh"]