Added Docker-based building and testing method (#363)

* Build with Docker
* Use CUSTOM_DEFINES for Mapnik building
* Only run `install-package-and-test.yml` if etc, utils or YAML file have changed
This commit is contained in:
Hummeltech
2023-12-30 20:57:44 -07:00
committed by GitHub
parent 4e8334ed54
commit 53b77bc1db
25 changed files with 1372 additions and 18 deletions

1
docker/.env Normal file
View File

@ -0,0 +1 @@
COMPOSE_PROJECT_NAME=mod_tile

41
docker/README.md Normal file
View File

@ -0,0 +1,41 @@
# Docker-based building & testing
For your convenience, we have provided a Docker-based building and testing method to help get started with development & testing.
### The following distributions are currently supported:
- centos-7 _(CentOS 7)_ [[Dockerfile](/docker/centos/7/Dockerfile)]
- centos-stream-8 _(CentOS Stream 8)_ [[Dockerfile](/docker/centos/stream/Dockerfile)]
- centos-stream-9 _(CentOS Stream 9)_ [[Dockerfile](/docker/centos/stream/Dockerfile)]
- debian-10 _(Debian 10)_ [[Dockerfile](/docker/debian/Dockerfile)]
- debian-11 _(Debian 11)_ [[Dockerfile](/docker/debian/Dockerfile)]
- debian-12 _(Debian 12)_ [[Dockerfile](/docker/debian/Dockerfile)]
- debian-testing _(Debian Testing)_ [[Dockerfile](/docker/debian/Dockerfile)]
- fedora-34 _(Fedora 34)_ [[Dockerfile](/docker/fedora/Dockerfile)]
- fedora-35 _(Fedora 35)_ [[Dockerfile](/docker/fedora/Dockerfile)]
- fedora-36 _(Fedora 36)_ [[Dockerfile](/docker/fedora/Dockerfile)]
- fedora-37 _(Fedora 37)_ [[Dockerfile](/docker/fedora/Dockerfile)]
- fedora-38 _(Fedora 38)_ [[Dockerfile](/docker/fedora/Dockerfile)]
- fedora-39 _(Fedora 39)_ [[Dockerfile](/docker/fedora/Dockerfile)]
- fedora-rawhide _(Fedora Rawhide)_ [[Dockerfile](/docker/fedora/Dockerfile)]
- opensuse-leap-15 _(openSUSE Leap 15)_ [[Dockerfile](/docker/opensuse/Dockerfile)]
- opensuse-tumbleweed _(openSUSE Tumbleweed)_ [[Dockerfile](/docker/opensuse/Dockerfile)]
- ubuntu-20.04 _(Ubuntu 20.04)_ [[Dockerfile](/docker/ubuntu/Dockerfile)]
- ubuntu-22.04 _(Ubuntu 22.04)_ [[Dockerfile](/docker/ubuntu/Dockerfile)]
- ubuntu-devel _(Ubuntu Devel)_ [[Dockerfile](/docker/ubuntu/Dockerfile)]
### Requirements:
- [Docker](https://docs.docker.com/get-docker/)
- [Docker Compose](https://github.com/docker/compose)
### Usage:
```shell
$ # Use any "{distribution}" value from the list above
$ # I.E. docker-compose up --build ubuntu-devel
$ cd docker
$ docker-compose up --build {distribution}
```
Then you can visit: `http://localhost:8081/renderd-example-map`

173
docker/centos/7/Dockerfile Normal file
View File

@ -0,0 +1,173 @@
# Arguments
ARG mapnik_version=3.1.0
# Mapnik Builder
FROM centos:centos7 as mapnik-builder
## Arguments
ARG mapnik_version
## Install mapnik-builder dependencies
RUN --mount=id=centos:centos7-/var/cache/yum,target=/var/cache/yum,type=cache,sharing=locked \
ulimit -n 40000; \
echo "install_weak_deps=0" >> /etc/yum.conf && \
sed --in-place 's/keepcache=0/keepcache=1/g' /etc/yum.conf && \
yum --assumeyes install epel-release centos-release-scl && \
yum --assumeyes upgrade && \
yum --assumeyes install \
boost169-devel \
bzip2 \
cairo-devel \
freetype-devel \
devtoolset-9-gcc \
devtoolset-9-gcc-c++ \
gdal-devel \
harfbuzz-devel \
libicu-devel \
libjpeg-devel \
libpng-devel \
libtiff-devel \
libwebp-devel \
libxml2-devel \
make \
patch \
postgresql-devel \
proj-devel \
python3 \
sqlite-devel \
tar \
zlib-devel
## Download, Build & Install `Mapnik`
WORKDIR /tmp/mapnik_src
RUN --mount=id=centos:centos7-mapnik:${mapnik_version},target=/tmp/mapnik_src,type=cache \
export DESTDIR="/tmp/mapnik"; \
export GDAL_DATA="$(gdal-config --datadir)"; \
export JOBS="$(nproc)"; \
export PROJ_LIB="/usr/share/proj"; \
export PYTHON="python3"; \
mkdir --parents ${GDAL_DATA} ${PROJ_LIB}; \
if [ ! -f SConstruct ]; then \
curl --silent --location https://github.com/mapnik/mapnik/releases/download/v${mapnik_version}/mapnik-v${mapnik_version}.tar.bz2 \
| tar --extract --bzip2 --strip-components=1 --file=-; \
sed -i 's#BOOST_APPEND = match.groups()\[0\]#BOOST_APPEND = ""#g' SConstruct; \
fi; \
source /opt/rh/devtoolset-9/enable; \
export CUSTOM_DEFINES="-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H=1"; \
export CUSTOM_LDFLAGS="-L/usr/lib64/boost169"; \
bash configure \
CPP_TESTS=False \
CUSTOM_CFLAGS="${CUSTOM_CFLAGS:-}" \
CUSTOM_CXXFLAGS="${CUSTOM_CXXFLAGS:-}" \
CUSTOM_DEFINES="${CUSTOM_DEFINES:-}" \
CUSTOM_LDFLAGS="${CUSTOM_LDFLAGS:-}" \
DEMO=False \
DESTDIR="${DESTDIR}" \
FAST=True \
INPUT_PLUGINS=all \
LIBDIR_SCHEMA=lib64 \
OPTIMIZATION=2 \
PREFIX=/usr \
SVG2PNG=True \
XMLPARSER=libxml2 && \
make PYTHON="${PYTHON}" && \
make install PYTHON="${PYTHON}"
# Builder
FROM centos:centos7 as builder
## Install builder dependencies
RUN --mount=id=centos:centos7-/var/cache/yum,target=/var/cache/yum,type=cache,sharing=locked \
ulimit -n 40000; \
echo "install_weak_deps=0" >> /etc/yum.conf && \
sed --in-place 's/keepcache=0/keepcache=1/g' /etc/yum.conf && \
yum --assumeyes install epel-release && \
yum --assumeyes upgrade && \
yum --assumeyes install \
boost169-devel \
cairo-devel \
cmake3 \
gcc \
gcc-c++ \
gdal \
glib2-devel \
harfbuzz-devel \
httpd-devel \
iniparser-devel \
libcurl-devel \
libicu-devel \
libjpeg \
libmemcached-devel \
librados2-devel \
libtiff \
libwebp \
make \
proj
## Copy files from builder(s)
### Mapnik
COPY --from=mapnik-builder /tmp/mapnik /
## Build, Test & Install `mod_tile`
COPY . /tmp/mod_tile_src
WORKDIR /tmp/mod_tile_build
RUN export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) && \
export CFLAGS="-I/usr/include/boost169" && \
export CXXFLAGS="-I/usr/include/boost169" && \
cmake3 -B . -S /tmp/mod_tile_src \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DENABLE_TESTS:BOOL=ON && \
cmake3 --build .
RUN export DESTDIR=/tmp/mod_tile && \
ctest3 --output-on-failure && \
(cmake3 --install . --prefix /usr --strip || make DESTDIR=${DESTDIR} install/strip) && \
mv /tmp/mod_tile/var/run /tmp/mod_tile/run
# Runner
FROM centos:centos7 as runner
## Install runner dependencies
RUN --mount=id=centos:centos7-/var/cache/yum,target=/var/cache/yum,type=cache,sharing=locked \
ulimit -n 40000; \
echo "install_weak_deps=0" >> /etc/yum.conf && \
sed --in-place 's/keepcache=0/keepcache=1/g' /etc/yum.conf && \
yum --assumeyes install epel-release && \
yum --assumeyes upgrade && \
yum --assumeyes install \
boost169-filesystem \
boost169-program-options \
boost169-regex \
cairo \
gdal \
harfbuzz \
httpd \
iniparser \
libicu \
libmemcached \
librados2 \
libtiff \
libwebp \
proj
## Copy files from builder(s)
### Mapnik
COPY --from=mapnik-builder /tmp/mapnik /
### mod_tile
COPY --from=builder /tmp/mod_tile /
COPY --chown=apache:apache --from=builder \
/tmp/mod_tile_src/utils/example-map \
/usr/share/renderd/example-map
COPY --from=builder \
/tmp/mod_tile_src/etc/apache2/renderd-example-map.conf \
/etc/httpd/conf.d/renderd-example-map.conf
## Add configuration
RUN printf '\n[example-map]\nURI=/tiles/renderd-example\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-jpg]\nTYPE=jpg image/jpeg jpeg\nURI=/tiles/renderd-example-jpg\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-png256]\nTYPE=png image/png png256\nURI=/tiles/renderd-example-png256\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-png32]\nTYPE=png image/png png32\nURI=/tiles/renderd-example-png32\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-webp]\nTYPE=webp image/webp webp\nURI=/tiles/renderd-example-webp\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
## Start services
CMD httpd -e debug -k start; \
G_MESSAGES_DEBUG=${G_MESSAGES_DEBUG:-info} renderd --foreground

View File

@ -0,0 +1,194 @@
# Arguments
ARG centos_stream_version
ARG extra_repository
ARG mapnik_version=3.1.0
# Mapnik Builder
FROM quay.io/centos/centos:stream${centos_stream_version} as mapnik-builder
## Arguments
ARG centos_stream_version
ARG extra_repository
ARG mapnik_version
## Install mapnik-builder dependencies
RUN --mount=id=centos:stream${centos_stream_version}-/var/cache/dnf,target=/var/cache/dnf,type=cache,sharing=locked \
echo "install_weak_deps=False" >> /etc/dnf/dnf.conf && \
echo "keepcache=True" >> /etc/dnf/dnf.conf && \
dnf --assumeyes install "dnf-command(config-manager)" && \
dnf config-manager --save \
--setopt=${extra_repository}.enabled=1 && \
dnf --assumeyes install epel-release && \
dnf --assumeyes upgrade && \
dnf --assumeyes install \
boost-devel \
bzip2 \
cairo-devel \
freetype-devel \
gcc \
gcc-c++ \
gdal-devel \
harfbuzz-devel \
libicu-devel \
libjpeg-devel \
libpng-devel \
libtiff-devel \
libwebp-devel \
libxml2-devel \
make \
patch \
postgresql-devel \
proj-devel \
python3 \
sqlite-devel \
tar \
zlib-devel
## Download, Build & Install `Mapnik`
WORKDIR /tmp/mapnik_src
RUN --mount=id=centos:stream${centos_stream_version}-mapnik:${mapnik_version},target=/tmp/mapnik_src,type=cache \
export DESTDIR="/tmp/mapnik"; \
export GDAL_DATA="$(gdal-config --datadir)"; \
export JOBS="$(nproc)"; \
export PROJ_LIB="/usr/share/proj"; \
export PYTHON="python3"; \
mkdir --parents ${GDAL_DATA} ${PROJ_LIB}; \
if [ ! -f SConstruct ]; then \
curl --silent --location https://github.com/mapnik/mapnik/releases/download/v${mapnik_version}/mapnik-v${mapnik_version}.tar.bz2 \
| tar --extract --bzip2 --strip-components=1 --file=-; \
if [ "${centos_stream_version}" = "9" ]; then \
curl --silent --location https://github.com/mapnik/mapnik/commit/8944e81367d2b3b91a41e24116e1813c01491e5d.patch \
| patch -Np1; \
curl --silent --location https://github.com/mapnik/mapnik/commit/83779b7b6bdd229740b1b5e12a4a8fe27114cb7d.patch \
| patch -F3 -Np1; \
fi \
fi; \
if [ "${centos_stream_version}" = "8" ]; then \
export CUSTOM_DEFINES="-DACCEPT_USE_OF_DEPRECATED_PROJ_API_H=1"; \
fi; \
bash configure \
CPP_TESTS=False \
CUSTOM_CFLAGS="${CUSTOM_CFLAGS:-}" \
CUSTOM_CXXFLAGS="${CUSTOM_CXXFLAGS:-}" \
CUSTOM_DEFINES="${CUSTOM_DEFINES:-}" \
CUSTOM_LDFLAGS="${CUSTOM_LDFLAGS:-}" \
DEMO=False \
DESTDIR="${DESTDIR}" \
FAST=True \
INPUT_PLUGINS=all \
LIBDIR_SCHEMA=lib64 \
OPTIMIZATION=2 \
PREFIX=/usr \
SVG2PNG=True \
XMLPARSER=libxml2 && \
make PYTHON="${PYTHON}" && \
make install PYTHON="${PYTHON}"
# Builder
FROM quay.io/centos/centos:stream${centos_stream_version} as builder
## Arguments
ARG centos_stream_version
ARG extra_repository
## Install builder dependencies
RUN --mount=id=centos:stream${centos_stream_version}-/var/cache/dnf,target=/var/cache/dnf,type=cache,sharing=locked \
echo "install_weak_deps=False" >> /etc/dnf/dnf.conf && \
echo "keepcache=True" >> /etc/dnf/dnf.conf && \
dnf --assumeyes install "dnf-command(config-manager)" && \
dnf config-manager --save \
--setopt=${extra_repository}.enabled=1 && \
dnf --assumeyes install epel-release && \
dnf --assumeyes upgrade && \
dnf --assumeyes install \
boost-devel \
cairo-devel \
cmake3 \
gcc \
gcc-c++ \
gdal \
glib2-devel \
harfbuzz-devel \
httpd-devel \
iniparser-devel \
libcurl-devel \
libicu-devel \
libjpeg \
libmemcached-devel \
librados2-devel \
libtiff \
libwebp \
make \
proj
## Copy files from builder(s)
### Mapnik
COPY --from=mapnik-builder /tmp/mapnik /
## Build, Test & Install `mod_tile`
COPY . /tmp/mod_tile_src
WORKDIR /tmp/mod_tile_build
RUN export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) && \
cmake -B . -S /tmp/mod_tile_src \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DENABLE_TESTS:BOOL=ON && \
cmake --build .
RUN export DESTDIR=/tmp/mod_tile && \
ctest --output-on-failure && \
(cmake --install . --prefix /usr --strip || make DESTDIR=${DESTDIR} install/strip) && \
mv /tmp/mod_tile/var/run /tmp/mod_tile/run
# Runner
FROM quay.io/centos/centos:stream${centos_stream_version} as runner
## Arguments
ARG centos_stream_version
ARG extra_repository
## Install runner dependencies
RUN --mount=id=centos:stream${centos_stream_version}-/var/cache/dnf,target=/var/cache/dnf,type=cache,sharing=locked \
echo "install_weak_deps=False" >> /etc/dnf/dnf.conf && \
echo "keepcache=True" >> /etc/dnf/dnf.conf && \
dnf --assumeyes install "dnf-command(config-manager)" && \
dnf config-manager --save \
--setopt=${extra_repository}.enabled=1 && \
dnf --assumeyes install epel-release && \
dnf --assumeyes upgrade && \
dnf --assumeyes install \
boost-filesystem \
boost-program-options \
boost-regex \
cairo \
gdal \
harfbuzz \
httpd \
iniparser \
libicu \
libmemcached \
librados2 \
libtiff \
libwebp \
proj
## Copy files from builder(s)
### Mapnik
COPY --from=mapnik-builder /tmp/mapnik /
### mod_tile
COPY --from=builder /tmp/mod_tile /
COPY --chown=apache:apache --from=builder \
/tmp/mod_tile_src/utils/example-map \
/usr/share/renderd/example-map
COPY --from=builder \
/tmp/mod_tile_src/etc/apache2/renderd-example-map.conf \
/etc/httpd/conf.d/renderd-example-map.conf
## Add configuration
RUN printf '\n[example-map]\nURI=/tiles/renderd-example\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-jpg]\nTYPE=jpg image/jpeg jpeg\nURI=/tiles/renderd-example-jpg\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-png256]\nTYPE=png image/png png256\nURI=/tiles/renderd-example-png256\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-png32]\nTYPE=png image/png png32\nURI=/tiles/renderd-example-png32\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-webp]\nTYPE=webp image/webp webp\nURI=/tiles/renderd-example-webp\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
## Start services
CMD httpd -e debug -k start; \
G_MESSAGES_DEBUG=${G_MESSAGES_DEBUG:-info} renderd --foreground

View File

@ -0,0 +1,178 @@
# Arguments
ARG centos_stream_version=9
ARG extra_repository=crb
# Mapnik Builder
FROM quay.io/centos/centos:stream${centos_stream_version} as mapnik-builder
## Arguments
ARG centos_stream_version
ARG extra_repository
## Install mapnik-builder dependencies
RUN --mount=id=centos:stream${centos_stream_version}-/var/cache/dnf,target=/var/cache/dnf,type=cache,sharing=locked \
echo "install_weak_deps=False" >> /etc/dnf/dnf.conf && \
echo "keepcache=True" >> /etc/dnf/dnf.conf && \
dnf --assumeyes install "dnf-command(config-manager)" && \
dnf config-manager --save \
--setopt=${extra_repository}.enabled=1 && \
dnf --assumeyes install epel-release && \
dnf --assumeyes upgrade && \
dnf --assumeyes install \
boost1.78-devel \
bzip2 \
cairo-devel \
cmake3 \
freetype-devel \
gcc \
gcc-c++ \
gdal-devel \
git \
harfbuzz-devel \
libicu-devel \
libjpeg-devel \
libpng-devel \
libtiff-devel \
libwebp-devel \
libxml2-devel \
make \
patch \
postgresql-devel \
proj-devel \
python3 \
sqlite-devel \
tar \
zlib-devel
## Download, Build & Install `Mapnik`
WORKDIR /tmp/mapnik_src
RUN --mount=id=centos:stream${centos_stream_version}-mapnik-src:latest,target=/tmp/mapnik_src,type=cache \
if [ ! -f CMakeLists.txt ]; then \
git clone --depth 1 --jobs 8 --recurse-submodules https://github.com/mapnik/mapnik.git /tmp/mapnik_src; \
fi
WORKDIR /tmp/mapnik_build
RUN --mount=id=centos:stream${centos_stream_version}-mapnik-src:latest,target=/tmp/mapnik_src,type=cache \
--mount=id=centos:stream${centos_stream_version}-mapnik-build:latest,target=/tmp/mapnik_build,type=cache \
export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) && \
export DESTDIR=/tmp/mapnik && \
cmake -B . -S /tmp/mapnik_src \
-DBUILD_DEMO_VIEWER:BOOL=OFF \
-DBUILD_TESTING:BOOL=OFF \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DCMAKE_INSTALL_PREFIX:PATH=/usr \
-DMAPNIK_PKGCONF_DIR:PATH=/usr/share/pkgconfig && \
cmake --build . && \
(cmake --install . --prefix /usr --strip || make DESTDIR=${DESTDIR} install/strip)
# Builder
FROM quay.io/centos/centos:stream${centos_stream_version} as builder
## Arguments
ARG centos_stream_version
ARG extra_repository
## Install builder dependencies
RUN --mount=id=centos:stream${centos_stream_version}-/var/cache/dnf,target=/var/cache/dnf,type=cache,sharing=locked \
echo "install_weak_deps=False" >> /etc/dnf/dnf.conf && \
echo "keepcache=True" >> /etc/dnf/dnf.conf && \
dnf --assumeyes install "dnf-command(config-manager)" && \
dnf config-manager --save \
--setopt=${extra_repository}.enabled=1 && \
dnf --assumeyes install epel-release && \
dnf --assumeyes upgrade && \
dnf --assumeyes install \
boost1.78-devel \
cairo-devel \
cmake3 \
freetype-devel \
gcc \
gcc-c++ \
gdal \
glib2-devel \
harfbuzz-devel \
httpd-devel \
iniparser-devel \
libcurl-devel \
libicu-devel \
libjpeg-devel \
libmemcached-devel \
libpng-devel \
librados2-devel \
libtiff-devel \
libwebp-devel \
libxml2-devel \
make \
pkg-config \
proj-devel
## Copy files from builder(s)
### Mapnik
COPY --from=mapnik-builder /tmp/mapnik /
## Build & Install `mod_tile`
COPY . /tmp/mod_tile_src
WORKDIR /tmp/mod_tile_build
RUN export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) && \
cmake -B . -S /tmp/mod_tile_src \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DENABLE_TESTS:BOOL=ON && \
cmake --build .
RUN export DESTDIR=/tmp/mod_tile && \
ctest --output-on-failure && \
(cmake --install . --prefix /usr --strip || make DESTDIR=${DESTDIR} install/strip) && \
mv /tmp/mod_tile/var/run /tmp/mod_tile/run
# Runner
FROM quay.io/centos/centos:stream${centos_stream_version} as runner
## Arguments
ARG centos_stream_version
ARG extra_repository
## Install runner dependencies
RUN --mount=id=centos:stream${centos_stream_version}-/var/cache/dnf,target=/var/cache/dnf,type=cache,sharing=locked \
echo "install_weak_deps=False" >> /etc/dnf/dnf.conf && \
echo "keepcache=True" >> /etc/dnf/dnf.conf && \
dnf --assumeyes install "dnf-command(config-manager)" && \
dnf config-manager --save \
--setopt=${extra_repository}.enabled=1 && \
dnf --assumeyes install epel-release && \
dnf --assumeyes upgrade && \
dnf --assumeyes install \
boost1.78-filesystem \
boost1.78-program-options \
boost1.78-regex \
cairo \
gdal \
harfbuzz \
httpd \
iniparser \
libicu \
libmemcached \
librados2 \
libtiff \
libwebp \
proj
## Copy files from builder(s)
### Mapnik
COPY --from=mapnik-builder /tmp/mapnik /
### mod_tile
COPY --from=builder /tmp/mod_tile /
COPY --chown=apache:apache --from=builder \
/tmp/mod_tile_src/utils/example-map \
/usr/share/renderd/example-map
COPY --from=builder \
/tmp/mod_tile_src/etc/apache2/renderd-example-map.conf \
/etc/httpd/conf.d/renderd-example-map.conf
## Add configuration
RUN printf '\n[example-map]\nURI=/tiles/renderd-example\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-jpg]\nTYPE=jpg image/jpeg jpeg\nURI=/tiles/renderd-example-jpg\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-png256]\nTYPE=png image/png png256\nURI=/tiles/renderd-example-png256\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-png32]\nTYPE=png image/png png32\nURI=/tiles/renderd-example-png32\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-webp]\nTYPE=webp image/webp webp\nURI=/tiles/renderd-example-webp\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
## Start services
CMD httpd -e debug -k start; \
G_MESSAGES_DEBUG=${G_MESSAGES_DEBUG:-info} renderd --foreground

