diff --git a/.dockerignore b/.dockerignore index b849c8a..1661d17 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,6 +1,7 @@ * !src !public +!test !package.json !package-lock.json !docker-entrypoint.sh diff --git a/Dockerfile b/Dockerfile index dc9e0a2..7e55389 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,57 +1,76 @@ -FROM node:16-bullseye AS builder - -RUN export DEBIAN_FRONTEND=noninteractive \ - && apt-get -qq update \ - && apt-get -y --no-install-recommends install \ - apt-transport-https \ - curl \ - unzip \ - build-essential \ - python \ - libcairo2-dev \ - libgles2-mesa-dev \ - libgbm-dev \ - libprotobuf-dev \ - && apt-get -y --purge autoremove \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -COPY . /usr/src/app +FROM ubuntu:focal AS builder ENV NODE_ENV="production" +RUN set -ex; \ + export DEBIAN_FRONTEND=noninteractive; \ + apt-get -qq update; \ + apt-get -y --no-install-recommends install \ + build-essential \ + ca-certificates \ + wget \ + pkg-config \ + xvfb \ + libglfw3-dev \ + libuv1-dev \ + libjpeg-turbo8 \ + libicu66 \ + libcairo2-dev \ + libpango1.0-dev \ + libjpeg-dev \ + libgif-dev \ + librsvg2-dev \ + libcurl4-openssl-dev \ + libpixman-1-dev; \ + wget -qO- https://deb.nodesource.com/setup_16.x | bash; \ + apt-get install -y nodejs; \ + apt-get -y remove wget; \ + apt-get -y --purge autoremove; \ + apt-get clean; \ + rm -rf /var/lib/apt/lists/*; + +RUN mkdir -p /usr/src/app +COPY package.json /usr/src/app + RUN cd /usr/src/app && npm install --production +FROM ubuntu:focal AS final -FROM node:16-bullseye-slim AS final +ENV \ + NODE_ENV="production" \ + CHOKIDAR_USEPOLLING=1 \ + CHOKIDAR_INTERVAL=500 -RUN export DEBIAN_FRONTEND=noninteractive \ - && apt-get -qq update \ - && apt-get -y --no-install-recommends install \ - libgles2-mesa \ - libegl1 \ +RUN set -ex; \ + export DEBIAN_FRONTEND=noninteractive; \ + groupadd -r node; \ + useradd -r -g node node; \ + apt-get -qq update; \ + apt-get -y --no-install-recommends install \ + ca-certificates \ + wget \ xvfb \ - xauth \ + libglfw3 \ + libuv1 \ + libjpeg-turbo8 \ + libicu66 \ + libcairo2 \ + libgif7 \ libopengl0 \ + libpixman-1-0 \ 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 + librsvg2-2 \ + libpango1.0; \ + wget -qO- https://deb.nodesource.com/setup_16.x | bash; \ + apt-get install -y nodejs; \ + apt-get -y remove wget; \ + apt-get -y --purge autoremove; \ + apt-get clean; \ + rm -rf /var/lib/apt/lists/*; -COPY --from=builder /usr/src/app /app +COPY --from=builder /usr/src/app /usr/src/app -ENV NODE_ENV="production" -ENV CHOKIDAR_USEPOLLING=1 -ENV CHOKIDAR_INTERVAL=500 +COPY . /usr/src/app VOLUME /data WORKDIR /data @@ -60,4 +79,4 @@ EXPOSE 80 USER node:node -ENTRYPOINT ["/app/docker-entrypoint.sh"] +ENTRYPOINT ["/usr/src/app/docker-entrypoint.sh"] diff --git a/Dockerfile_light b/Dockerfile_light index 4112bf9..c6c7421 100644 --- a/Dockerfile_light +++ b/Dockerfile_light @@ -1,8 +1,25 @@ -FROM node:16-bullseye +FROM ubuntu:focal + +ENV \ + NODE_ENV="production" \ + CHOKIDAR_USEPOLLING=1 \ + CHOKIDAR_INTERVAL=500 + +RUN set -ex; \ + export DEBIAN_FRONTEND=noninteractive; \ + groupadd -r node; \ + useradd -r -g node node; \ + apt-get -qq update; \ + apt-get -y --no-install-recommends install \ + ca-certificates \ + wget; \ + wget -qO- https://deb.nodesource.com/setup_16.x | bash; \ + apt-get install -y nodejs; \ + apt-get -y remove wget; \ + apt-get -y --purge autoremove; \ + apt-get clean; \ + rm -rf /var/lib/apt/lists/*; -ENV NODE_ENV="production" -ENV CHOKIDAR_USEPOLLING=1 -ENV CHOKIDAR_INTERVAL=500 EXPOSE 80 VOLUME /data WORKDIR /data @@ -12,3 +29,4 @@ 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"] +USER node:node diff --git a/Dockerfile_test b/Dockerfile_test index 227e1cb..f5b743f 100644 --- a/Dockerfile_test +++ b/Dockerfile_test @@ -2,34 +2,43 @@ # Simply run "docker build -f Dockerfile_test ." # WARNING: sometimes it fails with a core dumped exception -FROM node:16-bullseye +FROM ubuntu:focal -RUN apt-get -qq update \ -&& DEBIAN_FRONTEND=noninteractive apt-get -y install \ - apt-transport-https \ - curl \ - unzip \ - build-essential \ - python \ - libcairo2-dev \ - libgles2-mesa-dev \ - libgbm-dev \ - libllvm3.9 \ - libprotobuf-dev \ - libxxf86vm-dev \ - libopengl0 \ - xvfb \ -&& apt-get clean +ENV NODE_ENV="development" + +RUN set -ex; \ + export DEBIAN_FRONTEND=noninteractive; \ + apt-get -qq update; \ + apt-get -y --no-install-recommends install \ + unzip \ + build-essential \ + ca-certificates \ + wget \ + pkg-config \ + xvfb \ + libglfw3-dev \ + libuv1-dev \ + libjpeg-turbo8 \ + libicu66 \ + libcairo2-dev \ + libpango1.0-dev \ + libjpeg-dev \ + libgif-dev \ + librsvg2-dev \ + libcurl4-openssl-dev \ + libpixman-1-dev; \ + wget -qO- https://deb.nodesource.com/setup_16.x | bash; \ + apt-get install -y nodejs; \ + apt-get clean; RUN mkdir -p /usr/src/app WORKDIR /usr/src/app -RUN wget -O test_data.zip https://github.com/maptiler/tileserver-gl/releases/download/v1.3.0/test_data.zip -RUN unzip -q test_data.zip -d test_data - -ENV NODE_ENV="test" +RUN wget -O test_data.zip https://github.com/maptiler/tileserver-gl/releases/download/v1.3.0/test_data.zip; \ + unzip -q test_data.zip -d test_data COPY package.json . RUN npm install COPY / . + RUN xvfb-run --server-args="-screen 0 1024x768x24" npm test diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 21eeaf7..b4defe6 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/ -p 80 "$@" & + xvfb-run -a --server-args="-screen 0 1024x768x24" -- 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=$?