feat: 11notes/go as build image

This commit is contained in:
ElevenNotes
2025-07-14 16:47:18 +02:00
parent 2016f9671f
commit 2a2de68337

View File

@@ -4,7 +4,9 @@
# GLOBAL # GLOBAL
ARG APP_UID=1000 \ ARG APP_UID=1000 \
APP_GID=1000 \ APP_GID=1000 \
BUILD_ROOT="/go/netbird/management /go/netbird/relay /go/netbird/signal" BUILD_SRC=https://github.com/netbirdio/netbird.git \
BUILD_ROOT="/go/netbird/management /go/netbird/relay /go/netbird/signal" \
GO_VERSION=1.24
# :: FOREIGN IMAGES # :: FOREIGN IMAGES
FROM 11notes/nginx:stable AS distroless-nginx FROM 11notes/nginx:stable AS distroless-nginx
@@ -15,77 +17,51 @@
# ║ BUILD ║ # ║ BUILD ║
# ╚═════════════════════════════════════════════════════╝ # ╚═════════════════════════════════════════════════════╝
# :: netbird # :: netbird
FROM golang:1.24-alpine AS build FROM 11notes/go:${GO_VERSION} AS build
COPY --from=util /usr/local/bin /usr/local/bin
ARG APP_VERSION \ ARG APP_VERSION \
BUILD_ROOT \ BUILD_SRC \
BUILD_BIN BUILD_ROOT
ENV CGO_ENABLED=0
RUN set -ex; \ RUN set -ex; \
apk --update --no-cache add \ git clone ${BUILD_SRC} -b v${APP_VERSION}; \
build-base \ sed -i 's/"development"/"v'${APP_VERSION}'"/' /go/netbird/version/version.go;
upx \
git;
RUN set -ex; \ RUN set -ex; \
git clone https://github.com/netbirdio/netbird -b v${APP_VERSION};
RUN set -ex; \
mkdir -p /distroless/usr/local/bin; \
for BUILD in ${BUILD_ROOT}; do \ for BUILD in ${BUILD_ROOT}; do \
cd ${BUILD}; \ cd ${BUILD}; \
BIN="${BUILD}/$(echo ${BUILD} | awk -F '/' '{print $4}')"; \ BUILD_BIN="${BUILD}/$(echo ${BUILD} | awk -F '/' '{print $4}')"; \
go build -ldflags="-extldflags=-static" -o ${BIN} main.go; \ go mod tidy; \
eleven checkStatic ${BIN}; \ eleven go build ${BUILD_BIN} main.go; \
eleven strip ${BIN}; \ eleven distroless ${BUILD_BIN}; \
cp ${BIN} /distroless/usr/local/bin; \
done; \ done; \
mv /distroless/usr/local/bin/management /distroless/usr/local/bin/netbird; mv /distroless/usr/local/bin/management /distroless/usr/local/bin/netbird;
# :: management # :: management
FROM golang:1.24-alpine AS management FROM 11notes/go:${GO_VERSION} AS management
COPY --from=util /usr/local/bin /usr/local/bin
COPY ./build/go/management /go/management COPY ./build/go/management /go/management
ENV CGO_ENABLED=0 ENV CGO_ENABLED=0
ARG BIN=/go/management/management ARG BUILD_BIN=/go/management/management
RUN set -ex; \
apk --update --no-cache add \
build-base \
upx;
RUN set -ex; \ RUN set -ex; \
cd /go/management; \ cd /go/management; \
go build -ldflags="-extldflags=-static" -o ${BIN} main.go; \ eleven go build ${BUILD_BIN} main.go; \
mkdir -p /distroless/usr/local/bin; \ eleven distroless ${BUILD_BIN};
eleven checkStatic ${BIN}; \
eleven strip ${BIN}; \
cp ${BIN} /distroless/usr/local/bin;
# :: dashboard # :: dashboard
FROM golang:1.24-alpine AS dashboard FROM 11notes/go:${GO_VERSION} AS dashboard
COPY --from=util /usr/local/bin /usr/local/bin
COPY ./build/go/dashboard /go/dashboard COPY ./build/go/dashboard /go/dashboard
ENV CGO_ENABLED=0 ENV CGO_ENABLED=0
ARG BIN=/go/dashboard/dashboard ARG BUILD_BIN=/go/dashboard/dashboard
RUN set -ex; \ RUN set -ex; \
apk --update --no-cache add \ apk --update --no-cache add \
build-base \
upx \
git \
nodejs \ nodejs \
npm; npm;
RUN set -ex; \ RUN set -ex; \
cd /go/dashboard; \ cd /go/dashboard; \
go build -ldflags="-extldflags=-static" -o ${BIN} main.go; \ eleven go build ${BUILD_BIN} main.go; \
mkdir -p /distroless/usr/local/bin; \ eleven distroless ${BUILD_BIN};
eleven checkStatic ${BIN}; \
eleven strip ${BIN}; \
cp ${BIN} /distroless/usr/local/bin;
RUN set -ex; \ RUN set -ex; \
git clone https://github.com/netbirdio/dashboard /dashboard; git clone https://github.com/netbirdio/dashboard /dashboard;
@@ -100,7 +76,7 @@
# :: file system # :: file system
FROM alpine AS file-system FROM alpine AS file-system
COPY --from=util /usr/local/bin /usr/local/bin COPY --from=util / /
ARG APP_ROOT ARG APP_ROOT
USER root USER root