92
docker/debian/Dockerfile Normal file
View File

@ -0,0 +1,92 @@
# Arguments
ARG debian_version=12
ARG libmapnik_version=3.1
# Builder
FROM debian:${debian_version} as builder
## Arguments
ARG debian_version
## Install builder dependencies
RUN --mount=id=debian:${debian_version}-/var/cache/apt,sharing=locked,target=/var/cache/apt,type=cache \
--mount=id=debian:${debian_version}-/var/lib/apt,sharing=locked,target=/var/lib/apt,type=cache \
export DEBIAN_FRONTEND=noninteractive && \
apt-get --yes update && \
apt-get --yes upgrade && \
apt-get --no-install-recommends --yes install \
apache2 \
apache2-dev \
cmake \
curl \
g++ \
gcc \
libcairo2-dev \
libcurl4-openssl-dev \
libglib2.0-dev \
libiniparser-dev \
libmapnik-dev \
libmemcached-dev \
librados-dev
## Build, Test & Install `mod_tile`
COPY . /tmp/mod_tile_src
WORKDIR /tmp/mod_tile_build
RUN export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) && \
cmake -B . -S /tmp/mod_tile_src \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DENABLE_TESTS:BOOL=ON && \
cmake --build .
RUN export DESTDIR=/tmp/mod_tile && \
ctest --output-on-failure && \
(cmake --install . --prefix /usr --strip || make DESTDIR=${DESTDIR} install/strip) && \
mv /tmp/mod_tile/var/run /tmp/mod_tile/run
# Runner
FROM debian:${debian_version} as runner
## Arguments
ARG libmapnik_version
ARG debian_version
## Install runner dependencies
RUN --mount=id=debian:${debian_version}-/var/cache/apt,sharing=locked,target=/var/cache/apt,type=cache \
--mount=id=debian:${debian_version}-/var/lib/apt,sharing=locked,target=/var/lib/apt,type=cache \
export DEBIAN_FRONTEND=noninteractive && \
apt-get --yes update && \
apt-get --yes upgrade && \
apt-get --no-install-recommends --yes install \
apache2 \
libcairo2 \
libcurl4 \
libglib2.0 \
libiniparser1 \
libmapnik${libmapnik_version} \
libmemcached11 \
libmemcachedutil2 \
librados2
## Copy files from builder(s)
### mod_tile
COPY --from=builder /tmp/mod_tile /
COPY --from=builder \
/tmp/mod_tile_src/utils/example-map \
/usr/share/renderd/example-map
COPY --from=builder \
/tmp/mod_tile_src/etc/apache2/renderd-example-map.conf \
/etc/apache2/sites-available/renderd-example-map.conf
## Add configuration
RUN printf '\n[example-map]\nURI=/tiles/renderd-example\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-jpg]\nTYPE=jpg image/jpeg jpeg\nURI=/tiles/renderd-example-jpg\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-png256]\nTYPE=png image/png png256\nURI=/tiles/renderd-example-png256\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-png32]\nTYPE=png image/png png32\nURI=/tiles/renderd-example-png32\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-webp]\nTYPE=webp image/webp webp\nURI=/tiles/renderd-example-webp\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
## Enable module & site
RUN a2enmod tile && \
a2ensite renderd-example-map
## Start services
CMD apachectl -e debug -k start; \
G_MESSAGES_DEBUG=${G_MESSAGES_DEBUG:-info} renderd --foreground

