diff --git a/.gitignore b/.gitignore index c8876880e..d4d1dce1e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ projects .idea + +shared-volume \ No newline at end of file diff --git a/Dockerfile.qgis-server-oracle.dockerfile b/Dockerfile.qgis-server-oracle.dockerfile new file mode 100644 index 000000000..b76dd12f1 --- /dev/null +++ b/Dockerfile.qgis-server-oracle.dockerfile @@ -0,0 +1,72 @@ +# Docker container with QGIS Server and Oracle support +# +# The Server FCGI socket will be started on port 9333 +# +# See qgis-server-oracle-build.sh for building instructions +# See qgis-server-oracle-run.sh for running instructions +# +# Arguments: +# DOCKER_DEPS_TAG: tag for the dependencies base image, ex: release-3_10 +# QGIS_TAG: git tag from the QGIS repo, ex: final-3_10_12 +# +# QGIS server binary is /usr/bin/qgis_mapserv.fcgi + + +ARG DOCKER_DEPS_TAG=release-3_10 + +FROM qgis/qgis3-build-deps:${DOCKER_DEPS_TAG} AS BUILDER +MAINTAINER Alessandro Pasotti + +ARG QGIS_TAG=final-3_10_12 + +LABEL Description="Docker container with QGIS Server and Oracle support" Vendor="Gis3W" Version="1.0" + +ENV LANG=C.UTF-8 + +# Clone tagged release +RUN cd / && git clone --depth 1 --branch ${QGIS_TAG} https://github.com/qgis/QGIS.git + +# Build server +RUN cd /QGIS && mkdir build && cd build && \ + cmake \ + -GNinja \ + -DUSE_CCACHE=OFF \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DOCI_INCLUDE_DIR=/instantclient_19_3/sdk/include \ + -DOCI_LIBRARY=/instantclient_19_3/libclntsh.so \ + -DWITH_DESKTOP=OFF \ + -DWITH_ANALYSIS=ON \ + -DWITH_SERVER=ON \ + -DWITH_3D=OFF \ + -DWITH_BINDINGS=ON \ + -DWITH_CUSTOM_WIDGETS=OFF \ + -DBINDINGS_GLOBAL_INSTALL=ON \ + -DWITH_STAGED_PLUGINS=ON \ + -DWITH_GRASS=OFF \ + -DWITH_ORACLE=ON \ + -DSUPPRESS_QT_WARNINGS=ON \ + -DDISABLE_DEPRECATED=ON \ + -DENABLE_TESTS=OFF \ + -DWITH_QSPATIALITE=ON \ + -DWITH_APIDOC=OFF \ + -DWITH_ASTYLE=OFF \ + -DCMAKE_PREFIX_PATH=.. \ + .. \ + && ninja install \ + && cd \ + && rm -rf /QGIS + +# Additional run-time dependencies +RUN pip3 install jinja2 pygments + +# Python paths +ENV PYTHONPATH=/usr/share/qgis/python/:/usr/share/qgis/python/plugins:/usr/lib/python3/dist-packages/qgis:/usr/share/qgis/python/qgis + +# Unprvileged user +USER www-data + +# Startup script +COPY qgis-server-oracle-command.sh /qgis-server-oracle-command.sh + +CMD ["/qgis-server-oracle-command.sh"] \ No newline at end of file diff --git a/qgis-server-oracle-build.sh b/qgis-server-oracle-build.sh new file mode 100755 index 000000000..607d216d6 --- /dev/null +++ b/qgis-server-oracle-build.sh @@ -0,0 +1,15 @@ +# Build the base QGIS Server with Oracle FCGI image +# +# Arguments: +# DOCKER_DEPS_TAG: tag for the dependencies base image, ex: release-3_10 +# QGIS_TAG: git tag from the QGIS repo, ex: final-3_10_12 + +QGIS_TAG=${QGIS_TAG:-"final-3_10_12"} +DOCKER_DEPS_TAG=${DOCKER_DEPS_TAG:-"release-3_10"} + +docker build \ + -f Dockerfile.qgis-server-oracle.dockerfile \ + --build-arg DOCKER_DEPS_TAG=${DOCKER_DEPS_TAG} \ + --build-arg QGIS_TAG=${QGIS_TAG} \ + -t qgis-server-oracle:${QGIS_TAG} \ + . diff --git a/qgis-server-oracle-command.sh b/qgis-server-oracle-command.sh new file mode 100755 index 000000000..e84a65994 --- /dev/null +++ b/qgis-server-oracle-command.sh @@ -0,0 +1,12 @@ +# Starts the QGIS server inside the container on port 9333 + +/usr/bin/xvfb-run \ + -s "-ac -screen 0 1280x1024x16 +extension GLX +render -noreset" \ + /usr/bin/spawn-fcgi \ + -u www-data \ + -g www-data \ + -d /usr/lib/qgis/ \ + -n \ + -p 9333 \ + -- \ + /usr/bin/qgis_mapserv.fcgi \ No newline at end of file diff --git a/qgis-server-oracle-run.sh b/qgis-server-oracle-run.sh new file mode 100755 index 000000000..4bb17e49e --- /dev/null +++ b/qgis-server-oracle-run.sh @@ -0,0 +1,25 @@ +# Run the QGIS Server with Oracle FCGI container +# +# Arguments: +# QGIS_TAG: git tag from the QGIS repo, ex: final-3_10_12 +# QGIS_FCGI_PORT: expose port for the FCGI socket, ex: 9333 +# +# See also -e in the docker run call below for the environment +# configuration. +# +# To check if the server is listening on the socket: +# cgi-fcgi -bind -connect 127.0.0.1:9333 + +QGIS_TAG=${QGIS_TAG:-"final-3_10_12"} +QGIS_FCGI_PORT=${QGIS_FCGI_PORT:-"9333"} + +docker run -d --init --rm --name qgis-server-oracle \ + -p ${QGIS_FCGI_PORT}:9333 \ + -e QGIS_PREFIX_PATH=/usr \ + -e QGIS_SERVER_LOG_LEVEL=1 \ + -e QGIS_SERVER_LOG_STDERR=1 \ + -e QGIS_SERVER_PARALLEL_RENDERING=1 \ + -e QGIS_SERVER_MAX_THREADS=2 \ + -e QGIS_CUSTOM_CONFIG_PATH=/tmp \ + -e QGIS_AUTH_DB_DIR_PATH=/tmp \ + qgis-server-oracle:${QGIS_TAG} \ No newline at end of file