-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathDockerfile
More file actions
60 lines (53 loc) · 2.5 KB
/
Dockerfile
File metadata and controls
60 lines (53 loc) · 2.5 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
FROM --platform=$BUILDPLATFORM node:24-alpine AS frontend
WORKDIR /app
COPY ui/package.json ui/package-lock.json ./
RUN npm ci
COPY ui/ ./
RUN npx vite build --outDir /frontend-dist
FROM golang:1.26-alpine AS builder
RUN apk add --no-cache alpine-sdk
WORKDIR /go/pkg/ocap
COPY go.mod go.sum ./
RUN go mod download
COPY . .
COPY --from=frontend /frontend-dist ./internal/frontend/dist
ARG build_version
ARG build_commit
RUN go build -ldflags "-X github.com/OCAP2/web/internal/server.BuildVersion=$build_version -X github.com/OCAP2/web/internal/server.BuildDate=`date -u +'%Y-%m-%dT%H:%M:%SZ'` -X github.com/OCAP2/web/internal/server.BuildCommit=$build_commit" -o app ./cmd/ocap-webserver
ARG PMTILES_VERSION=1.30.0
RUN go install "github.com/protomaps/go-pmtiles@v${PMTILES_VERSION}"
FROM alpine:3.23
ARG VARIANT=slim
WORKDIR /usr/local/ocap
RUN adduser -D -h /home/container container && \
mkdir -p /usr/local/ocap/data /var/lib/ocap/db /var/lib/ocap/maps /var/lib/ocap/data
# Full variant: install maptool dependencies (GDAL, tippecanoe)
ARG TIPPECANOE_VERSION=2.79.0
RUN if [ "$VARIANT" = "full" ]; then \
apk add --no-cache gdal-tools gdal-driver-jpeg gdal-driver-png py3-gdal sqlite-libs zlib && \
apk add --no-cache --virtual .build-deps build-base bash git sqlite-dev zlib-dev && \
wget -qO /tmp/tippecanoe.tar.gz "https://github.com/felt/tippecanoe/archive/refs/tags/${TIPPECANOE_VERSION}.tar.gz" && \
tar -xzf /tmp/tippecanoe.tar.gz -C /tmp && \
cd /tmp/tippecanoe-${TIPPECANOE_VERSION} && make -j$(nproc) && make install && \
rm -rf /tmp/tippecanoe* && \
apk del .build-deps; \
fi
RUN --mount=from=builder,source=/go/bin/go-pmtiles,target=/tmp/pmtiles \
if [ "$VARIANT" = "full" ]; then cp /tmp/pmtiles /usr/local/bin/pmtiles; fi
ENV OCAP_AMMO=/usr/local/ocap/ammo \
OCAP_DATA=/var/lib/ocap/data \
OCAP_DB=/var/lib/ocap/db/data.db \
OCAP_FONTS=/usr/local/ocap/fonts \
OCAP_LISTEN=0.0.0.0:5000 \
OCAP_MAPS=/var/lib/ocap/maps \
OCAP_MARKERS=/usr/local/ocap/markers
EXPOSE 5000/tcp
VOLUME /var/lib/ocap/db /var/lib/ocap/maps /var/lib/ocap/data
COPY assets/ammo /usr/local/ocap/ammo
COPY assets/fonts /usr/local/ocap/fonts
COPY assets/markers /usr/local/ocap/markers
COPY --from=builder /go/pkg/ocap/app /usr/local/ocap/app
COPY --chmod=755 docker/entrypoint.sh /entrypoint.sh
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
CMD wget -q -O /dev/null http://localhost:${OCAP_LISTEN##*:}/api/healthcheck || exit 1
ENTRYPOINT ["/entrypoint.sh"]