185
docker/docker-compose.yml Normal file
View File

@ -0,0 +1,185 @@
---
version: "3.8"
services:
centos-7:
build:
context: ..
dockerfile: docker/centos/7/Dockerfile
env_file: .env
ports:
- 8081:8081
ulimits:
nofile: 40000
centos-stream-8:
build:
args:
centos_stream_version: "8"
extra_repository: powertools
context: ..
dockerfile: docker/centos/stream/Dockerfile
env_file: .env
ports:
- 8081:8081
centos-stream-9:
build:
args:
centos_stream_version: "9"
extra_repository: crb
context: ..
dockerfile: docker/centos/stream/Dockerfile
env_file: .env
ports:
- 8081:8081
debian-10:
build:
args:
libmapnik_version: "3.0"
debian_version: "10"
context: ..
dockerfile: docker/debian/Dockerfile
env_file: .env
ports:
- 8081:8081
debian-11:
build:
args:
libmapnik_version: "3.1"
debian_version: "11"
context: ..
dockerfile: docker/debian/Dockerfile
env_file: .env
ports:
- 8081:8081
debian-12:
build:
args:
libmapnik_version: "3.1"
debian_version: "12"
context: ..
dockerfile: docker/debian/Dockerfile
env_file: .env
ports:
- 8081:8081
debian-testing:
build:
args:
libmapnik_version: "3.1"
debian_version: testing
context: ..
dockerfile: docker/debian/Dockerfile
env_file: .env
ports:
- 8081:8081
fedora-34:
build:
args:
fedora_version: "34"
context: ..
dockerfile: docker/fedora/Dockerfile
env_file: .env
ports:
- 8081:8081
fedora-35:
build:
args:
fedora_version: "35"
context: ..
dockerfile: docker/fedora/Dockerfile
env_file: .env
ports:
- 8081:8081
fedora-36:
build:
args:
fedora_version: "36"
context: ..
dockerfile: docker/fedora/Dockerfile
env_file: .env
ports:
- 8081:8081
fedora-37:
build:
args:
fedora_version: "37"
context: ..
dockerfile: docker/fedora/Dockerfile
env_file: .env
ports:
- 8081:8081
fedora-38:
build:
args:
fedora_version: "38"
context: ..
dockerfile: docker/fedora/Dockerfile
env_file: .env
ports:
- 8081:8081
fedora-39:
build:
args:
fedora_version: "39"
context: ..
dockerfile: docker/fedora/Dockerfile
env_file: .env
ports:
- 8081:8081
fedora-rawhide:
build:
args:
fedora_version: rawhide
context: ..
dockerfile: docker/fedora/Dockerfile
env_file: .env
ports:
- 8081:8081
opensuse-leap-15:
build:
args:
boost_version: "1_75_0"
opensuse_version: leap:15
context: ..
dockerfile: docker/opensuse/Dockerfile
env_file: .env
ports:
- 8081:8081
opensuse-tumbleweed:
build:
args:
opensuse_version: tumbleweed
context: ..
dockerfile: docker/opensuse/Dockerfile
env_file: .env
ports:
- 8081:8081
ubuntu-20.04:
build:
args:
libmapnik_version: "3.0"
ubuntu_version: "20.04"
context: ..
dockerfile: docker/ubuntu/Dockerfile
env_file: .env
ports:
- 8081:8081
ubuntu-22.04:
build:
args:
libmapnik_version: "3.1"
ubuntu_version: "22.04"
context: ..
dockerfile: docker/ubuntu/Dockerfile
env_file: .env
ports:
- 8081:8081
ubuntu-devel:
build:
args:
libmapnik_version: "3.1"
ubuntu_version: devel
context: ..
dockerfile: docker/ubuntu/Dockerfile
env_file: .env
ports:
- 8081:8081

