-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy patharch.dockerfile
More file actions
135 lines (112 loc) · 4.62 KB
/
arch.dockerfile
File metadata and controls
135 lines (112 loc) · 4.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
# ╔═════════════════════════════════════════════════════╗
# ║ SETUP ║
# ╚═════════════════════════════════════════════════════╝
# GLOBAL
ARG APP_UID= \
APP_GID= \
BUILD_SRC=netbirdio/netbird.git \
BUILD_ROOT="/go/netbird/management /go/netbird/relay /go/netbird/signal" \
APP_GO_VERSION=
# :: FOREIGN IMAGES
FROM 11notes/nginx:stable AS distroless-nginx
FROM 11notes/distroless:localhealth AS distroless-localhealth
FROM 11notes/util AS util
# ╔═════════════════════════════════════════════════════╗
# ║ BUILD ║
# ╚═════════════════════════════════════════════════════╝
# :: NETBIRD
FROM 11notes/go:${APP_GO_VERSION} AS build
ARG APP_VERSION \
BUILD_SRC \
BUILD_ROOT
RUN set -ex; \
eleven git clone ${BUILD_SRC} v${APP_VERSION}; \
sed -i 's/"development"/"v'${APP_VERSION}'"/' /go/netbird/version/version.go; \
sed -i 's|"gorm.io/driver/sqlite"|"github.com/glebarez/sqlite"|' /go/netbird/management/server/geolocation/database.go; \
sed -i 's|"gorm.io/driver/sqlite"|"github.com/glebarez/sqlite"|' /go/netbird/management/server/geolocation/store.go;
RUN set -ex; \
eleven git clone dexidp/dex.git v2.44.0;
COPY ./build/go/dex /go/dex
RUN set -ex; \
cd /go/netbird; \
go mod edit -replace github.com/dexidp/dex=/go/dex;
RUN set -ex; \
for BUILD in ${BUILD_ROOT}; do \
cd ${BUILD}; \
BUILD_BIN="${BUILD}/$(echo ${BUILD} | awk -F '/' '{print $4}')"; \
eleven go build ${BUILD_BIN} main.go; \
eleven distroless ${BUILD_BIN}; \
done; \
mv /distroless/usr/local/bin/management /distroless/usr/local/bin/netbird;
# :: CUSTOM MANAGEMENT
FROM 11notes/go:${APP_GO_VERSION} AS management
COPY ./build/go/management /go/management
ARG BUILD_BIN=/go/management/management
RUN set -ex; \
cd /go/management; \
eleven go build ${BUILD_BIN} main.go; \
eleven distroless ${BUILD_BIN};
# :: DASHBOARD
FROM 11notes/go:${APP_GO_VERSION} AS dashboard
COPY ./build/go/dashboard /go/dashboard
ARG BUILD_BIN=/go/dashboard/dashboard
RUN set -ex; \
apk --update --no-cache add \
nodejs \
npm;
RUN set -ex; \
cd /go/dashboard; \
eleven go build ${BUILD_BIN} main.go; \
eleven distroless ${BUILD_BIN};
RUN set -ex; \
git clone https://github.com/netbirdio/dashboard /dashboard;
RUN set -ex; \
cd /dashboard; \
npm i --save; \
echo '{}' > .local-config.json; \
npm run build; \
mkdir -p /distroless/nginx/var; \
cp -R ./out/* /distroless/nginx/var;
# :: FILE SYSTEM
FROM alpine AS file-system
COPY --from=util / /
ARG APP_ROOT
USER root
RUN set -ex; \
eleven mkdir /distroless${APP_ROOT}/{etc,var}; \
mkdir -p /distroless/var/lib; \
ln -sf ${APP_ROOT}/var /distroless/var/lib/netbird;
# ╔═════════════════════════════════════════════════════╗
# ║ IMAGE ║
# ╚═════════════════════════════════════════════════════╝
# :: HEADER
FROM scratch
# :: default arguments
ARG TARGETPLATFORM \
TARGETOS \
TARGETARCH \
TARGETVARIANT \
APP_IMAGE \
APP_NAME \
APP_VERSION \
APP_ROOT \
APP_UID \
APP_GID \
APP_NO_CACHE
# :: default environment
ENV APP_IMAGE=${APP_IMAGE} \
APP_NAME=${APP_NAME} \
APP_VERSION=${APP_VERSION} \
APP_ROOT=${APP_ROOT}
# :: multi-stage
COPY --from=build /distroless/ /
COPY --from=dashboard --chown=${APP_UID}:${APP_GID} /distroless/ /
COPY --from=management --chown=${APP_UID}:${APP_GID} /distroless/ /
COPY --from=distroless-nginx --chown=${APP_UID}:${APP_GID} / /
COPY --from=file-system --chown=${APP_UID}:${APP_GID} /distroless/ /
COPY --from=distroless-localhealth / /
COPY --chown=${APP_UID}:${APP_GID} ./rootfs/ /
# :: PERSISTENT DATA
VOLUME ["${APP_ROOT}/etc", "${APP_ROOT}/var"]
# :: EXECUTE
USER ${APP_UID}:${APP_GID}