From 72fdf84292fb3375b3a77d30ad33966ecfb60b66 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Wed, 14 Sep 2022 17:33:02 -0400 Subject: [PATCH 01/10] Change to use maplibre-native and maplibre-gl-style-spec --- package.json | 4 ++-- src/serve_rendered.js | 2 +- src/serve_style.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 6de09b1..500bcc5 100644 --- a/package.json +++ b/package.json @@ -18,8 +18,8 @@ }, "dependencies": { "@mapbox/glyph-pbf-composite": "0.0.3", - "@mapbox/mapbox-gl-native": "5.0.2", - "@mapbox/mapbox-gl-style-spec": "13.12.0", + "@maplibre/maplibre-gl-native": "5.0.1-pre.0", + "@maplibre/maplibre-gl-style-spec": "17.0.1", "@mapbox/mbtiles": "0.11.0", "@mapbox/sphericalmercator": "1.1.0", "@mapbox/vector-tile": "1.3.1", diff --git a/src/serve_rendered.js b/src/serve_rendered.js index 11b6bfb..39b6df5 100644 --- a/src/serve_rendered.js +++ b/src/serve_rendered.js @@ -17,7 +17,7 @@ const clone = require('clone'); const Color = require('color'); const express = require('express'); const mercator = new (require('@mapbox/sphericalmercator'))(); -const mbgl = require('@mapbox/mapbox-gl-native'); +const mbgl = require('@maplibre/maplibre-gl-native'); const MBTiles = require('@mapbox/mbtiles'); const proj4 = require('proj4'); const request = require('request'); diff --git a/src/serve_style.js b/src/serve_style.js index 050e9d1..c336eec 100644 --- a/src/serve_style.js +++ b/src/serve_style.js @@ -5,7 +5,7 @@ const fs = require('fs'); const clone = require('clone'); const express = require('express'); -import {validate} from '@mapbox/mapbox-gl-style-spec'; +import {validate} from '@maplibre/maplibre-gl-style-spec'; const utils = require('./utils'); From 773902bbe908fbe1ed9e4bccb07eca610e8bcb2d Mon Sep 17 00:00:00 2001 From: acalcutt Date: Wed, 14 Sep 2022 17:43:44 -0400 Subject: [PATCH 02/10] update docker images to work with new maplibre-native --- Dockerfile | 16 +++++++++++++--- Dockerfile_light | 5 +++-- Dockerfile_test | 3 ++- docker-entrypoint_light.sh | 35 +++++++++++++++++++++++++++++++++++ publish.js | 5 +++-- 5 files changed, 56 insertions(+), 8 deletions(-) create mode 100644 docker-entrypoint_light.sh diff --git a/Dockerfile b/Dockerfile index 7b70733..7c4b081 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:10-buster AS builder +FROM node:16-bullseye AS builder RUN export DEBIAN_FRONTEND=noninteractive \ && apt-get -qq update \ @@ -11,7 +11,6 @@ RUN export DEBIAN_FRONTEND=noninteractive \ libcairo2-dev \ libgles2-mesa-dev \ libgbm-dev \ - libllvm7 \ libprotobuf-dev \ && apt-get -y --purge autoremove \ && apt-get clean \ @@ -24,7 +23,7 @@ ENV NODE_ENV="production" RUN cd /usr/src/app && npm install --production -FROM node:10-buster-slim AS final +FROM node:16-bullseye-slim AS final RUN export DEBIAN_FRONTEND=noninteractive \ && apt-get -qq update \ @@ -33,9 +32,20 @@ RUN export DEBIAN_FRONTEND=noninteractive \ libegl1 \ xvfb \ xauth \ + libopengl0 \ + libcurl4 \ + curl \ + libuv1-dev \ + libc6-dev \ + libcap2-bin \ && apt-get -y --purge autoremove \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* + +RUN curl http://archive.ubuntu.com/ubuntu/pool/main/libj/libjpeg-turbo/libjpeg-turbo8_2.0.3-0ubuntu1_amd64.deb --output libjpeg-turbo8_2.0.3-0ubuntu1_amd64.deb +RUN apt install ./libjpeg-turbo8_2.0.3-0ubuntu1_amd64.deb +RUN curl http://archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu66_66.1-2ubuntu2_amd64.deb --output libicu66_66.1-2ubuntu2_amd64.deb +RUN apt install ./libicu66_66.1-2ubuntu2_amd64.deb COPY --from=builder /usr/src/app /app diff --git a/Dockerfile_light b/Dockerfile_light index c5df16f..4112bf9 100644 --- a/Dockerfile_light +++ b/Dockerfile_light @@ -1,4 +1,4 @@ -FROM node:10-stretch +FROM node:16-bullseye ENV NODE_ENV="production" ENV CHOKIDAR_USEPOLLING=1 @@ -6,8 +6,9 @@ ENV CHOKIDAR_INTERVAL=500 EXPOSE 80 VOLUME /data WORKDIR /data -ENTRYPOINT ["node", "/usr/src/app/", "-p", "80"] +ENTRYPOINT ["/usr/src/app/docker-entrypoint.sh"] RUN mkdir -p /usr/src/app COPY / /usr/src/app RUN cd /usr/src/app && npm install --production +RUN ["chmod", "+x", "/usr/src/app/docker-entrypoint.sh"] diff --git a/Dockerfile_test b/Dockerfile_test index 37d34f8..227e1cb 100644 --- a/Dockerfile_test +++ b/Dockerfile_test @@ -2,7 +2,7 @@ # Simply run "docker build -f Dockerfile_test ." # WARNING: sometimes it fails with a core dumped exception -FROM node:10-stretch +FROM node:16-bullseye RUN apt-get -qq update \ && DEBIAN_FRONTEND=noninteractive apt-get -y install \ @@ -17,6 +17,7 @@ RUN apt-get -qq update \ libllvm3.9 \ libprotobuf-dev \ libxxf86vm-dev \ + libopengl0 \ xvfb \ && apt-get clean diff --git a/docker-entrypoint_light.sh b/docker-entrypoint_light.sh new file mode 100644 index 0000000..e3c1c67 --- /dev/null +++ b/docker-entrypoint_light.sh @@ -0,0 +1,35 @@ +#!/bin/sh + +set -e + +handle() { + SIGNAL=$(( $? - 128 )) + echo "Caught signal ${SIGNAL}, stopping gracefully" + kill -s ${SIGNAL} $(pidof node) 2>/dev/null +} + +trap handle INT TERM + +refresh() { + SIGNAL=$(( $? - 128 )) + echo "Caught signal ${SIGNAL}, refreshing" + kill -s ${SIGNAL} $(pidof node) 2>/dev/null +} + +trap refresh HUP + +if ! which -- "${1}"; then + # first arg is not an executable + node /usr/src/app/ -p 80 "$@" & + # Wait exits immediately on signals which have traps set. Store return value and wait + # again for all jobs to actually complete before continuing. + wait $! || RETVAL=$? + while [ ${RETVAL} = 129 ] ; do + # Refressh signal HUP received. Continue waiting for signals. + wait $! || RETVAL=$? + done + wait + exit ${RETVAL} +fi + +exec "$@" diff --git a/publish.js b/publish.js index 663cab0..e58066c 100644 --- a/publish.js +++ b/publish.js @@ -22,18 +22,19 @@ var packageJson = require('./package'); packageJson.name += '-light'; packageJson.description = 'Map tile server for JSON GL styles - serving vector tiles'; delete packageJson.dependencies['canvas']; -delete packageJson.dependencies['@mapbox/mapbox-gl-native']; +delete packageJson.dependencies['@maplibre/maplibre-gl-native']; delete packageJson.dependencies['sharp']; delete packageJson.optionalDependencies; delete packageJson.devDependencies; -packageJson.engines.node = '>= 10'; +packageJson.engines.node = '>= 14.13.0'; var str = JSON.stringify(packageJson, undefined, 2); fs.writeFileSync('light/package.json', str); fs.renameSync('light/README_light.md', 'light/README.md'); fs.renameSync('light/Dockerfile_light', 'light/Dockerfile'); +fs.renameSync('light/docker-entrypoint_light.sh', 'light/docker-entrypoint.sh'); // for Build tileserver-gl-light docker image, don't publish if (process.argv.length > 2 && process.argv[2] == "--no-publish") { From 398a6edbcdf5107e05cccddc9ac4e4fbaf4ac095 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Wed, 14 Sep 2022 17:52:27 -0400 Subject: [PATCH 03/10] put back node min version --- publish.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/publish.js b/publish.js index e58066c..26929c9 100644 --- a/publish.js +++ b/publish.js @@ -28,7 +28,7 @@ delete packageJson.dependencies['sharp']; delete packageJson.optionalDependencies; delete packageJson.devDependencies; -packageJson.engines.node = '>= 14.13.0'; +packageJson.engines.node = '>= 10'; var str = JSON.stringify(packageJson, undefined, 2); fs.writeFileSync('light/package.json', str); From ef9e11cb25560b4e0e6bfd839beda98f11d2808f Mon Sep 17 00:00:00 2001 From: acalcutt Date: Wed, 14 Sep 2022 17:59:45 -0400 Subject: [PATCH 04/10] remove max node version for now --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 500bcc5..a4e610f 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ }, "license": "BSD-2-Clause", "engines": { - "node": ">=10 <11" + "node": ">=10" }, "scripts": { "test": "mocha test/**.js --timeout 10000", From 6c6dd17df6642ae731838d685c5528e97ba00fda Mon Sep 17 00:00:00 2001 From: acalcutt Date: Wed, 14 Sep 2022 18:02:39 -0400 Subject: [PATCH 05/10] update @mapbox/mbtiles --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a4e610f..5fa3986 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "@mapbox/glyph-pbf-composite": "0.0.3", "@maplibre/maplibre-gl-native": "5.0.1-pre.0", "@maplibre/maplibre-gl-style-spec": "17.0.1", - "@mapbox/mbtiles": "0.11.0", + "@mapbox/mbtiles": "0.12.1", "@mapbox/sphericalmercator": "1.1.0", "@mapbox/vector-tile": "1.3.1", "advanced-pool": "0.3.3", From 77e23e3283872998d02969cb1a167e0a3339c4ad Mon Sep 17 00:00:00 2001 From: acalcutt Date: Wed, 14 Sep 2022 18:09:55 -0400 Subject: [PATCH 06/10] Update package.json --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 5fa3986..ec303d1 100644 --- a/package.json +++ b/package.json @@ -21,10 +21,10 @@ "@maplibre/maplibre-gl-native": "5.0.1-pre.0", "@maplibre/maplibre-gl-style-spec": "17.0.1", "@mapbox/mbtiles": "0.12.1", - "@mapbox/sphericalmercator": "1.1.0", + "@mapbox/sphericalmercator": "1.2.0", "@mapbox/vector-tile": "1.3.1", "advanced-pool": "0.3.3", - "canvas": "2.6.1", + "canvas": "2.9.3", "chokidar": "3.3.1", "clone": "2.1.2", "color": "3.1.2", From 5be1072fd6d963099848a6609f972e4ac8b98c16 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Wed, 14 Sep 2022 20:16:08 -0400 Subject: [PATCH 07/10] Update documentation dependencies --- docs/installation.rst | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/docs/installation.rst b/docs/installation.rst index 3741e89..232ca7a 100644 --- a/docs/installation.rst +++ b/docs/installation.rst @@ -26,11 +26,30 @@ Native dependencies There are some native dependencies that you need to make sure are installed if you plan to run the TileServer GL natively without docker. The precise package names you need to install may differ on various platforms. -These are required on Debian 9: - * ``build-essential`` - * ``libcairo2-dev`` - * ``libprotobuf-dev`` +These are required on Debian 11: + * ``libgles2-mesa`` + * ``libegl1`` + * ``xvfb`` + * ``xauth`` + * ``libopengl0`` + * ``libcurl4`` + * ``curl`` + * ``libuv1-dev`` + * ``libc6-dev`` + * ``http://archive.ubuntu.com/ubuntu/pool/main/libj/libjpeg-turbo/libjpeg-turbo8_2.0.3-0ubuntu1_amd64.deb`` + * ``http://archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu66_66.1-2ubuntu2_amd64.deb`` +These are required on Ubuntu 20.04: + * ``libcairo2-dev`` + * ``libjpeg8-dev`` + * ``libpango1.0-dev`` + * ``libgif-dev`` + * ``build-essential`` + * ``g++`` + * ``xvfb`` + * ``libgles2-mesa-dev`` + * ``libgbm-dev`` + * ``libxxf86vm-dev`` ``tileserver-gl-light`` on npm ============================== From 3136ccd83a9d31181c9ed79c00b6bdbae7b44140 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Wed, 14 Sep 2022 22:03:29 -0400 Subject: [PATCH 08/10] update node version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ec303d1..d5c03cc 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ }, "license": "BSD-2-Clause", "engines": { - "node": ">=10" + "node": ">=10 <17" }, "scripts": { "test": "mocha test/**.js --timeout 10000", From aba436ea98542076eaca3cdb4bf09fb7e0d1f82a Mon Sep 17 00:00:00 2001 From: Andrew Calcutt Date: Thu, 15 Sep 2022 15:48:50 -0400 Subject: [PATCH 09/10] specify port 80 to match instructions --- docker-entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index a93e296..21eeaf7 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -20,7 +20,7 @@ trap refresh HUP if ! which -- "${1}"; then # first arg is not an executable - xvfb-run -a --server-args="-screen 0 1024x768x24" -- node /app/ "$@" & + xvfb-run -a --server-args="-screen 0 1024x768x24" -- node /app/ -p 80 "$@" & # Wait exits immediately on signals which have traps set. Store return value and wait # again for all jobs to actually complete before continuing. wait $! || RETVAL=$? From 9d2e71fb2e2e539dd0262aea61f40093f6e87de3 Mon Sep 17 00:00:00 2001 From: acalcutt Date: Fri, 16 Sep 2022 00:27:50 -0400 Subject: [PATCH 10/10] remove CMD that doesn't work --- Dockerfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7c4b081..dc9e0a2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -61,5 +61,3 @@ EXPOSE 80 USER node:node ENTRYPOINT ["/app/docker-entrypoint.sh"] - -CMD ["-p", "80"]