diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..22797933 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +acceptance_tests/ +ci +Dockerfile +.dockerignore +.git +.github +.gitignore +Makefile +README.md diff --git a/.gitignore b/.gitignore index 06d10439..cdd6ed2e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1 @@ /acceptance_tests/junitxml -/server/build -/server/target -/src diff --git a/server/Dockerfile b/Dockerfile similarity index 65% rename from server/Dockerfile rename to Dockerfile index 8b0733b5..0ff8df3b 100644 --- a/server/Dockerfile +++ b/Dockerfile @@ -1,4 +1,40 @@ -FROM ubuntu:18.04 +FROM ubuntu:18.04 as builder +LABEL maintainer="info@camptocamp.com" + +RUN apt-get update && \ + LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -y bison flex python-lxml libfribidi-dev swig \ + cmake librsvg2-dev colordiff libpq-dev libpng-dev libjpeg-dev libgif-dev libgeos-dev libgd-dev \ + libfreetype6-dev libfcgi-dev libcurl4-gnutls-dev libcairo2-dev libgdal-dev libproj-dev libxml2-dev \ + libxslt1-dev python-dev php-dev libexempi-dev lcov lftp libgdal-dev ninja-build git curl \ + clang libprotobuf-c-dev protobuf-c-compiler libharfbuzz-dev libcairo2-dev librsvg2-dev && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +ARG MAPSERVER_BRANCH + +RUN git clone https://github.com/mapserver/mapserver --branch=${MAPSERVER_BRANCH} --depth=100 /src + +COPY checkout_release /tmp +RUN cd /src; /tmp/checkout_release ${MAPSERVER_BRANCH} + +WORKDIR /src/build +RUN cmake .. \ + -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr/local \ + -DWITH_CLIENT_WMS=1 \ + -DWITH_CLIENT_WFS=1 \ + -DWITH_KML=1 \ + -DWITH_SOS=1 \ + -DWITH_XMLMAPFILE=1 \ + -DWITH_POINT_Z_M=1 \ + -DWITH_CAIRO=1 \ + -DWITH_RSVG=1 + +RUN ninja install + + +FROM ubuntu:18.04 as runner LABEL maintainer="info@camptocamp.com" # let's copy a few of the settings from /etc/init.d/apache2 @@ -41,8 +77,9 @@ RUN a2enmod fcgid headers status && \ EXPOSE 80 +COPY --from=builder /usr/local/bin /usr/local/bin/ +COPY --from=builder /usr/local/lib /usr/local/lib/ COPY runtime / -COPY target /usr/local/ ENV MS_DEBUGLEVEL=0 \ MS_ERRORFILE=stderr \ diff --git a/Makefile b/Makefile index f570adf8..dbd46ebe 100644 --- a/Makefile +++ b/Makefile @@ -26,35 +26,11 @@ all: acceptance .PHONY: pull pull: - for image in `find -name Dockerfile | xargs grep --no-filename FROM | awk '{print $$2}'`; do docker pull $$image; done - -src: - git clone https://github.com/mapserver/mapserver src - -.PHONY: update-src -update-src: src - ./checkout_release.sh $(MAPSERVER_BRANCH) - -.PHONY: build-builder -build-builder: - docker build --tag $(DOCKER_IMAGE)-builder:$(DOCKER_TAG) builder - -.PHONY: build-src -build-src: build-builder update-src - mkdir -p server/build server/target - docker run --rm -e UID=$(UID) -e GID=$(GID) --volume $(ROOT)/src:/src --volume $(ROOT)/server/build:/build --volume $(ROOT)/server/target:/usr/local --volume $(HOME)/.ccache:/home/builder/.ccache $(DOCKER_IMAGE)-builder:$(DOCKER_TAG) - -.PHONY: run-builder -run-builder: build-builder update-src - mkdir -p server/build server/target - docker run -ti --rm -e UID=$(UID) -e GID=$(GID) --volume $(ROOT)/src:/src --volume $(ROOT)/server/build:/build --volume $(ROOT)/server/target:/usr/local --volume $(HOME)/.ccache:/home/builder/.ccache $(DOCKER_IMAGE)-builder:$(DOCKER_TAG) bash - -.PHONY: build-server -build-server: build-src - docker build --tag $(DOCKER_IMAGE):$(DOCKER_TAG) server + for image in `find -name Dockerfile | xargs grep --no-filename ^FROM | awk '{print $$2}'`; do docker pull $$image; done .PHONY: build -build: build-server +build: + docker build --tag=$(DOCKER_IMAGE):$(DOCKER_TAG) --target=runner --build-arg=MAPSERVER_BRANCH=$(MAPSERVER_BRANCH) . .PHONY: acceptance acceptance: build @@ -64,4 +40,4 @@ acceptance: build .PHONY: clean clean: - rm -rf acceptance_tests/junitxml/ server/build server/target + rm -rf acceptance_tests/junitxml/ diff --git a/builder/.dockerignore b/builder/.dockerignore deleted file mode 100644 index 94143827..00000000 --- a/builder/.dockerignore +++ /dev/null @@ -1 +0,0 @@ -Dockerfile diff --git a/builder/Dockerfile b/builder/Dockerfile deleted file mode 100644 index 995824e5..00000000 --- a/builder/Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -FROM ubuntu:18.04 -MAINTAINER Camptocamp - -RUN apt-get -y update && \ - LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -y bison flex python-lxml libfribidi-dev swig cmake librsvg2-dev colordiff libpq-dev libpng-dev libjpeg-dev libgif-dev libgeos-dev libgd-dev libfreetype6-dev libfcgi-dev libcurl4-gnutls-dev libcairo2-dev libgdal-dev libproj-dev libxml2-dev libxslt1-dev python-dev php-dev libexempi-dev lcov lftp libgdal-dev ninja-build git curl ccache clang libprotobuf-c-dev protobuf-c-compiler libharfbuzz-dev libcairo2-dev librsvg2-dev - -RUN curl -L "https://github.com/tianon/gosu/releases/download/1.10/gosu-amd64" > /usr/bin/gosu && \ - chmod a+x /usr/bin/gosu - -COPY . / - -ENTRYPOINT ["/entry.sh"] -CMD ["/build.sh"] diff --git a/builder/build.sh b/builder/build.sh deleted file mode 100755 index 7a35d35b..00000000 --- a/builder/build.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/bash -set -e - -cd /build - -export CXX="/usr/lib/ccache/clang++" -export CC="/usr/lib/ccache/clang" -mkdir -p /home/builder/.cmake/packages/mapserver/ - -cmake /src \ - -GNinja \ - -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX=/usr/local \ - -DWITH_CLIENT_WMS=1 \ - -DWITH_CLIENT_WFS=1 \ - -DWITH_KML=1 \ - -DWITH_SOS=1 \ - -DWITH_XMLMAPFILE=1 \ - -DWITH_POINT_Z_M=1 \ - -DWITH_CAIRO=1 \ - -DWITH_RSVG=1 - -ccache -M10G -ninja install -ccache -s diff --git a/builder/entry.sh b/builder/entry.sh deleted file mode 100755 index ac4f3476..00000000 --- a/builder/entry.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/bash -set -e - -if [ "$GID" != "0" ] -then - groupadd -r -g $GID builders - GROUP=builders -else - GROUP=root -fi - -if [ "$UID" != "0" ] -then - useradd -m builder -u $UID -g $GROUP - USER=builder - chown -R builder: /home/builder -else - USER=root -fi - -export PATH=/usr/lib/ccache:$PATH - -exec gosu $USER "$@" diff --git a/checkout_release.sh b/checkout_release similarity index 96% rename from checkout_release.sh rename to checkout_release index 9025d569..f0a72801 100755 --- a/checkout_release.sh +++ b/checkout_release @@ -1,4 +1,4 @@ -#!/bin/bash +#!/bin/bash -eux if [ "$#" -ne 1 ] then @@ -11,7 +11,6 @@ fi BRANCH=$1 TAG_PREFIX=`echo $BRANCH | sed -e 's/branch-/rel-/'` -cd src git fetch --tags LAST_RELEASE=`git log --format=%H --tags=$TAG_PREFIX* --no-walk | head -1` git checkout --detach $LAST_RELEASE diff --git a/server/runtime/docker-entrypoint b/runtime/docker-entrypoint similarity index 100% rename from server/runtime/docker-entrypoint rename to runtime/docker-entrypoint diff --git a/server/runtime/etc/apache2/conf-enabled/mapserver.conf b/runtime/etc/apache2/conf-enabled/mapserver.conf similarity index 100% rename from server/runtime/etc/apache2/conf-enabled/mapserver.conf rename to runtime/etc/apache2/conf-enabled/mapserver.conf diff --git a/server/runtime/usr/local/bin/mapserv_wrapper b/runtime/usr/local/bin/mapserv_wrapper similarity index 100% rename from server/runtime/usr/local/bin/mapserv_wrapper rename to runtime/usr/local/bin/mapserv_wrapper diff --git a/server/runtime/usr/local/bin/start-server b/runtime/usr/local/bin/start-server similarity index 100% rename from server/runtime/usr/local/bin/start-server rename to runtime/usr/local/bin/start-server diff --git a/server/.dockerignore b/server/.dockerignore deleted file mode 100644 index 6a6e01c1..00000000 --- a/server/.dockerignore +++ /dev/null @@ -1,2 +0,0 @@ -Dockerfile -build