79
docker/fedora/Dockerfile Normal file
View File

@ -0,0 +1,79 @@
# Arguments
ARG fedora_version=38
# Builder
FROM fedora:${fedora_version} as builder
## Arguments
ARG fedora_version
## Install builder dependencies
RUN --mount=id=fedora:${fedora_version}-/var/cache/dnf,target=/var/cache/dnf,type=cache,sharing=locked \
echo "install_weak_deps=False" >> /etc/dnf/dnf.conf && \
echo "keepcache=True" >> /etc/dnf/dnf.conf && \
dnf --assumeyes install \
cairo-devel \
cmake \
gcc \
gcc-c++ \
glib2-devel \
httpd-devel \
iniparser-devel \
libcurl-devel \
libmemcached-devel \
librados-devel \
mapnik-devel
## Build, Test & Install `mod_tile`
COPY . /tmp/mod_tile_src
WORKDIR /tmp/mod_tile_build
RUN export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) && \
cmake -B . -S /tmp/mod_tile_src \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DENABLE_TESTS:BOOL=ON && \
cmake --build .
RUN export DESTDIR=/tmp/mod_tile && \
ctest --output-on-failure && \
(cmake --install . --prefix /usr --strip || make DESTDIR=${DESTDIR} install/strip) && \
mv /tmp/mod_tile/var/run /tmp/mod_tile/run
# Runner
FROM fedora:${fedora_version} as runner
## Arguments
ARG fedora_version
## Install runner dependencies
RUN --mount=id=fedora:${fedora_version}-/var/cache/dnf,target=/var/cache/dnf,type=cache,sharing=locked \
echo "install_weak_deps=False" >> /etc/dnf/dnf.conf && \
echo "keepcache=True" >> /etc/dnf/dnf.conf && \
dnf --assumeyes install \
cairo \
glib2 \
httpd \
iniparser \
libcurl \
libmemcached \
librados2 \
mapnik
## Copy files from builder(s)
### mod_tile
COPY --from=builder /tmp/mod_tile /
COPY --chown=apache:apache --from=builder \
/tmp/mod_tile_src/utils/example-map \
/usr/share/renderd/example-map
COPY --from=builder \
/tmp/mod_tile_src/etc/apache2/renderd-example-map.conf \
/etc/httpd/conf.d/renderd-example-map.conf
## Add configuration
RUN printf '\n[example-map]\nURI=/tiles/renderd-example\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-jpg]\nTYPE=jpg image/jpeg jpeg\nURI=/tiles/renderd-example-jpg\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-png256]\nTYPE=png image/png png256\nURI=/tiles/renderd-example-png256\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-png32]\nTYPE=png image/png png32\nURI=/tiles/renderd-example-png32\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-webp]\nTYPE=webp image/webp webp\nURI=/tiles/renderd-example-webp\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
## Start services
CMD httpd -e debug -k start; \
G_MESSAGES_DEBUG=${G_MESSAGES_DEBUG:-info} renderd --foreground

