-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathDockerfile
More file actions
120 lines (88 loc) · 3.46 KB
/
Copy pathDockerfile
File metadata and controls
120 lines (88 loc) · 3.46 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
FROM golang:1-alpine AS gogenerator
WORKDIR /src
# First download dependancies
COPY go.mod go.sum ./
# renovate: datasource=go depName=github.com/swaggo/swag
ARG SWAG_VERSION=v1.16.6
RUN --mount=type=cache,target=/go/pkg/mod \
go mod download && \
go install github.com/swaggo/swag/cmd/swag@${SWAG_VERSION}
# Generate go code
COPY checkers ./checkers
COPY cmd ./cmd
COPY internal ./internal
COPY model ./model
COPY pkg ./pkg
COPY providers ./providers
COPY services ./services
COPY tools ./tools
COPY generate.go ./
RUN --mount=type=cache,target=/go/pkg/mod \
--mount=type=cache,target=/root/.cache/go-build \
mkdir -p web/src/lib/services && \
go generate ./...
FROM node:24-alpine AS nodebuild
WORKDIR /src
COPY --from=gogenerator /src/docs/ docs/
COPY web/ web/
COPY --from=gogenerator /src/web/src/lib/dns_rr.ts web/src/lib/dns_rr.ts
COPY --from=gogenerator /src/web/src/lib/services_specs.ts web/src/lib/services_specs.ts
COPY --from=gogenerator /src/web/src/lib/services/caa-issuers.json web/src/lib/services/caa-issuers.json
RUN --mount=type=cache,target=/usr/local/share/.cache/yarn \
yarn --cwd web --network-timeout 100000 install && \
yarn --cwd web --offline generate:api && \
yarn --cwd web --offline build
COPY --from=gogenerator /src/docs-admin/ docs-admin/
COPY web-admin/ web-admin/
RUN --mount=type=cache,target=/usr/local/share/.cache/yarn \
yarn --cwd web-admin --network-timeout 100000 install && \
yarn --cwd web-admin --offline generate:api && \
yarn --cwd web-admin --offline build
FROM golang:1-alpine AS gobuild
RUN apk add --no-cache git
WORKDIR /src
COPY --from=nodebuild /src/web/build/ web/build/
COPY --from=nodebuild /src/web-admin/build/ web-admin/build/
COPY web/*.go web/
COPY web-admin/*.go web-admin/
COPY --from=gogenerator /src/providers/icons.go providers/icons.go
COPY --from=gogenerator /src/services/icons.go services/icons.go
COPY --from=gogenerator /src/web/src/lib/dns_rr.ts web/src/lib/dns_rr.ts
COPY --from=gogenerator /src/internal/usecase/service_specs_dns_types.go internal/usecase/service_specs_dns_types.go
COPY --from=gogenerator /src/docs/ docs/
COPY --from=gogenerator /src/docs-admin/ docs-admin/
COPY checkers ./checkers
COPY cmd ./cmd
COPY internal ./internal
COPY model ./model
COPY pkg ./pkg
COPY providers ./providers
COPY services ./services
COPY tools ./tools
COPY generate.go go.mod go.sum ./
ARG VERSION=dev
RUN --mount=type=cache,target=/go/pkg/mod \
go build -tags netgo,swagger,web,nomsgpack -trimpath -ldflags "-s -w -X main.Version=${VERSION}" ./cmd/happyDomain/
FROM alpine:3.24
ARG VERSION=dev
LABEL org.opencontainers.image.title="happyDomain" \
org.opencontainers.image.description="Making DNS simple for everyone" \
org.opencontainers.image.url="https://happydomain.org" \
org.opencontainers.image.source="https://git.happydns.org/happydomain" \
org.opencontainers.image.version="${VERSION}" \
org.opencontainers.image.licenses="AGPL-3.0-or-later"
EXPOSE 8081
ENTRYPOINT ["/usr/sbin/happyDomain"]
HEALTHCHECK --interval=30s --timeout=5s --retries=3 CMD curl --fail http://localhost:8081/api/version
ENV HAPPYDOMAIN_LEVELDB_PATH=/data/happydomain.db
RUN apk add --no-cache \
curl \
jq \
&& \
adduser --system --no-create-home --uid 15353 happydomain && \
mkdir /data && chown happydomain /data
USER happydomain
WORKDIR /data
VOLUME /data
COPY --from=gobuild /src/happyDomain /usr/sbin/happyDomain
COPY hadmin.sh /usr/bin/hadmin