-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathDockerfile
More file actions
130 lines (113 loc) · 4.29 KB
/
Dockerfile
File metadata and controls
130 lines (113 loc) · 4.29 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
# Dockerfile to build Valhalla in stage 1,
# then build our image by pulling out
# the compiled Valhalla binaries from stage 1.
# #####################################
# ############ STAGE 1 ################
# #####################################
ARG VALHALLA_VERSION=3.6.3
ARG VALHALLA_COMMIT=e2f017b16080f49203de245a211b09efab09cf72
ARG PRIME_SERVER_COMMIT=77e61628d78e97ce59eea6e1eeb254d1e68edcb6
FROM ubuntu:24.04
ARG VALHALLA_VERSION
ARG VALHALLA_COMMIT
ARG PRIME_SERVER_COMMIT
# Install base packages
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
autoconf \
automake \
build-essential \
curl \
g++ \
gcc \
git \
jq \
lcov \
libbz2-dev \
libboost-all-dev \
libcurl4-openssl-dev \
libczmq-dev \
libexpat1-dev \
libgdal-dev \
libgeos++-dev \
libgeos-dev \
libgeotiff-dev \
libidn11-dev \
libluajit-5.1-dev \
liblz4-dev \
libspatialite-dev \
libsqlite3-dev \
libsqlite3-mod-spatialite \
libprotobuf-dev \
libssl-dev \
libtool \
libzmq3-dev \
make \
osmctools \
osmosis \
parallel \
pkgconf \
protobuf-compiler \
python3 \
software-properties-common \
spatialite-bin \
vim-common \
wget \
zlib1g-dev
# install a more recent cmake than available through apt-get
RUN curl -sSL https://github.com/Kitware/CMake/releases/download/v3.21.1/cmake-3.21.1-linux-x86_64.tar.gz | tar -xzC /opt
ENV PATH="/opt/cmake-3.21.1-linux-x86_64/bin/:${PATH}"
RUN mkdir -p /src && cd /src
# prime_server
RUN git clone https://github.com/kevinkreiser/prime_server.git && (cd prime_server && git checkout ${PRIME_SERVER_COMMIT} && git submodule update --init --recursive && mkdir -p build && cd build && cmake .. && make -j2 install)
# valhalla
# NOTE: -DENABLE_BENCHMARKS=OFF is because of https://github.com/valhalla/valhalla/issues/3200
# NOTE: -ENABLE_SINGLE_FILES_WERROR=OFF because of https://github.com/valhalla/valhalla/issues/3157
# NOTE: -DENABLE_TESTS=OFF to skip test builds (not needed in production image)
RUN git clone https://github.com/valhalla/valhalla.git && (cd valhalla && git checkout ${VALHALLA_COMMIT} -b build && git submodule update --init --recursive && mkdir -p build && cd build && cmake .. -DCMAKE_C_COMPILER=gcc -DPKG_CONFIG_PATH=/usr/local/lib/pkgconfig -DCMAKE_BUILD_TYPE=Release -DENABLE_NODE_BINDINGS=OFF -DENABLE_PYTHON_BINDINGS=OFF -DENABLE_BENCHMARKS=OFF -DENABLE_TESTS=OFF -DENABLE_SINGLE_FILES_WERROR=OFF && make -j2 install) && rm -rf /src
# #####################################
# ############ STAGE 2 ################
# #####################################
FROM ubuntu:24.04
ARG VALHALLA_VERSION
ARG VALHALLA_CONCURRENCY=1
# Copy ARG to ENV
ENV VALHALLA_VERSION=${VALHALLA_VERSION} \
VALHALLA_CONCURRENCY=${VALHALLA_CONCURRENCY}
# Utilities needed
RUN apt-get update && apt-get install --no-install-recommends -y apt-transport-https curl libcurl4 ca-certificates gnupg && rm -rf /var/lib/apt/lists/*
# Install apt packages packages
RUN apt-get update && apt-get install --no-install-recommends -y \
libluajit-5.1-2 \
libprotobuf-dev \
libzmq5 \
libczmq4 \
libsqlite3-mod-spatialite \
libgeotiff5 \
libgdal34t64 \
python3 \
spatialite-bin \
jo \
jq \
wget \
unzip \
&& rm -rf /var/lib/apt/lists/*
# Copy previous installs
COPY --from=0 /usr/local /usr/local
# Fix things
ENV LD_LIBRARY_PATH="/usr/local/lib:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/lib32:/usr/lib32"
RUN ln -s /usr/lib/x86_64-linux-gnu/mod_spatialite.so.7.1.0 /usr/lib/x86_64-linux-gnu/mod_spatialite
# Setup
WORKDIR /build
ENV WORKDIR=/build \
DATADIR=/data \
VALHALLA_CONFIG=/build/valhalla.json
RUN mkdir -p ${WORKDIR} ${DATADIR}
RUN valhalla_build_config > ${VALHALLA_CONFIG}
ADD alias_tz.csv ${WORKDIR}
# Create entrypoint script that uses env vars with exec for proper signal handling
# The 'exec' replaces the shell process, making valhalla_service PID 1 for proper signal handling
RUN echo '#!/bin/sh\nexec valhalla_service "${VALHALLA_CONFIG:-/build/valhalla.json}" "${VALHALLA_CONCURRENCY:-1}"' > /usr/local/bin/valhalla-entrypoint.sh && \
chmod +x /usr/local/bin/valhalla-entrypoint.sh
# Default command - uses entrypoint which reads env vars
ENTRYPOINT ["/usr/local/bin/valhalla-entrypoint.sh"]