178
docker/opensuse/Dockerfile Normal file
View File

@ -0,0 +1,178 @@
# Arguments
ARG boost_version
ARG opensuse_version=leap:15
# Mapnik Builder
FROM opensuse/${opensuse_version} as mapnik-builder
## Arguments
ARG boost_version
ARG opensuse_version
## Install mapnik-builder dependencies
RUN --mount=id=opensuse:${opensuse_version}-/var/cache/zypp,target=/var/cache/zypp,type=cache,sharing=locked \
zypper modifyrepo --all --keep-packages && \
zypper --non-interactive update && \
zypper --non-interactive install \
cairo-devel \
cmake \
freetype-devel \
gcc \
gcc-c++ \
gdal-devel \
git \
harfbuzz-devel \
libboost_atomic${boost_version}-devel \
libboost_filesystem${boost_version}-devel \
libboost_headers${boost_version}-devel \
libboost_program_options${boost_version}-devel \
libboost_regex${boost_version}-devel \
libboost_system${boost_version}-devel \
libicu-devel \
libjpeg8-devel \
libpng16-devel \
libtiff-devel \
libwebp-devel \
libxml2-devel \
postgresql-devel \
proj-devel \
python3 \
sqlite3-devel \
tar \
zlib-devel
## Download, Build & Install `Mapnik`
WORKDIR /tmp/mapnik_src
RUN --mount=id=opensuse:${opensuse_version}-mapnik-src:latest,target=/tmp/mapnik_src,type=cache \
if [ ! -f CMakeLists.txt ]; then \
git clone --depth 1 --jobs 8 --recurse-submodules https://github.com/mapnik/mapnik.git /tmp/mapnik_src; \
fi
WORKDIR /tmp/mapnik_build
RUN --mount=id=opensuse:${opensuse_version}-mapnik-src:latest,target=/tmp/mapnik_src,type=cache \
--mount=id=opensuse:${opensuse_version}-mapnik-build:latest,target=/tmp/mapnik_build,type=cache \
export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) && \
export DESTDIR=/tmp/mapnik && \
cmake -B . -S /tmp/mapnik_src \
-DBUILD_DEMO_VIEWER:BOOL=OFF \
-DBUILD_TESTING:BOOL=OFF \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DCMAKE_INSTALL_PREFIX:PATH=/usr \
-DMAPNIK_PKGCONF_DIR:PATH=/usr/share/pkgconfig && \
cmake --build . && \
(cmake --install . --prefix /usr --strip || make DESTDIR=${DESTDIR} install/strip)
# Builder
FROM opensuse/${opensuse_version} as builder
## Arguments
ARG boost_version
ARG opensuse_version
## Install builder dependencies
RUN --mount=id=opensuse:${opensuse_version}-/var/cache/zypp,target=/var/cache/zypp,type=cache,sharing=locked \
zypper modifyrepo --all --keep-packages && \
zypper --non-interactive update && \
zypper --non-interactive install \
apache2-devel \
cairo-devel \
cmake \
curl \
gcc \
gcc-c++ \
gdal \
glib2-devel \
harfbuzz-devel \
libboost_atomic${boost_version}-devel \
libboost_filesystem${boost_version}-devel \
libboost_headers${boost_version}-devel \
libboost_program_options${boost_version}-devel \
libboost_regex${boost_version}-devel \
libboost_system${boost_version}-devel \
libcurl-devel \
libicu-devel \
libiniparser-devel \
libjpeg8-devel \
libmemcached-devel \
librados-devel \
libtiff-devel \
libwebp-devel \
libxml2-devel \
proj-devel \
tar
## Copy files from builder(s)
### Mapnik
COPY --from=mapnik-builder /tmp/mapnik /
## Create `nobody` user and group
RUN id nobody || useradd --home-dir / --no-create-home --shell /usr/sbin/nologin --system --user-group nobody
## Build, Test & Install `mod_tile`
COPY . /tmp/mod_tile_src
WORKDIR /tmp/mod_tile_build
RUN export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) && \
cmake -B . -S /tmp/mod_tile_src \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DENABLE_TESTS:BOOL=ON && \
cmake --build .
RUN export DESTDIR=/tmp/mod_tile && \
ctest --output-on-failure && \
(cmake --install . --prefix /usr --strip || make DESTDIR=${DESTDIR} install/strip) && \
mv /tmp/mod_tile/var/run /tmp/mod_tile/run
# Runner
FROM opensuse/${opensuse_version} as runner
## Arguments
ARG boost_version
ARG opensuse_version
## Install runner dependencies
RUN --mount=id=opensuse:${opensuse_version}-/var/cache/zypp,target=/var/cache/zypp,type=cache,sharing=locked \
zypper modifyrepo --all --keep-packages && \
zypper --non-interactive update && \
zypper --non-interactive install \
apache2 \
apache2-utils \
cairo-devel \
gdal \
harfbuzz-devel \
libboost_atomic${boost_version}-devel \
libboost_filesystem${boost_version}-devel \
libboost_program_options${boost_version}-devel \
libboost_regex${boost_version}-devel \
libboost_system${boost_version}-devel \
libicu-devel \
libiniparser-devel \
libjpeg8-devel \
libmemcached-devel \
librados-devel \
libtiff-devel \
libwebp-devel \
proj
## Copy files from builder(s)
### Mapnik
COPY --from=mapnik-builder /tmp/mapnik /
### mod_tile
COPY --from=builder /tmp/mod_tile /
COPY --chown=apache:apache --from=builder \
/tmp/mod_tile_src/utils/example-map \
/usr/share/renderd/example-map
COPY --from=builder \
/tmp/mod_tile_src/etc/apache2/renderd-example-map.conf \
/etc/apache2/conf.d/renderd-example-map.conf
## Add configuration
RUN printf '\n[example-map]\nURI=/tiles/renderd-example\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-jpg]\nTYPE=jpg image/jpeg jpeg\nURI=/tiles/renderd-example-jpg\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-png256]\nTYPE=png image/png png256\nURI=/tiles/renderd-example-png256\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-png32]\nTYPE=png image/png png32\nURI=/tiles/renderd-example-png32\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-webp]\nTYPE=webp image/webp webp\nURI=/tiles/renderd-example-webp\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
## Enable `mod_access_compat`
RUN sed -i 's/^APACHE_MODULES="actions/APACHE_MODULES="access_compat actions/g' /etc/sysconfig/apache2
## Start services
CMD apachectl -e debug -k start; \
G_MESSAGES_DEBUG=${G_MESSAGES_DEBUG:-info} renderd --foreground

