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") {