91
docker/ubuntu/Dockerfile Normal file
View File

@ -0,0 +1,91 @@
# Arguments
ARG libmapnik_version=3.1
ARG ubuntu_version=22.04
# Builder
FROM ubuntu:${ubuntu_version} as builder
## Arguments
ARG ubuntu_version
## Install builder dependencies
RUN --mount=id=ubuntu:${ubuntu_version}-/var/cache/apt,sharing=locked,target=/var/cache/apt,type=cache \
--mount=id=ubuntu:${ubuntu_version}-/var/lib/apt,sharing=locked,target=/var/lib/apt,type=cache \
export DEBIAN_FRONTEND=noninteractive && \
apt-get --yes update && \
apt-get --yes upgrade && \
apt-get --no-install-recommends --yes install \
apache2 \
apache2-dev \
cmake \
curl \
g++ \
gcc \
libcairo2-dev \
libcurl4-openssl-dev \
libglib2.0-dev \
libiniparser-dev \
libmapnik-dev \
libmemcached-dev \
librados-dev
## Build, Test & Install `mod_tile`
COPY . /tmp/mod_tile_src
WORKDIR /tmp/mod_tile_build
RUN export CMAKE_BUILD_PARALLEL_LEVEL=$(nproc) && \
cmake -B . -S /tmp/mod_tile_src \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DENABLE_TESTS:BOOL=ON && \
cmake --build .
RUN export DESTDIR=/tmp/mod_tile && \
ctest --output-on-failure && \
(cmake --install . --prefix /usr --strip || make DESTDIR=${DESTDIR} install/strip) && \
mv /tmp/mod_tile/var/run /tmp/mod_tile/run
# Runner
FROM ubuntu:${ubuntu_version} as runner
## Arguments
ARG libmapnik_version
ARG ubuntu_version
## Install runner dependencies
RUN --mount=id=ubuntu:${ubuntu_version}-/var/cache/apt,sharing=locked,target=/var/cache/apt,type=cache \
--mount=id=ubuntu:${ubuntu_version}-/var/lib/apt,sharing=locked,target=/var/lib/apt,type=cache \
export DEBIAN_FRONTEND=noninteractive && \
apt-get --yes update && \
apt-get --yes upgrade && \
apt-get --no-install-recommends --yes install \
apache2 \
libcairo2 \
libcurl4 \
libglib2.0-0 \
libiniparser1 \
libmapnik${libmapnik_version} \
libmemcached11 \
librados2
## Copy files from builder(s)
### mod_tile
COPY --from=builder /tmp/mod_tile /
COPY --from=builder \
/tmp/mod_tile_src/utils/example-map \
/usr/share/renderd/example-map
COPY --from=builder \
/tmp/mod_tile_src/etc/apache2/renderd-example-map.conf \
/etc/apache2/sites-available/renderd-example-map.conf
## Add configuration
RUN printf '\n[example-map]\nURI=/tiles/renderd-example\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-jpg]\nTYPE=jpg image/jpeg jpeg\nURI=/tiles/renderd-example-jpg\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-png256]\nTYPE=png image/png png256\nURI=/tiles/renderd-example-png256\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-png32]\nTYPE=png image/png png32\nURI=/tiles/renderd-example-png32\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
RUN printf '\n[example-map-webp]\nTYPE=webp image/webp webp\nURI=/tiles/renderd-example-webp\nXML=/usr/share/renderd/example-map/mapnik.xml\n' >> /etc/renderd.conf
## Enable module & site
RUN a2enmod tile && \
a2ensite renderd-example-map
## Start services
CMD apachectl -e debug -k start; \
G_MESSAGES_DEBUG=${G_MESSAGES_DEBUG:-info} renderd --foreground