From ddd601ba06bea69d2c191ff0a24bee51c3880f9e Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Wed, 9 Jan 2019 15:42:33 +0100 Subject: [PATCH 01/64] allow overriding the lizmap_version --- Dockerfile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 5eed65d..655e65f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,10 @@ RUN apt-get -y update \ RUN a2dismod php5; a2enmod actions; a2enmod fcgid ; a2enmod ssl; a2enmod rewrite; a2enmod headers; \ a2enmod deflate; a2enmod php5 -ENV LIZMAPVERSION master +-# this can be overriden at build time with --build-arg lizmap_version=release_3.2 +ARG lizmap_version=master +ENV LIZMAPVERSION=$lizmap_version + COPY files/ /home/files/ ADD https://github.com/3liz/lizmap-web-client/archive/$LIZMAPVERSION.zip /var/www/ From 942a52262fd59b3bc00c5df5f780b5b7ff756188 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Wed, 9 Jan 2019 16:04:35 +0100 Subject: [PATCH 02/64] fix typo --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 655e65f..e320684 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,7 @@ RUN apt-get -y update \ RUN a2dismod php5; a2enmod actions; a2enmod fcgid ; a2enmod ssl; a2enmod rewrite; a2enmod headers; \ a2enmod deflate; a2enmod php5 --# this can be overriden at build time with --build-arg lizmap_version=release_3.2 +# this can be overriden at build time with --build-arg lizmap_version=release_3.2 ARG lizmap_version=master ENV LIZMAPVERSION=$lizmap_version From 0192507393833fc8cb08803a0a184c4011c977c2 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Wed, 9 Jan 2019 16:05:49 +0100 Subject: [PATCH 03/64] fix typo --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index e320684..4224a69 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,7 @@ RUN apt-get -y update \ RUN a2dismod php5; a2enmod actions; a2enmod fcgid ; a2enmod ssl; a2enmod rewrite; a2enmod headers; \ a2enmod deflate; a2enmod php5 -# this can be overriden at build time with --build-arg lizmap_version=release_3.2 +# this can be overriden at build time with --build-arg lizmap_version=release_3_2 ARG lizmap_version=master ENV LIZMAPVERSION=$lizmap_version From 4754b2638270fdd8bff4276c97035a11d241118d Mon Sep 17 00:00:00 2001 From: Mario Baranzini Date: Mon, 25 Feb 2019 11:28:49 +0100 Subject: [PATCH 04/64] Add sqlite3 package --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 4224a69..254de93 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ MAINTAINER Julien Ancelin / docker-lizmap RUN apt-get -y update \ && apt-get -t jessie install -y python-simplejson python-software-properties xauth htop vim curl ntp ntpdate ssl-cert\ apache2 apache2-mpm-worker apache2-mpm-prefork apache2-bin apache2-data libapache2-mod-fcgid libapache2-mod-php5 \ - php5 php5-common php5-cgi php5-curl php5-cli php5-sqlite php5-gd php5-pgsql unzip\ + php5 php5-common php5-cgi php5-curl php5-cli php5-sqlite php5-gd php5-pgsql unzip sqlite3\ && apt-get clean \ && rm -r /var/lib/apt/lists/* From 351ba74c21ac60ad5719b95f24f3198ccadb3249 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Fri, 15 Mar 2019 23:07:33 +0100 Subject: [PATCH 05/64] use opengisch fork --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 5eed65d..2fa0391 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,7 @@ RUN a2dismod php5; a2enmod actions; a2enmod fcgid ; a2enmod ssl; a2enmod rewrite ENV LIZMAPVERSION master COPY files/ /home/files/ -ADD https://github.com/3liz/lizmap-web-client/archive/$LIZMAPVERSION.zip /var/www/ +ADD https://github.com/opengisch/lizmap-web-client/archive/$LIZMAPVERSION.zip /var/www/ RUN /home/files/setup.sh VOLUME ["/var/www/websig/lizmap/var" , "/home"] From e18f86a3fba3b270950ef3c3c714c5e094eda5c0 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Thu, 20 Jun 2019 12:03:03 +0200 Subject: [PATCH 06/64] add psql and nano --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 774e4b5..0088e36 100644 --- a/Dockerfile +++ b/Dockerfile @@ -5,7 +5,7 @@ MAINTAINER Julien Ancelin / docker-lizmap RUN apt-get -y update \ && apt-get -t jessie install -y python-simplejson python-software-properties xauth htop vim curl ntp ntpdate ssl-cert\ apache2 apache2-mpm-worker apache2-mpm-prefork apache2-bin apache2-data libapache2-mod-fcgid libapache2-mod-php5 \ - php5 php5-common php5-cgi php5-curl php5-cli php5-sqlite php5-gd php5-pgsql unzip sqlite3\ + php5 php5-common php5-cgi php5-curl php5-cli php5-sqlite php5-gd php5-pgsql unzip sqlite3 postgresql-client nano\ && apt-get clean \ && rm -r /var/lib/apt/lists/* From c182e727ed8631e3cc355d8e52eba9c3e23a24ec Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Thu, 20 Jun 2019 19:52:39 +0200 Subject: [PATCH 07/64] Migrated to ubuntu 18.04 and php7.2-fpm and using proxy_fcgi module Signed-off-by: Marco Bernasocchi --- Dockerfile | 45 +++++++++++++------ README.md | 2 +- docker-compose.yml | 2 +- files/{apache.conf => 000-default.conf} | 5 +++ files/{apache_https.conf => default-ssl.conf} | 0 files/index.html | 2 +- files/mod_deflate.conf | 14 +++--- files/php.conf | 6 +-- files/setup.sh | 42 +++++++---------- files/start.sh | 7 +-- 10 files changed, 70 insertions(+), 55 deletions(-) rename files/{apache.conf => 000-default.conf} (90%) rename files/{apache_https.conf => default-ssl.conf} (100%) diff --git a/Dockerfile b/Dockerfile index 0088e36..6d608b7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,26 +1,45 @@ +FROM ubuntu:bionic +MAINTAINER Marco Bernasocchi / docker-lizmap -FROM debian:jessie -MAINTAINER Julien Ancelin / docker-lizmap +ENV DEBIAN_FRONTEND noninteractive RUN apt-get -y update \ - && apt-get -t jessie install -y python-simplejson python-software-properties xauth htop vim curl ntp ntpdate ssl-cert\ - apache2 apache2-mpm-worker apache2-mpm-prefork apache2-bin apache2-data libapache2-mod-fcgid libapache2-mod-php5 \ - php5 php5-common php5-cgi php5-curl php5-cli php5-sqlite php5-gd php5-pgsql unzip sqlite3 postgresql-client nano\ + && apt-get install -y --fix-missing python-simplejson xauth htop nano curl ntp ntpdate ssl-cert software-properties-common \ + apache2 libapache2-mod-fcgid \ + php7.2-fpm php7.2 \ + php7.2-curl php7.2-cli php7.2-sqlite php7.2-gd php7.2-pgsql php7.2-xmlrpc php7.2-xml\ + sqlite3 postgresql-client \ && apt-get clean \ && rm -r /var/lib/apt/lists/* - -RUN a2dismod php5; a2enmod actions; a2enmod fcgid ; a2enmod ssl; a2enmod rewrite; a2enmod headers; \ - a2enmod deflate; a2enmod php5 # this can be overriden at build time with --build-arg lizmap_version=release_3_2 ARG lizmap_version=master ENV LIZMAPVERSION=$lizmap_version -COPY files/ /home/files/ +COPY files/qgis/ /io/qgis/ + +COPY files/apache2.conf /etc/apache2/ +COPY files/php.conf /etc/apache2/conf-available/ +COPY files/mod_deflate.conf /etc/apache2/conf-available/ +#COPY files/fcgid.conf /etc/apache2/mods-enabled/ +COPY files/default-ssl.conf /etc/apache2/sites-available/ +COPY files/000-default.conf /etc/apache2/sites-available/ +COPY files/index.html /var/www/ +COPY files/lizmapConfig.ini.php /var/www/lizmap/var/config/ +COPY files/localconfig.ini.php /var/www/lizmap/var/config/ +COPY files/start.sh /io/ +COPY files/setup.sh /io/ + +ADD https://github.com/opengisch/lizmap-web-client/archive/$LIZMAPVERSION.tar.gz /var/www/ + +RUN a2dismod mpm_prefork mpm_event; \ + a2enmod actions alias ssl rewrite headers deflate mpm_worker; \ + a2enmod fcgid proxy_fcgi; + #a2enmod fcgid; \ + #a2enconf php -ADD https://github.com/opengisch/lizmap-web-client/archive/$LIZMAPVERSION.zip /var/www/ -RUN /home/files/setup.sh +RUN /io/setup.sh -VOLUME ["/var/www/websig/lizmap/var" , "/home"] +VOLUME ["/var/www/lizmap/var" , "/io"] EXPOSE 80 443 -CMD /start.sh +CMD /io/start.sh diff --git a/README.md b/README.md index 1cbbe22..9dbe092 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ docker-compose up -d * Now config lizmap on web : ``` -http://ip/websig/lizmap/www/admin.php/config +http://ip/lizmap/www/admin.php/config ``` * change URL WMS: diff --git a/docker-compose.yml b/docker-compose.yml index 1aae8bb..18fcd62 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,7 @@ services: - 443:443 volumes: - project:/home - - var:/var/www/websig/lizmap/var + - var:/var/www/lizmap/var depends_on: - postgis - qgiserver diff --git a/files/apache.conf b/files/000-default.conf similarity index 90% rename from files/apache.conf rename to files/000-default.conf index 53071db..089a9cb 100644 --- a/files/apache.conf +++ b/files/000-default.conf @@ -34,6 +34,11 @@ Require all granted AddHandler fcgid-script .fcgi + + # 2.4.10+ can proxy to unix socket + SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/" + + # vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/files/apache_https.conf b/files/default-ssl.conf similarity index 100% rename from files/apache_https.conf rename to files/default-ssl.conf diff --git a/files/index.html b/files/index.html index 44be58a..dc60976 100644 --- a/files/index.html +++ b/files/index.html @@ -1,3 +1,3 @@ - + diff --git a/files/mod_deflate.conf b/files/mod_deflate.conf index 06e3f94..cde0f7f 100644 --- a/files/mod_deflate.conf +++ b/files/mod_deflate.conf @@ -1,14 +1,14 @@ - # Insérer le filtre + # Insert filter SetOutputFilter DEFLATE - # Netscape 4.x rencontre quelques problèmes... + # Netscape 4.x encounters some problems ... BrowserMatch ^Mozilla/4 gzip-only-text/html - # Netscape 4.06-4.08 rencontre encore plus de problèmes + # Netscape 4.06-4.08 encounter even more problems BrowserMatch ^Mozilla/4\.0[678] no-gzip - # MSIE se fait passer pour Netscape, mais tout va bien + # MSIE pretends it is Netscape, but all is well BrowserMatch \bMSIE !no-gzip !gzip-only-text/html - # Ne pas compresser les images + # Do not compress images SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary - # S'assurer que les serveurs mandataires délivrent le bon contenu + # Ensure that proxy servers deliver the right content Header append Vary User-Agent env=!dont-vary - + \ No newline at end of file diff --git a/files/php.conf b/files/php.conf index 35076e0..3ae353b 100644 --- a/files/php.conf +++ b/files/php.conf @@ -1,12 +1,12 @@ AddHandler fcgid-script .php - FCGIWrapper /usr/lib/cgi-bin/php5 .php + FcgidWrapper /usr/bin/php .php Options ExecCGI FollowSymlinks Indexes AddHandler fcgid-script .php - FCGIWrapper /usr/lib/cgi-bin/php5 .php + FcgidWrapper /usr/bin/php .php Options +ExecCGI allow from all - + \ No newline at end of file diff --git a/files/setup.sh b/files/setup.sh index b80439c..77ec350 100755 --- a/files/setup.sh +++ b/files/setup.sh @@ -5,35 +5,25 @@ mkdir /etc/apache2/ssl /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem /usr/sbin/a2ensite default-ssl -mv /home/files/php.conf /etc/apache2/conf-available/php.conf -mv /home/files/apache2.conf /etc/apache2/apache2.conf -rm -v /etc/apache2/mods-enabled/fcgid.conf -mv /home/files/fcgid.conf /etc/apache2/mods-enabled/fcgid.conf -mv /home/files/mod_deflate.conf /etc/apache2/conf-available/mod_deflate.conf -mv /home/files/apache_https.conf /etc/apache2/sites-available/default-ssl.conf -mv /home/files/apache.conf /etc/apache2/sites-available/000-default.conf -mv /home/files/index.html /var/www/index.html -mv /home/files/start.sh /start.sh -chmod 0755 /start.sh +chmod 0755 /io/start.sh # unzip lizmap master -unzip /var/www/$LIZMAPVERSION.zip -d /var/www/ -mv /var/www/lizmap-web-client-$LIZMAPVERSION/ /var/www/websig/ -rm /var/www/$LIZMAPVERSION.zip +tar xfz /var/www/$LIZMAPVERSION.tar.gz --strip-components=1 -C /var/www/ +rm /var/www/$LIZMAPVERSION.tar.gz + # Set rights & active config -chmod +x /var/www/websig/lizmap/install/set_rights.sh -/var/www/websig/lizmap/install/set_rights.sh www-data www-data -cp /home/files/lizmapConfig.ini.php /var/www/websig/lizmap/var/config/lizmapConfig.ini.php -cp /home/files/localconfig.ini.php /var/www/websig/lizmap/var/config/localconfig.ini.php -cp /var/www/websig/lizmap/var/config/profiles.ini.php.dist /var/www/websig/lizmap/var/config/profiles.ini.php +chmod +x /var/www/lizmap/install/set_rights.sh +/var/www/lizmap/install/set_rights.sh www-data www-data +cp /var/www/lizmap/var/config/profiles.ini.php.dist /var/www/lizmap/var/config/profiles.ini.php # Installer -php /var/www/websig/lizmap/install/installer.php +php /var/www/lizmap/install/installer.php + #change jauth.db -#cp /home/files/jauth.db /var/www/websig/lizmap/var/db/jauth.db +#cp /home/files/jauth.db /var/www/lizmap/var/db/jauth.db # Set rights -chown :www-data /var/www/websig/lizmap/www -R -chmod 775 /var/www/websig/lizmap/www -R -chown :www-data /var/www/websig/lizmap/var -R -chmod 775 /var/www/websig/lizmap/var -R -/var/www/websig/lizmap/install/set_rights.sh www-data www-data -cp -avr /var/www/websig/lizmap/var var/www/websig/lizmap/var_install +chown :www-data /var/www/lizmap/www -R +chmod 775 /var/www/lizmap/www -R +chown :www-data /var/www/lizmap/var -R +chmod 775 /var/www/lizmap/var -R +/var/www/lizmap/install/set_rights.sh www-data www-data +cp -ar /var/www/lizmap/var var/www/lizmap/var_install && echo "done /var/www/lizmap/var var/www/lizmap/var_install" diff --git a/files/start.sh b/files/start.sh index a854ae9..3d34643 100644 --- a/files/start.sh +++ b/files/start.sh @@ -2,17 +2,18 @@ #generate config file -VAR="/var/www/websig/lizmap/var/config" +VAR="/var/www/lizmap/var/config" if [ ! -d $VAR ]; then echo "Creating Config file in /var" - cp -avr /var/www/websig/lizmap/var_install/* /var/www/websig/lizmap/var + cp -avr /var/www/lizmap/var_install/* /var/www/lizmap/var fi #set-rights - /var/www/websig/lizmap/install/set_rights.sh www-data www-data + /var/www/lizmap/install/set_rights.sh www-data www-data # Apache gets grumpy about PID files pre-existing rm -f /var/run/apache2/apache2.pid +service php7.2-fpm start exec /usr/sbin/apachectl -D FOREGROUND From a5df6100227e8c905bbb26b454eb58c3c0af7fc6 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Thu, 20 Jun 2019 20:13:43 +0200 Subject: [PATCH 08/64] clean up conf Signed-off-by: Marco Bernasocchi --- README.md | 9 ++------- files/000-default.conf | 21 ++++++++++----------- 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 9dbe092..e0b4c6b 100644 --- a/README.md +++ b/README.md @@ -3,11 +3,6 @@ docker-lizmap ============= -![docker_lizmap](https://cloud.githubusercontent.com/assets/6421175/25778701/68e9a536-3306-11e7-9196-84247b04eb92.png) -__________________________________________________________________ - -LizMap est une solution complète de publication de cartes QGIS sur Internet. - LizMap is a complete Internet QGIS map publishing. ____________________________________________________________________ @@ -16,7 +11,7 @@ With Docker-compose: * Create a docker-compose.yml and changing the directory path if necessary (home/lizmap/lizmap_project): -https://github.com/jancelin/docker-lizmap/blob/master/docker-compose.yml +https://github.com/opengisch/docker-lizmap/blob/master/docker-compose.yml * UP @@ -33,7 +28,7 @@ http://ip/lizmap/www/admin.php/config >> http://qgiserver/cgi-bin/qgis_mapserv.fcgi -* Add **/home/** for looking your geo projects +* Add **/io/qgis/** for looking your geo projects ![config](https://cloud.githubusercontent.com/assets/6421175/11306233/e945f342-8fb0-11e5-9906-4010b9398ef1.png) diff --git a/files/000-default.conf b/files/000-default.conf index 089a9cb..dbc3d9a 100644 --- a/files/000-default.conf +++ b/files/000-default.conf @@ -27,17 +27,16 @@ # after it has been globally disabled with "a2disconf". #Include conf-available/serve-cgi-bin.conf -ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ - -Options ExecCGI FollowSymLinks -Require all granted -AddHandler fcgid-script .fcgi - - - - # 2.4.10+ can proxy to unix socket - SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/" - + ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ + + Options ExecCGI FollowSymLinks + Require all granted + AddHandler fcgid-script .fcgi + + + + # 2.4.10+ can proxy to unix socket + SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/" From 3c9978654255c103a23b8d5faf10b1efb6a2650a Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Fri, 21 Jun 2019 09:47:58 +0200 Subject: [PATCH 09/64] Remove ugly base URL Signed-off-by: Marco Bernasocchi --- Dockerfile | 3 --- files/000-default.conf | 2 +- files/index.html | 3 --- files/lizmapConfig.ini.php | 2 +- files/localconfig.ini.php | 3 ++- 5 files changed, 4 insertions(+), 9 deletions(-) delete mode 100644 files/index.html diff --git a/Dockerfile b/Dockerfile index 6d608b7..693aff0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -24,7 +24,6 @@ COPY files/mod_deflate.conf /etc/apache2/conf-available/ #COPY files/fcgid.conf /etc/apache2/mods-enabled/ COPY files/default-ssl.conf /etc/apache2/sites-available/ COPY files/000-default.conf /etc/apache2/sites-available/ -COPY files/index.html /var/www/ COPY files/lizmapConfig.ini.php /var/www/lizmap/var/config/ COPY files/localconfig.ini.php /var/www/lizmap/var/config/ COPY files/start.sh /io/ @@ -35,8 +34,6 @@ ADD https://github.com/opengisch/lizmap-web-client/archive/$LIZMAPVERSION.tar.gz RUN a2dismod mpm_prefork mpm_event; \ a2enmod actions alias ssl rewrite headers deflate mpm_worker; \ a2enmod fcgid proxy_fcgi; - #a2enmod fcgid; \ - #a2enconf php RUN /io/setup.sh diff --git a/files/000-default.conf b/files/000-default.conf index dbc3d9a..124dcac 100644 --- a/files/000-default.conf +++ b/files/000-default.conf @@ -9,7 +9,7 @@ #ServerName www.example.com ServerAdmin webmaster@localhost - DocumentRoot /var/www + DocumentRoot /var/www/lizmap/www # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. diff --git a/files/index.html b/files/index.html deleted file mode 100644 index dc60976..0000000 --- a/files/index.html +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/files/lizmapConfig.ini.php b/files/lizmapConfig.ini.php index e6ef795..62dde6c 100644 --- a/files/lizmapConfig.ini.php +++ b/files/lizmapConfig.ini.php @@ -42,5 +42,5 @@ [repository:demo] label=Demo -path="/home/" +path="/io/qgis" allowUserDefinedThemes=1 diff --git a/files/localconfig.ini.php b/files/localconfig.ini.php index a36d95f..3d4d221 100644 --- a/files/localconfig.ini.php +++ b/files/localconfig.ini.php @@ -2,7 +2,8 @@ ;for security reasons , don't remove or modify the first line ; put here configuration variables that are specific to this installation - +[urlengine] +basePath="/" ; chmod for files created by Lizmap and Jelix ;chmodFile=0664 From af87db7ef14bce84276b5e71226472ea72cfde2b Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Fri, 21 Jun 2019 15:52:48 +0200 Subject: [PATCH 10/64] more clean up Signed-off-by: Marco Bernasocchi --- Dockerfile | 17 +- docker-compose.yml | 16 +- files/fcgid.conf | 6 +- files/lizmapConfig.ini.php | 31 +- files/localconfig.ini.php | 2 +- files/php.conf | 12 - files/qgis/helloWorld.qgs | 1407 -------------------------- files/qgis/helloWorld.qgs.cfg | 319 ------ files/qgis/helloWorld.qgs.png | Bin 3925 -> 0 bytes files/qgis/test.qgs | 1788 --------------------------------- files/qgis/test.qgs.cfg | 321 ------ files/qgis/test.qgs.png | Bin 53508 -> 0 bytes 12 files changed, 44 insertions(+), 3875 deletions(-) delete mode 100644 files/php.conf delete mode 100644 files/qgis/helloWorld.qgs delete mode 100644 files/qgis/helloWorld.qgs.cfg delete mode 100644 files/qgis/helloWorld.qgs.png delete mode 100644 files/qgis/test.qgs delete mode 100644 files/qgis/test.qgs.cfg delete mode 100644 files/qgis/test.qgs.png diff --git a/Dockerfile b/Dockerfile index 693aff0..cb7c302 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,27 +16,28 @@ RUN apt-get -y update \ ARG lizmap_version=master ENV LIZMAPVERSION=$lizmap_version -COPY files/qgis/ /io/qgis/ +# setup apache modules +RUN a2dismod mpm_prefork mpm_event; \ + a2enmod actions alias ssl rewrite headers deflate mpm_worker; \ + a2enmod fcgid proxy_fcgi; +# copy config COPY files/apache2.conf /etc/apache2/ -COPY files/php.conf /etc/apache2/conf-available/ COPY files/mod_deflate.conf /etc/apache2/conf-available/ -#COPY files/fcgid.conf /etc/apache2/mods-enabled/ +COPY files/fcgid.conf /etc/apache2/mods-enabled/ COPY files/default-ssl.conf /etc/apache2/sites-available/ COPY files/000-default.conf /etc/apache2/sites-available/ COPY files/lizmapConfig.ini.php /var/www/lizmap/var/config/ COPY files/localconfig.ini.php /var/www/lizmap/var/config/ + +# copy own scripts COPY files/start.sh /io/ COPY files/setup.sh /io/ ADD https://github.com/opengisch/lizmap-web-client/archive/$LIZMAPVERSION.tar.gz /var/www/ -RUN a2dismod mpm_prefork mpm_event; \ - a2enmod actions alias ssl rewrite headers deflate mpm_worker; \ - a2enmod fcgid proxy_fcgi; - RUN /io/setup.sh VOLUME ["/var/www/lizmap/var" , "/io"] EXPOSE 80 443 -CMD /io/start.sh +ENTRYPOINT /io/start.sh diff --git a/docker-compose.yml b/docker-compose.yml index 18fcd62..9415197 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,13 +1,13 @@ version: '3.2' services: lizmap: - image: jancelin/docker-lizmap:3.2rc6 + image: opengisch/docker-lizmap:3.3rc2 restart: on-failure ports: - 80:80 - 443:443 volumes: - - project:/home + - project:/io/qgis_projects - var:/var/www/lizmap/var depends_on: - postgis @@ -18,10 +18,16 @@ services: - redis:redis qgiserver: - image: jancelin/qgis-server:2.18LTR + image: "openquake/qgis-server:3.6.3-ubuntu" + environment: + QGIS_SERVER_PARALLEL_RENDERING: "true" + QGIS_SERVER_MAX_THREADS: 4 + QGIS_SERVER_LOG_LEVEL: 0 + # needs to be defined as fcgi_param in nginx.conf + # PGSERVICEFILE: /io/.pg_service.conf restart: on-failure volumes: - - project:/home + - project:/io/qgis_projects expose: - 80 @@ -34,7 +40,7 @@ services: - 6379 postgis: - image: kartoza/postgis:10.0-2.4 + image: kartoza/postgis:11.0-2.5 ports: - 5432:5432 expose: diff --git a/files/fcgid.conf b/files/fcgid.conf index 15e08f3..248d7e5 100644 --- a/files/fcgid.conf +++ b/files/fcgid.conf @@ -1,8 +1,9 @@ # this file will overwrite default file: /etc/apache2/mods-available/fcgid.conf - - AddHandler fcgid-script .fcgi + + AddHandler fcgid-script .fcgi + FcgidConnectTimeout 300 FcgidIOTimeout 300 FcgidMaxProcessesPerClass 50 @@ -12,5 +13,4 @@ BusyTimeout 300 FcgidInitialEnv QGIS_AUTH_DB_DIR_PATH /tmp/auth/db/ FcgidInitialEnv QGIS_AUTH_PASSWORD_FILE /tmp/auth/master/qgis_auth_master_password.txt - diff --git a/files/lizmapConfig.ini.php b/files/lizmapConfig.ini.php index 62dde6c..1690637 100644 --- a/files/lizmapConfig.ini.php +++ b/files/lizmapConfig.ini.php @@ -6,25 +6,28 @@ [services] wmsServerURL="http://qgiserver/cgi-bin/qgis_mapserv.fcgi" ;List of URL available for the web client -onlyMaps=off + +; cache cacheStorageType=redis ;cacheStorageType=sqlite => store cached images in one sqlite file per repo/project/layer ;cacheStorageType=file => store cached images in one folder per repo/project/layer. The root folder is /tmp/ cacheRedisHost=redisD cacheRedisPort=6379 +cacheRedisDb=1 +cacheRedisKeyPrefix=lm cacheExpiration=0 ; default cache expiration : the default time to live of data, in seconds. ; 0 means no expiration, max : 2592000 seconds (30 days) -proxyMethod=php +cacheRootDirectory="/tmp" +; cache root directory where cache files will be stored. must be writable + +proxyMethod=curl ; php -> use the built in file_get_contents method ; curl-> use curl. It must be installed. debugMode=1 ; debug mode ; on = print debug messages in lizmap/var/log/messages.log ; off = no lizmap debug messages -cacheRootDirectory="/tmp/" -; cache root directory where cache files will be stored -; must be writable ; path to find repositories ; rootRepositories="path" @@ -32,15 +35,21 @@ ; relativeWMSPath=0 -appName=Lizmap -qgisServerVersion=2.18 +appName="Lizmap WebGIS" +qgisServerVersion=3.0 wmsMaxWidth=3000 wmsMaxHeight=3000 relativeWMSPath=0 -cacheRedisDb=1 -cacheRedisKeyPrefix=a + +onlyMaps=off +projectSwitcher=on +requestProxyEnabled=0 +requestProxyType=http +requestProxyNotForDomain="localhost,127.0.0.1" +adminContactEmail="marco@opengis.ch" +; googleAnalyticsID=UA-1234-1 [repository:demo] -label=Demo -path="/io/qgis" +label=Main +path="/io/qgis_projects/" allowUserDefinedThemes=1 diff --git a/files/localconfig.ini.php b/files/localconfig.ini.php index 3d4d221..54337d2 100644 --- a/files/localconfig.ini.php +++ b/files/localconfig.ini.php @@ -14,7 +14,7 @@ [modules] ;; uncomment it if you want to use ldap for authentication ;; see documentation to complete the ldap configuration -;ldapdao.access=1 +;ldapdao.access=2 [coordplugin_auth] diff --git a/files/php.conf b/files/php.conf deleted file mode 100644 index 3ae353b..0000000 --- a/files/php.conf +++ /dev/null @@ -1,12 +0,0 @@ - - AddHandler fcgid-script .php - FcgidWrapper /usr/bin/php .php - Options ExecCGI FollowSymlinks Indexes - - - - AddHandler fcgid-script .php - FcgidWrapper /usr/bin/php .php - Options +ExecCGI - allow from all - \ No newline at end of file diff --git a/files/qgis/helloWorld.qgs b/files/qgis/helloWorld.qgs deleted file mode 100644 index a6cbd56..0000000 --- a/files/qgis/helloWorld.qgs +++ /dev/null @@ -1,1407 +0,0 @@ - - - helloWorld - - - - - - - - - - - - - - - - - - - - - - - meters - - -14039290.93485941551625729 - -6029228.09191410336643457 - 18242521.59806802868843079 - 18375855.26019070670008659 - - 0 - 1 - - - +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs - 3857 - 3857 - EPSG:3857 - WGS 84 / Pseudo Mercator - merc - WGS84 - false - - - 0 - - - - - - - - - - brouillon_ligne20180320144651423 - brouillon_poly20180320144652507 - brouillon_point20180320144652972 - var120180320154917782 - var220180320154918240 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 139124.83343025398789905 - 6289672.19573212973773479 - 1220343.3699961700476706 - 7481673.52876138966530561 - - brouillon_ligne20180320144651423 - dbname='geopoppy' host=postgis port=5432 user='docker' password='docker' sslmode=disable key='id' srid=2154 type=LineString table="public"."brouillon_ligne" (geom) sql= - - - - brouillon_ligne - - - +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs - 145 - 2154 - EPSG:2154 - RGF93 / Lambert-93 - lcc - GRS80 - false - - - postgres - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 0 - 0 - name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - - - - - - - - - - - - - . - - 0 - . - - 0 - generatedlayout - - - - - - - - - - - - - - - - -422981.65625 - 6248613 - 1031679.125 - 7197322.5 - - brouillon_point20180320144652972 - dbname='geopoppy' host=postgis port=5432 user='docker' password='docker' sslmode=disable key='id' srid=2154 type=Point table="public"."brouillon_point" (geom) sql= - - - - brouillon_point - - - +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs - 145 - 2154 - EPSG:2154 - RGF93 / Lambert-93 - lcc - GRS80 - false - - - postgres - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 0 - 0 - name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - - - - - - - - - - - - - . - - 0 - . - - 0 - generatedlayout - - - - - - - - - - - - - - - - -155618.71886400401126593 - 6281087.12174491956830025 - 766962.29568241897504777 - 6798963.46789960004389286 - - brouillon_poly20180320144652507 - dbname='geopoppy' host=postgis port=5432 user='docker' password='docker' sslmode=disable key='id' srid=2154 type=Polygon table="public"."brouillon_poly" (geom) sql= - - - - brouillon_poly - - - +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs - 145 - 2154 - EPSG:2154 - RGF93 / Lambert-93 - lcc - GRS80 - false - - - postgres - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 0 - 0 - name - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - - - - - - - - - - - - - . - - 0 - . - - 0 - generatedlayout - - - - - - - - - - - - - - - var120180320154917782 - dbname='geopoppy' host=postgis port=5432 user='docker' password='docker' sslmode=disable key='id' table="public"."var1" sql= - - - - var1 - - - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - WGS84 - true - - - - - - - - postgres - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - 0 - generatedlayout - - - - - - - - - - - - - var220180320154918240 - dbname='geopoppy' host=postgis port=5432 user='docker' password='docker' sslmode=disable key='id' table="public"."var2" sql= - - - - var2 - - - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - WGS84 - true - - - - - - - - postgres - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - 0 - generatedlayout - - - - - - - - - - - - - - - - +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs - EPSG:3857 - 3857 - 1 - - - meters - m2 - - - false - - - -15509051.35302524827420712 - -6035619.76164815109223127 - 19712282.01623386517167091 - 18382246.92992475256323814 - - - - - - true - 255 - - - intellectualPropertyRights - false - julien.ancelin@inra.fr - 90 - - 8 - 8 - 8 - 8 - 8 - - - helloworld - Hello World - 0546821050 - - - - - - - - no conditions apply - - - - false - - - 8 - - EPSG:2154 - EPSG:3857 - - - 2 - - brouillon_ligne20180320144651423 - brouillon_poly20180320144652507 - brouillon_point20180320144652972 - - - disabled - disabled - disabled - - current_layer - - - 2 - 2 - 2 - - - to_vertex_and_segment - to_vertex_and_segment - to_vertex_and_segment - - off - 0 - - 0.000000 - 0.000000 - 0.000000 - - - - - - Julien ANCELIN - INRA - - - - - - - - - false - - author - - 2 - true - MU - - - 0 - 255 - 255 - 255 - 255 - 255 - 255 - - - NONE - - - - brouillon_ligne20180320144651423 - brouillon_point20180320144652972 - brouillon_poly20180320144652507 - var120180320154917782 - var220180320154918240 - - - true - false - - - diff --git a/files/qgis/helloWorld.qgs.cfg b/files/qgis/helloWorld.qgs.cfg deleted file mode 100644 index 8c9e8c3..0000000 --- a/files/qgis/helloWorld.qgs.cfg +++ /dev/null @@ -1,319 +0,0 @@ -{ - "layers": { - "brouillon_poly": { - "abstract": "", - "displayInLegend": "True", - "baseLayer": "False", - "noLegendImage": "False", - "id": "brouillon_poly20180320144652507", - "title": "polygones", - "singleTile": "True", - "geometryType": "polygon", - "groupAsLayer": "False", - "popupTemplate": "", - "popup": "False", - "popupDisplayChildren": "False", - "clientCacheExpiration": 300, - "link": "", - "extent": [ - -155618.718864, - 6281087.12174, - 766962.295682, - 6798963.4679 - ], - "toggled": "True", - "crs": "EPSG:2154", - "name": "brouillon_poly", - "cached": "False", - "type": "layer", - "maxScale": 1000000000000, - "popupSource": "lizmap", - "imageFormat": "image/png", - "minScale": 1 - }, - "brouillon_point": { - "abstract": "", - "displayInLegend": "True", - "baseLayer": "False", - "noLegendImage": "False", - "id": "brouillon_point20180320144652972", - "title": "points", - "singleTile": "True", - "geometryType": "point", - "groupAsLayer": "False", - "popupTemplate": "", - "popup": "False", - "popupDisplayChildren": "False", - "clientCacheExpiration": 300, - "link": "", - "extent": [ - -422981.65625, - 6248613.0, - 1031679.125, - 7197322.5 - ], - "toggled": "True", - "crs": "EPSG:2154", - "name": "brouillon_point", - "cached": "False", - "type": "layer", - "maxScale": 1000000000000, - "popupSource": "lizmap", - "imageFormat": "image/png", - "minScale": 1 - }, - "brouillon_ligne": { - "abstract": "", - "displayInLegend": "True", - "baseLayer": "False", - "noLegendImage": "False", - "id": "brouillon_ligne20180320144651423", - "title": "lignes", - "singleTile": "True", - "geometryType": "line", - "groupAsLayer": "False", - "popupTemplate": "", - "popup": "False", - "popupDisplayChildren": "False", - "clientCacheExpiration": 300, - "link": "", - "extent": [ - 139124.83343, - 6289672.19573, - 1220343.37, - 7481673.52876 - ], - "toggled": "True", - "crs": "EPSG:2154", - "name": "brouillon_ligne", - "cached": "False", - "type": "layer", - "maxScale": 1000000000000, - "popupSource": "lizmap", - "imageFormat": "image/png", - "minScale": 1 - }, - "var1": { - "abstract": "", - "displayInLegend": "True", - "baseLayer": "False", - "noLegendImage": "False", - "id": "var120180320154917782", - "title": "var1", - "singleTile": "True", - "geometryType": "none", - "groupAsLayer": "False", - "popupTemplate": "", - "popup": "False", - "popupDisplayChildren": "False", - "clientCacheExpiration": 300, - "link": "", - "extent": [ - 1.79769313486e+308, - 1.79769313486e+308, - -1.79769313486e+308, - -1.79769313486e+308 - ], - "toggled": "True", - "crs": "EPSG:4326", - "name": "var1", - "cached": "False", - "type": "layer", - "maxScale": 1000000000000, - "popupSource": "lizmap", - "imageFormat": "image/png", - "minScale": 1 - }, - "var2": { - "abstract": "", - "displayInLegend": "True", - "baseLayer": "False", - "noLegendImage": "False", - "id": "var220180320154918240", - "title": "var2", - "singleTile": "True", - "geometryType": "none", - "groupAsLayer": "False", - "popupTemplate": "", - "popup": "False", - "popupDisplayChildren": "False", - "clientCacheExpiration": 300, - "link": "", - "extent": [ - 1.79769313486e+308, - 1.79769313486e+308, - -1.79769313486e+308, - -1.79769313486e+308 - ], - "toggled": "True", - "crs": "EPSG:4326", - "name": "var2", - "cached": "False", - "type": "layer", - "maxScale": 1000000000000, - "popupSource": "lizmap", - "imageFormat": "image/png", - "minScale": 1 - } - }, - "attributeLayers": { - "brouillon_poly": { - "hiddenFields": "", - "hideAsChild": "False", - "hideLayer": "False", - "order": 1, - "layerId": "brouillon_poly20180320144652507", - "pivot": "False", - "primaryKey": "id" - }, - "brouillon_point": { - "hiddenFields": "", - "hideAsChild": "False", - "hideLayer": "False", - "order": 2, - "layerId": "brouillon_point20180320144652972", - "pivot": "False", - "primaryKey": "id" - }, - "brouillon_ligne": { - "hiddenFields": "", - "hideAsChild": "False", - "hideLayer": "False", - "order": 0, - "layerId": "brouillon_ligne20180320144651423", - "pivot": "False", - "primaryKey": "id" - }, - "var1": { - "hiddenFields": "", - "hideAsChild": "False", - "hideLayer": "False", - "order": 3, - "layerId": "var120180320154917782", - "pivot": "False", - "primaryKey": "id" - }, - "var2": { - "hiddenFields": "", - "hideAsChild": "False", - "hideLayer": "False", - "order": 4, - "layerId": "var220180320154918240", - "pivot": "False", - "primaryKey": "id" - } - }, - "options": { - "geolocation": "True", - "projection": { - "proj4": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs", - "ref": "EPSG:3857" - }, - "popupLocation": "dock", - "initialExtent": [ - -14039290.9349, - -7180207.26282, - 18242521.5981, - 19526834.4311 - ], - "lineTolerance": 10, - "tmAnimationFrameLength": 1000, - "measure": "True", - "osmMapnik": "True", - "startupBaselayer": "osm-stamen-toner", - "hideGroupCheckbox": "True", - "googleSatellite": "True", - "limitDataToBbox": "True", - "zoomHistory": "True", - "polygonTolerance": 5, - "osmStamenToner": "True", - "mapScales": [ - 2000, - 5000, - 10000, - 25000, - 50000, - 100000, - 250000, - 500000, - 1000000, - 100000000 - ], - "bbox": [ - -15509051.353025248, - -6035619.761648151, - 19712282.016233865, - 18382246.929924753 - ], - "hideHeader": "True", - "googleStreets": "True", - "maxScale": 100000000, - "tmTimeFrameType": "seconds", - "tmTimeFrameSize": 10, - "googleTerrain": "True", - "minScale": 2000, - "pointTolerance": 25 - }, - "editionLayers": { - "brouillon_poly": { - "acl": "", - "geometryType": "polygon", - "order": 1, - "capabilities": { - "modifyGeometry": "True", - "modifyAttribute": "True", - "createFeature": "True", - "deleteFeature": "True" - }, - "layerId": "brouillon_poly20180320144652507" - }, - "brouillon_point": { - "acl": "", - "geometryType": "point", - "order": 2, - "capabilities": { - "modifyGeometry": "True", - "modifyAttribute": "True", - "createFeature": "True", - "deleteFeature": "True" - }, - "layerId": "brouillon_point20180320144652972" - }, - "brouillon_ligne": { - "acl": "", - "geometryType": "line", - "order": 0, - "capabilities": { - "modifyGeometry": "True", - "modifyAttribute": "True", - "createFeature": "True", - "deleteFeature": "True" - }, - "layerId": "brouillon_ligne20180320144651423" - }, - "var1": { - "acl": "", - "geometryType": "none", - "order": 3, - "capabilities": { - "modifyGeometry": "True", - "modifyAttribute": "True", - "createFeature": "True", - "deleteFeature": "False" - }, - "layerId": "var120180320154917782" - }, - "var2": { - "acl": "", - "geometryType": "none", - "order": 4, - "capabilities": { - "modifyGeometry": "True", - "modifyAttribute": "True", - "createFeature": "True", - "deleteFeature": "False" - }, - "layerId": "var220180320154918240" - } - } -} \ No newline at end of file diff --git a/files/qgis/helloWorld.qgs.png b/files/qgis/helloWorld.qgs.png deleted file mode 100644 index c5711e1ab36dd8c5a219be1542893a50010d96dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3925 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 - - test - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - meters - - 434152.38028670288622379 - 6567490.60662522912025452 - 446014.38216976262629032 - 6577978.04176649451255798 - - 0 - 1 - - - +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs - 145 - 2154 - EPSG:2154 - RGF93 / Lambert-93 - lcc - GRS80 - false - - - 0 - - - - - - - - - - inventaire_gps20180319151749951 - br_pt20180319151749959 - analyse_messicole20180319151749966 - code_culture20180319151749975 - t_plante20180319151749982 - t_terrain20180319151749990 - operateur_utilisateur20180319151749998 - classe_quantite20180319151750007 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 434213.07018819398945197 - 6567399.50550524983555079 - 447845.13077170000178739 - 6577951.68186085019260645 - - analyse_messicole20180319151749966 - dbname='geopoppy' host=postgis port=5432 user='docker' password='docker' sslmode=disable key='ig_id' srid=2154 type=Point table="public"."analyse_messicole" (geom) sql= - analyse messicole - - - - analyse_messicole - - - +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs - 145 - 2154 - EPSG:2154 - RGF93 / Lambert-93 - lcc - GRS80 - false - - - postgres - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 0 - 20 - ig_id - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - - - - - - ig_id - - - - - - - - . - - 0 - . - - 0 - generatedlayout - - - - - - - - - - - - - - - 380921.21483995101880282 - 6569661.19458257965743542 - 380921.21483995101880282 - 6569661.19458257965743542 - - br_pt20180319151749959 - dbname='geopoppy' host=postgis port=5432 user='docker' password='docker' sslmode=disable key='id_br_pt' srid=2154 type=Point table="public"."br_pt" (geom) sql= - brouillon point - - - - br_pt - - - +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs - 145 - 2154 - EPSG:2154 - RGF93 / Lambert-93 - lcc - GRS80 - false - - - postgres - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 0 - 0 - id_br_pt - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - - - - - - - id_br_pt - - - - - - - - . - - 0 - . - - 0 - generatedlayout - - - - - - - - - - - - - - - classe_quantite20180319151750007 - dbname='geopoppy' host=postgis port=5432 user='docker' password='docker' sslmode=disable key='cla_id' table="public"."classe_quantite" sql= - - - - classe_quantite - - - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - WGS84 - true - - - - postgres - - - - - - - - - - - - - - - - - - - - - . - - - - - - - - - - - - - - . - - 0 - . - - 0 - generatedlayout - - - - - - - - - - - - COALESCE("cla_id", '<NULL>') - - - code_culture20180319151749975 - dbname='geopoppy' host=postgis port=5432 user='docker' password='docker' sslmode=disable key='ocs_id' table="public"."code_culture" sql= - - - - code_culture - - - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - WGS84 - true - - - - postgres - - - - - - - - - - - - - - - - - - . - - - - - - - - - - - - . - - 0 - . - - 0 - generatedlayout - - - - - - - - - - - - - - - 434144.90625 - 6567346.5 - 447913.3125 - 6578005 - - inventaire_gps20180319151749951 - dbname='geopoppy' host=postgis port=5432 user='docker' password='docker' sslmode=disable key='ig_id' srid=2154 type=Point table="public"."inventaire_gps" (geom) sql= - inventaire messicole - - - - inventaire_gps - - - +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs - 145 - 2154 - EPSG:2154 - RGF93 / Lambert-93 - lcc - GRS80 - false - - - postgres - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 0 - 0 - ig_id - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - - - - - - - - - - - ig_buffer - ig_id - gid - - - - - - - - . - - 0 - . - - 0 - generatedlayout - - - - - - - - - - - - - - - - - - - operateur_utilisateur20180319151749998 - dbname='geopoppy' host=postgis port=5432 user='docker' password='docker' sslmode=disable key='ope_id' table="public"."operateur_utilisateur" sql= - - - - operateur_utilisateur - - - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - WGS84 - true - - - - postgres - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - - - - - - - - - - - - - - - . - - 0 - . - - 0 - generatedlayout - - - - - - - - - - - - - - - - - - t_plante20180319151749982 - dbname='geopoppy' host=postgis port=5432 user='docker' password='docker' sslmode=disable key='id_plante' table="public"."t_plante" sql= - - - - t_plante - - - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - WGS84 - true - - - - postgres - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - - - - - - - - - - - - - - - - - - - - - - - - . - - 0 - . - - 0 - generatedlayout - - - - - - - - - - - - - - - - - - - - - - - - - - - t_terrain20180319151749990 - dbname='geopoppy' host=postgis port=5432 user='docker' password='docker' sslmode=disable key='id_terrain' table="public"."t_terrain" sql= - - - - t_terrain - - - +proj=longlat +datum=WGS84 +no_defs - 3452 - 4326 - EPSG:4326 - WGS 84 - longlat - WGS84 - true - - - - postgres - - - - - - - - - - - - - - - - - - . - - - - - - - - - - - - . - - 0 - . - - 0 - generatedlayout - - - - - - - - - - - - - - - - - +proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs - EPSG:2154 - 145 - 1 - - - meters - m2 - - - false - - - 426425.90567436936544254 - 6558041.37829950731247663 - 456633.38487184763653204 - 6584748.41999341454356909 - - - - - - true - 255 - - - None - false - julien.ancelin@inra.fr - 90 - - 8 - 8 - 8 - 8 - 8 - 8 - - - test - test - 0546821050 - - - - - - - - conditions unknown - - - - false - - - 8 - - - EPSG:2154 - EPSG:4326 - EPSG:3857 - - - 2 - - analyse_messicole20180319151749966 - br_pt20180319151749959 - inventaire_gps20180319151749951 - - - disabled - disabled - disabled - - current_layer - - - 2 - 2 - 2 - - - to_vertex_and_segment - to_vertex_and_segment - to_vertex_and_segment - - off - 0 - - 0.000000 - 0.000000 - 0.000000 - - - - - - Julien Ancelin - INRA - - - - - - - - - false - - - - 2 - true - MU - - - 0 - 255 - 255 - 255 - 255 - 255 - 255 - - - NONE - - Données test usine logiciel docker-lizmap avec db postgresql/postgis - - br_pt20180319151749959 - classe_quantite20180319151750007 - code_culture20180319151749975 - operateur_utilisateur20180319151749998 - t_plante20180319151749982 - t_terrain20180319151749990 - - - true - false - - - diff --git a/files/qgis/test.qgs.cfg b/files/qgis/test.qgs.cfg deleted file mode 100644 index ee051bf..0000000 --- a/files/qgis/test.qgs.cfg +++ /dev/null @@ -1,321 +0,0 @@ -{ - "layers": { - "analyse_messicole": { - "abstract": "", - "displayInLegend": "True", - "baseLayer": "False", - "noLegendImage": "False", - "id": "analyse_messicole20180319151749966", - "title": "analyse messicole", - "singleTile": "True", - "geometryType": "point", - "groupAsLayer": "False", - "popupTemplate": "", - "popup": "False", - "popupDisplayChildren": "False", - "clientCacheExpiration": 300, - "link": "", - "extent": [ - 434213.070188, - 6567399.50551, - 447845.130772, - 6577951.68186 - ], - "toggled": "True", - "crs": "EPSG:2154", - "name": "analyse_messicole", - "cached": "False", - "type": "layer", - "maxScale": 1000000000000, - "popupSource": "lizmap", - "imageFormat": "image/png", - "minScale": 1 - }, - "operateur_utilisateur": { - "abstract": "", - "displayInLegend": "True", - "baseLayer": "False", - "noLegendImage": "False", - "id": "operateur_utilisateur20180319151749998", - "title": "operateur_utilisateur", - "singleTile": "True", - "geometryType": "none", - "groupAsLayer": "False", - "popupTemplate": "", - "popup": "False", - "popupDisplayChildren": "False", - "clientCacheExpiration": 300, - "link": "", - "extent": [ - 1.79769313486e+308, - 1.79769313486e+308, - -1.79769313486e+308, - -1.79769313486e+308 - ], - "toggled": "True", - "crs": "EPSG:4326", - "name": "operateur_utilisateur", - "cached": "False", - "type": "layer", - "maxScale": 1000000000000, - "popupSource": "lizmap", - "imageFormat": "image/png", - "minScale": 1 - }, - "t_plante": { - "abstract": "", - "displayInLegend": "True", - "baseLayer": "False", - "noLegendImage": "False", - "id": "t_plante20180319151749982", - "title": "t_plante", - "singleTile": "True", - "geometryType": "none", - "groupAsLayer": "False", - "popupTemplate": "", - "popup": "False", - "popupDisplayChildren": "False", - "clientCacheExpiration": 300, - "link": "", - "extent": [ - 1.79769313486e+308, - 1.79769313486e+308, - -1.79769313486e+308, - -1.79769313486e+308 - ], - "toggled": "True", - "crs": "EPSG:4326", - "name": "t_plante", - "cached": "False", - "type": "layer", - "maxScale": 1000000000000, - "popupSource": "lizmap", - "imageFormat": "image/png", - "minScale": 1 - }, - "classe_quantite": { - "abstract": "", - "displayInLegend": "True", - "baseLayer": "False", - "noLegendImage": "False", - "id": "classe_quantite20180319151750007", - "title": "classe_quantite", - "singleTile": "True", - "geometryType": "none", - "groupAsLayer": "False", - "popupTemplate": "", - "popup": "False", - "popupDisplayChildren": "False", - "clientCacheExpiration": 300, - "link": "", - "extent": [ - 1.79769313486e+308, - 1.79769313486e+308, - -1.79769313486e+308, - -1.79769313486e+308 - ], - "toggled": "True", - "crs": "EPSG:4326", - "name": "classe_quantite", - "cached": "False", - "type": "layer", - "maxScale": 1000000000000, - "popupSource": "lizmap", - "imageFormat": "image/png", - "minScale": 1 - }, - "t_terrain": { - "abstract": "", - "displayInLegend": "True", - "baseLayer": "False", - "noLegendImage": "False", - "id": "t_terrain20180319151749990", - "title": "t_terrain", - "singleTile": "True", - "geometryType": "none", - "groupAsLayer": "False", - "popupTemplate": "", - "popup": "False", - "popupDisplayChildren": "False", - "clientCacheExpiration": 300, - "link": "", - "extent": [ - 1.79769313486e+308, - 1.79769313486e+308, - -1.79769313486e+308, - -1.79769313486e+308 - ], - "toggled": "True", - "crs": "EPSG:4326", - "name": "t_terrain", - "cached": "False", - "type": "layer", - "maxScale": 1000000000000, - "popupSource": "lizmap", - "imageFormat": "image/png", - "minScale": 1 - }, - "code_culture": { - "abstract": "", - "displayInLegend": "True", - "baseLayer": "False", - "noLegendImage": "False", - "id": "code_culture20180319151749975", - "title": "code_culture", - "singleTile": "True", - "geometryType": "none", - "groupAsLayer": "False", - "popupTemplate": "", - "popup": "False", - "popupDisplayChildren": "False", - "clientCacheExpiration": 300, - "link": "", - "extent": [ - 1.79769313486e+308, - 1.79769313486e+308, - -1.79769313486e+308, - -1.79769313486e+308 - ], - "toggled": "True", - "crs": "EPSG:4326", - "name": "code_culture", - "cached": "False", - "type": "layer", - "maxScale": 1000000000000, - "popupSource": "lizmap", - "imageFormat": "image/png", - "minScale": 1 - }, - "br_pt": { - "abstract": "", - "displayInLegend": "True", - "baseLayer": "False", - "noLegendImage": "False", - "id": "br_pt20180319151749959", - "title": "brouillon point", - "singleTile": "True", - "geometryType": "point", - "groupAsLayer": "False", - "popupTemplate": "", - "popup": "False", - "popupDisplayChildren": "False", - "clientCacheExpiration": 300, - "link": "", - "extent": [ - 380921.21484, - 6569661.19458, - 380921.21484, - 6569661.19458 - ], - "toggled": "True", - "crs": "EPSG:2154", - "name": "br_pt", - "cached": "False", - "type": "layer", - "maxScale": 1000000000000, - "popupSource": "lizmap", - "imageFormat": "image/png", - "minScale": 1 - }, - "inventaire_gps": { - "abstract": "", - "displayInLegend": "True", - "baseLayer": "False", - "noLegendImage": "False", - "id": "inventaire_gps20180319151749951", - "title": "inventaire messicole", - "singleTile": "True", - "geometryType": "point", - "groupAsLayer": "False", - "popupTemplate": "", - "popup": "False", - "popupDisplayChildren": "False", - "clientCacheExpiration": 300, - "link": "", - "extent": [ - 434144.90625, - 6567346.5, - 447913.3125, - 6578005.0 - ], - "toggled": "True", - "crs": "EPSG:2154", - "name": "inventaire_gps", - "cached": "False", - "type": "layer", - "maxScale": 1000000000000, - "popupSource": "lizmap", - "imageFormat": "image/png", - "minScale": 1 - } - }, - "editionLayers": { - "br_pt": { - "acl": "", - "geometryType": "point", - "order": 0, - "capabilities": { - "modifyGeometry": "True", - "modifyAttribute": "True", - "createFeature": "True", - "deleteFeature": "True" - }, - "layerId": "br_pt20180319151749959" - }, - "inventaire_gps": { - "acl": "", - "geometryType": "point", - "order": 1, - "capabilities": { - "modifyGeometry": "True", - "modifyAttribute": "True", - "createFeature": "True", - "deleteFeature": "True" - }, - "layerId": "inventaire_gps20180319151749951" - } - }, - "options": { - "geolocation": "True", - "projection": { - "proj4": "+proj=lcc +lat_1=49 +lat_2=44 +lat_0=46.5 +lon_0=3 +x_0=700000 +y_0=6600000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs", - "ref": "EPSG:2154" - }, - "popupLocation": "dock", - "initialExtent": [ - 426425.90567436937, - 6558041.378299507, - 456633.38487184764, - 6584748.419993415 - ], - "lineTolerance": 10, - "tmAnimationFrameLength": 1000, - "measure": "True", - "osmMapnik": "True", - "startupBaselayer": "osm-mapnik", - "hideGroupCheckbox": "True", - "googleSatellite": "True", - "zoomHistory": "True", - "polygonTolerance": 5, - "osmStamenToner": "True", - "mapScales": [ - 5000, - 10000, - 25000, - 50000, - 100000 - ], - "bbox": [ - 426425.90567436937, - 6558041.378299507, - 456633.38487184764, - 6584748.419993415 - ], - "hideHeader": "True", - "maxScale": 100000, - "tmTimeFrameType": "seconds", - "tmTimeFrameSize": 10, - "minScale": 5000, - "pointTolerance": 25 - } -} \ No newline at end of file diff --git a/files/qgis/test.qgs.png b/files/qgis/test.qgs.png deleted file mode 100644 index f1b0d71d990372dc3fbff47df3c22d61ae11bd1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 53508 zcmeEti96Ko7x!2)ibmU$WNWb`TM@?IN(e>S2W1N}laaw#Q)zk7Gh>Tklr33H_B}d~aC!UPF3$xp@0RuKBp!_jPeTg>mE__k#@Ob`M& z1u?jO<*xtm;wbjtOiHl$292JooG@A;CuuKfct)}+dgzit#F;ZP*&Ioi9wwLGd~?j8 zm-9yWM$A{4u1hzDL|;w!7(Zw!y>1;} zE+P5f8JE}C@ptrE(>*w)JvBwWShGqq0nH2wYk1ozS;0zHrUci~XaT7XoM7eu{}041 zw>Htt;g)*b-k_V=0$(8u zeJ?R?vYIa;E>ZC=BiScLx3-gpTg;f&3y@U1cf!@yVLt?7wK>7MYUp8RZ;-My{xIZx z3+?7=U+``+O_FJdQ^Qr`r)_Z5^ukd27D2pSC3SC0IsIhKr70Co4p9gMzAtozW3Q%J zPh9a9)6L7n-e`3sX6@gJ=dr6_-oo4(j$j~=M2_`dY4O)>HyC@T(zqb?i`>$1sZD0^|s4ovbADPYGp z&|pAG#B}2>E>yaONJ7mAhRg(R)lq|ZKKZ%r$8WzesC_%hTP6_8&Fu?;%w7+EeCajy zmp+l!yVY+smbqUNLtJcE=@TbKH;nZE3RCDfdxa>;2yH^R4+l zpU22Ob!nt_i*CYX<9|}r1Dxy)yLqoZ+t`}VbN(f?XX)AD;9=i^PcI}ca6HJ~*|RkZ zm1r@Qawkl}z_s-~ShQzup9HboXQu1&R?~pR&^gH%``YdL_az}3k~^Aiuf%@~NHX6T z=vcJQ^SHdphj!8KDWWDBaYj971K$L%vjEpc!GO!Gt&>j1g;N9Bz=sjH_Qj4ql zqpYk1*;2u{Fy`A*G6t9`aSnIq3;FYMp&NAzfnwOj@ z)~BAUD=E2WVb~IB)Y1wS*SamZ_0GPqqOWvRX6IrZZc+<SFJ%2Nfihj zy2A_SGkFY!JfnAJWJs+u#?o`E@w&umBZFPCRwTOI^K#+5OY;G~LtPvYQoTRfimA_7 zJin**c{|~Tz?=a-{A#`R4uliJJFh6v$ZQT}#YrJbJyySUP&>x0b;o63ZO%9J!iv)) zV377GMp;=~)yPQmm$lN`w`N4*mw(IJFp|vY65rI@9%{F|-nWcW)e_}`l=pfX)*qot zx_|w{-b{I}0HU_KOn-YlKR;6A`F2lX)ShNp-Ns^^?A8mpsx|}f`Lqb&PPtcQrKN_t zE#|#??@~S{-7*j})j`WsDOFDI6k+IPfb=)Seek2l3n37r-z(Mk3)L5QVz zA&Xt%C1`=$Cc=Y*J#+KoaLrOMq^9lExZdG*4z|U@DwKciJ@>go5dlH!=&hyw_yFrp z!Y9*cCC%NLC434!u-V}sP1b~W$j$xiosxcL=I5`r=ftRMzPhaw>}zBAb-7KC%1LP2Hg{ySbPVpt@U-3Ptd|` ziLv&*`8gW?foSx3T*NgTrU8+AFD-3?(2bU)IM7Hw`+)mgJcl!7g(#_pO=+<uBVx%{}GMgEOo#rQ`3oZ#Qs!nvfz9U+N|BeI_Nr8ci{hncU;4#fZRKky7)jvP1a zG3QAkB~^Oxa_QF z^eJ(b4M$f^!r-;W&0hm zl~tG?Ie!|tmFvZPA#fM9vNFrN9ElvdD`Tg0$L-pY+YaNTgEL{plolNb;e)mHu#SU= zA)YXDV)}D7GAnkvLlHSWHI6oRpSb_D{)cAq<>349gEiF;q%;7NU5Fg}HGJN9SzE*S zg09UWqMxT(Qj)${UEGoY?fhX8Vu4*XeQo3MWmALJwyOX&Mr4kO)BZidgvp>)x>t;D z@HKek6r(kqQGDl|AZcJUJB-3d1*GwDd=I4_MbkZ`jX~SC#yOp(C-?9~dq<-;_ z-APEI%r|vHIZ|Rimcum$IG5ZQDXl^2jsLt?PcorPTUd@Rj+I5QNS#Pcewayvry&Gb zv^}bvhC^PLTJ%+pV5@M=3aWkdQhmF^J=jrvSBRakHJ=Hg%BfawXIu8R9oBE80SbuPg>!C*6OePM|LNO`cKR&CKk6# za&#LMvtkpT`GTmO;0|s~{Hol4sl`dW;=dAl)Az=IH}#>t0n1OE|3*h6Yc5W9eYE=) z+N5Xgi0=C0dS2ds%7tsXpT^-UnU=mJkOsocmF&m7b(!-YbLI>Cw7@lMEJK*`^l0qj zIWFLLR3Ih|*h3;F$F63u#`7_qjGnXJM88hZ2R258VcHjE4 zVdjy#xfzv*{A$QuOih-V{}HgnmRE16XNi^ZarZi}I5q`esH6#Y-EUGcgw&tu(bg6H zrr!RXCLtuD_o*ST_X^Z;IcTvp?)*z)sirV8mogkQJw$EgET$Ra6tib*?%ad|x0maV z505Dr|7)bF85v`SJ|WT`M>JU#zy)RIUUcOE7eFTDd|MnIdDeb0N3XBj4&6DN=mmQX zahx?)a0=aMjZ<2p5@4g~MA^c)H%xn%Fy{LRSbh5@$p6f_@4Ktm=TD+-JHEOxR8%^3 zF!ur+cemrXbUTR#25Q@P6cyDk!Ca%v$sCFM$H&G>KT+EonbVY!XXr#*K>-#N>_-YP zwQEu|(_Q9b`2ORqQ4)i&?Tk>8fJVC#`r28Q| zM;TieLVde9;3{m^N|7KIb#C*E>gagk9ARi0E(}I*7LbR?A>c76*c+P9tw&EQK)$Qb z3Gn!U4*50r6>uRshkA^9JvIjRIbE!OAu@9ngSR@*g>DD0U7l~<@Cz9H_*FZ`ERqig$=cvTK>kwmTUS>c*D%;7>i0NT{~7Z8*~mb_DF4b_6^byDrQ z^7kG;s}I6kZ!lxMgA{W!yifNSI#F#SjjR2=5l}=4(@x4hmy=N;C!59>&LncxKmGC@ zQ~}3t2Hc>C%x+LD_e09XO+1K*N=i|N+M3{KZ{vre@1mC-T}f+O2(i6iQF$rUV_YkG zY%?yP5Qr~4N!yyO5c5%$s$KNJ#Pl_b2sKr8# zN5VAf35k9Ws%Dn>L>se1`gPEbSB+N#TmVys9o<-3S~A0Hsb*po5*2%D)+g`Vor5k< zQp{IvTOn^6k6^;o>8(wArvE@bs_Yqk3WL454i$CO(+>PuOP5Y|P1AVu&DCduV_f@R z3oZ-~gb+p3#S}0bcS3THya~EdFcj#lCLXvNe{CX+1)~6+7@HBKPugN2%zqUEN#d2FskwU3PrpYM(T$~XHayr|PG#$1UWN2t+A5GNE7jv9ag&-RhAyY8oLE$L0x&sYyxF zIw5B%Pe|eT?zlJeGF);xqP}5HE6W>x?l>(C7h(mf77lX7MDbE~YQ=x+^l$2@2O(zc zOfjL8F5E`RaVv0Hsy@6?|7z>7BpXa;leFFke=*vH7C0b7ioK}2g~~Bmv;#*;;YTg- z+m(N9jHs@vL5S5g<2FK3_JPTJtlu)}eTE(QPP@)w^>O=&?>mNui|@lF?*q4Sm47Xn zdD{UP@~y^!7N6CVELky-W0LTp*0KNb)f>^z>Wr4`U+}hfbdy1o# znQ%U#o=Bb5mRxHDCKiJF#B=ea5Vvob3j?^(CwD+gUGiU=!0e}zb6GKFvc?_yI#1+f zWo!HEbLwQ)x!LLYChm9Y%jtBGx@u7{LhUGjSw`iF23!$TbmCBqU9BCFtfsRB(6Ys{ zv>>08&r@30v4TTMKjS0@k7SoOe(AabjUQwCQlI7|#B#89pna(=K=Dnzz2m`tU4Xo7 zF0iUA=uh;6ycQn@(TKBI?9X@!5NWQZy4AUd>W9WM9JKt2_6|1<@Ufjg)(;$ym0Yg> z#+n_l2ypUj<1$zdQ6~4<`ESRgVC^fyaYyPu6a!kq5k^F&|7-R;#+isvkx`saZ9GF4 zfjNFZ!kF0r70EGMgk}YYTDQ65 z?Foo~+QXUVtI=obS3iFjO&md`@-ve8C=fZv%XN9YMM1t@;T68IB=vu3KH1&cP*)p# z@@qhl_2h0zN(k?4y@NFU{K~76ZdH{1Lkd^_lf(uR1VX48 zjDy7EfoaH_KV$#6$CoLm932U-*obF;e?g5Kz3d!&vgmegCU+45Jj-=Bd4s@J6f|bZ z3DDt6YR>-GJU2$`!MXq|b}p5RZ~D`bdLJJ=UwfSH=SmxelBEJeRAO9-s`yUdljo4x zcT^FOgNt+R%e(9rDlH_-6S7m;%MqYR8fVG#aUM?vE3qr@dlIVm54`7jN8G_gB#n;( zxUIc%&tyNuiW4bakvcLZ^H=1iU@aX_@8J8YQ%;UlI_@8efVFEWcdBa<2CeoVko#3N z(&?vybXH68U~lDU2+(Rlo2_v+;sF^IeI93u91fGhpVKkAH}@Q{#uSnG9T?PcwhshG zj>Ra~@{Wx`$8&wm>U(LwV_b`s?w^TjNk=PY{LDyu;$dIa3{&Nqj;*uVt=zJ?o_c)3-cOz($; z-Ee)Sc`6aK-}phOK*EX{HzXlI{UjbO%NB^snmt;#^a%%fGmVtxNCPS-=*OBF{SWQ$ z!f{7{zb_nJ)TMk>6(2H|S%An93eR&mvY)4Hsk1gMe*<#7VtzX=Q={l@ z$ed@{D!SuG(7b7_nDl*4SUSXHAOR51kA_oqh2v$f5}_b~Pa4&8j=coLpa_UTMlt&n zOio(VcjEd^Y1Uy9#{};J;~*DnQyEx8B-aSR(7(q4fo(?ZIGiJj`jMK6U}Y2KJ0Fig z>N#{B_A=K5p82+ou-i}&lYZTMoQ`$1Mz@A?lw z7?dOy%JHP>au{?Yu0XSEAx}^t53!)}W0E6aj7zRMX*xop$`BMR^`BXtg9EK~{WLY= zqoi;Y>G5b?0TD@`R#uDUw7N8YYjvhCNP1%p;08tBebaw0hv0Tm+mb!FsD7z_k%d$}2I_chDHang6klFn>V>=QIM!>y{{ z7exh1ti1J8v_pLoY%UnY5D&;@5btrao%P*KO|^AUGyB`)ZHqx$0LgCC^BgEO5GVo} z_T@!BIaI&9Pw_>yr_;Fj=IN}u+xB0+ik2HgMg32GQy_i4o&xyqETtIastw3j-yXW;LH8vE;$Qa=i9j z{rhKVll7;4=3I^eyp;M&peqDHDGhTqY@?s5qu`>xj^|k87}Z_{ncV&;TddFQ*W?|ajyi>1oF9__I~wOS@}uTcRgw|*%Tu33Pp0a)g1?V z^;>RB%yM6K-+A&%&(MxCg>{|TeWrX%^@o?^K=N)BcR!0JnW5TIgip=jo!9yrkwX8U8ZE)D+H9lgnArhG>!3Sq)`{=)XKwk=Zy63|sx3sTv7QF%g=+7* zxHKx#h8)&E1)ThhhNuA^nuv0*N&rf8OxAb8*LQ3`IBXuKu<$b0NOLe1`r zz2_DpA@0siT8u!r=C@EJ*_alkF^9-^*FQa`<102WdzR}4B)+9na_A1v#1+tLMbG|l zo>^^b%C{eMDWQHDD^*uJ;auZYJW$$*(y{**!j0z${X&N^+^Tt|OcH9#GcVOEF*Oam z&vUJ$`F7n`O*fG-?;%l>lh-?(k=KVk23<0}B3UGcC^ts8>9jT?p)_{!QtBv2eK4ZR zGek#{Skv9qbNVu)uWR^F2_ig`bHydjXQfAu>U-j>};G~X)^ZC4`Yf! zfDx-cU8?_G$7NqlH!jj4;-q90D`LS|MlQAtXJ1vJeuCIDM*QVACZ6(Z_ta#y$*a3~ z<=&|@xLDWoX78E*n!OshKh~*bZl66Z3fG`o-ES&MPL3G+XjH2)>{hG#d3-w~=b1QXkX{Zlwn&Cy)9UGIzBpHCSI#_L6L!_`L~Axc$WeTL_5x zB1il2;ZGg4y+h6DmS*wD8}FxH-Ykg)$d5k*np+?M+k{DNa~T_d!cnpaHU8P=6W;`$ zt-k79I+un?FM?q(D=Mo%KgaH~Ql*^(jM4aX^OX8tLsL_UtM7T%SP1=&6>|A-LCje_ zOlF3>WJEW`1WxI)Bsju~I>+yVL=w4gWoy=T$FX()(iCVVNax3BQmTycS9+bx++Vbj zgRzi_b2`~<_NR-H81n88$dSC#r7<0P@524TJA*-(V_v5SjJkfU+m2plUL&c7c4@w;kz6(gKGo-)H!$wlVyc>Iqpul+xokX-wX@&> zt5IJwG6--&qs!C|OyMW1F+7t&HaE+vQ_do^wp3ztUGmCP7Q?8<5wy;+DC-ywZ=oj=o zda&R%U5mo$r5c{+-g^DNvj7VO;)})y4ADt)+3T~FD|69jAV&G1Ti#>C7B*F}oC4W* zIN{c6xDqurRi2%0vyDGN^gjkmZYxEOG$$<^FGT`16+I`*6Q)fhga{yXMFq_!-p{2q zw&*4IgIm0ppLFOu^;uLZ)D&p;{_Ky(`T2TOMNGoC<2dU%9E=ipr`WbWPC~AG7>6Ds z4eE{3XZZ!58NGmhJ18}qS_UeKe*e5A?Cr3fgdQ$hVtg4FFvS%(5uRTY`ZJZ@8-027 z`y%}@baWCWBGwa0@`9~?Z%!e@-cD!7K@N4@kN(Eobqpy(h49oh-xmyC>pnmc@xLJ! zWXwx}U_-3f^ffC%pvilR6Z=9EdWYLuc0*vIxus=L1cPwaf7@yBAC8Gq%fHXE|Hiz| z2+H*8)l45ZuP{Q1E20ad?!(Bed+3nddnd!*(=w*H{=(r7P1+Ob^@zL}qe0ne(WXRl zPgm`m!}l4Jv5tMuxM2FO&?FR>{~SQ* z(j4Jo!Mm=w!Yo&PnJ_#kFc^YPNk+-ZUdji4%PLAJYS9IUnpGdCX(R>lJ~h*+@f2&I@>?vODFFTeY_KzCN1Z%Jxk@ z1Nv-JQ`BxPpco;MOuq?+nPKIvcAY_Ow=G%8nz*FwI%<*`giIBs|A_T92>79loY?#o z0n=X-mzFjDg0W%QjF1+?Q7rLeeRpmaYEZ~aPrD>yg4ePlCV>=u3DXeiW+f-9HJ|Mp za7D!q@7}hT;@UcwI4IF07-@|_itdJNo=JC_t97MQ z=q)ZwDVa;;#&q$T99~H8&Qo>k6Q+aNP=q@nL6#ID_KgY4qw7W*P|E-G7#XM? zpm0f-qno?KF(Er(7<68selkR%<)6Rc<#0LHF0DC-KHP<7y)7>|mR+V83@3{9=x&X= zrgD*u6ShkVW=Gh>f_lLw^c)pqoU4z()^+l`C277!$FZp0Bo_-GD`@bK1{5Unlgb_o z6Re}lgerdA2WBW<^nc>)@A=+I#$A zRR~L6?H#30SWus!T2pI$G8dn8QfBndq~k~Qv&%5)b&;Cha><~l<1NEoUsDq>p}i(K zDRQW5^3l^<%VXNa8ya)uHZbc;O4WdfGzk1p&N>%jb%eT}bR{tV`OlrsBNh;(?+%Hc zb&CbW6b_AcnnD$TsjonQwb$xBw&f?@Ukj8@Q`Wfh-lY0Ksdx!PWa6a)4El+Kpx`tx zp>V&9G(y9iA=v&V!L!tM6hJqmWNlF!3jgHLx=lFBCwEBHx7@Q*1})h0q;m*K{SPrI zGO=ql2KID87C7qU>`3>=l8XIvF6ClKvbJE4jHI=u+pIbO%YW0FuiDO`w&Wg1?o0*& zc~X*!lqY zBUx&0>HSg>6(~|eSiw3M>U!vWJ@#Yf5?G`()utyD3G(>AmD3pCPD-Aqy&h2$R3uiH z%l1Sj&iUcDKe2N-;e#c944a%>RnvX0WOw>piALyQj25k0)`fQMwwqb6{|x{hH+HU> z^lf}ZZD>f6XnoQK znFlYF#C|o#H=IkOrlC)zC5OXMieNCGGO2_Csm`Rw_OIZ$P>~nx@&Tl`b6gi>$=$_2NernCLX7V5_vloK<6qFnc0#gwA(03p z#o4;iy^^g5hQVVl$KmN%HA%-iH6@=PyJ%hY5+P9nI+>ShY=D3_z>V5OLVp-jGh+70 z8`+BE$<<(Tb3eqIo$5{W-u)a700%!*(`Oc`UYc5m3aD8xRy22isI#~VeGyGgQ+|Op z{jT4!w9bd<> z2Hu?*o$wOpl96&3Vrt80^{&2R!{`+R|3aiTMDQt6JM20@SIK0!JSopA^dU=>F(G73w* zJaAX?0i;S}Bd|U47^q{wq7<_`Dd@cf@?hmxLr!3eTeTQ;v1lZ{<=W(icv|VlWz{nU z<4>%`gT-PTtNN+#|3He`cWDx#!DX{4{kXQe$G!WP!AhHdgE7JIzgL<5*4Vm%*h;&@ zYempQ#xJlvmP&RT_C`att1yVs0;}!E_G=|bajXCSSv}*{y^DbzA?&Iv-J2;oN-r=f zmcVujA^Ih;g-0+ey=4J_ zd00H^i0!+@RK);z9aSJO-+HN%;5kAN=l?QL>R!40Hr9d0zXB;bv3uWRAeJN1CB9tQ z)S|YgA|Tz;Gw|rtcd16^7v0B|BfO2BN4S5L^ihDUr8WaYMwqw&PoU&N!$t?_Nn<|l@Nx`0T0W>C}>~VRLL(9gC z>f_>FZEK;JoNL%oK@yF30g+Jh__lbIBQ-0^(db3n=yN~F?1+Fg^MOaf`F&tt5wZrP z(5Y=EazoE(xH7w|@bGQd3e$j9;x=o$*b3Of9_S@FS{T5l0bxcVSnNccxyh_ljFq9KV}C!?UAx z4qee)NZIvJ*16>E!)=QrduZ`+I4DfbQ9H8#rQ8@-Hl0IL7j5 zy{R64GU6?Ga23K07@5B4X%Hft@*KlnJn{@-1Rc_znbJ;X?FRaAkC^1oCrNodU|%;I ziK|XYGLZocBc`RbG5(889;K#^&kVkPAuxOH?5`x7US!hZi3Xnf?SMKdT{|2y^a2=s zfU6gtr~@h{YY)on?!MLOnC30refWx%7R#@P?d5QsEqp9Uzkd%h`=7RYJ3&oV4f(IY z3o4Cop73vy$lO~s15jAyruWj53ye}0lM)^TXhP_ZQ?REqb!ZlxiNP9k?F6MHY;8{| zNVseIqrN8N@C>5o2=J_TuXEQW_w1Avon5j0OAtbST_(HgZJq$(WusS2Y91Z2&zIrc zdUXD*+7KI7IEo-0|P&}z9UQQCqoA$*Tsl0$CSCHmw!nOx=C~e z_EsXtcmu;IFBswmW5Kby$rF9uIZGX}N6A0x%(uiu!1#f;w7xDPKRnh1qvR{uUB45;pG)z=F3xu|c< z*12@)w9e|sH$h(@RwAN6`KcFA|EEO=NbO|PU&2xMM)>9sZeNH0Eg$49RSGQsqAb>6 z@%lRa8c&s^Y;H(=m}He7qE7`ndr44+qxcXc*@odtWXL}zw$QroBTvbexc==yVROY{ zyU=GF%6xO0W3%BuEFFHvp9k;I%4q2w!KS|*8&R{55~|wY+7P`35Yt~eO3ky(Jw+lH zgu&!$iEaDR`@?>K365LA^v1&yJvh-8#AN2cVsv~p?UHdN_6cdpRQFB#~9{9kI`<2LjqR8PuY%)WsC>A|>^w#x10~Rn!J(QCERvMaJJ4e*ZVA`xScXETp|T zf@TC)pZ%I3Q6u3p%v;*sn4rX@4JU`Ja@5>&aD2a$B9Rcs_WopEG{9{P?0B!XgUFQk z*6>4aTeU4Mox>qrmxL~LtSwhoI5vMe+7Df_c&2QoMu#G74L#U$$1(JfV5{kGp5uVLAmAwP*erW#>c| zY;G#8RIn?~C1A|IQh_R@lQAS3iB;9Z@(4JQ;78H?p0K)d}7f*7ka#P+_dE&ySDJZT=y<^ zG-DpO?s_K8bm|Y|!KcU|Bmh&b&WUOA$J~&)0B(|ue^FR1HDAo?TZg;v4I`oAveGo)5Y%HHPWPzvQDZ@v!0V$$}_zzBwdOckf4>O)+R&T(pV0w&vLpI5NBK_!b>;#iGi4D?&uTKbp`5 z)s(EN3KNR7{J>6?#&S#AnLb!S&0x;J5Z`#S5+n0^>-yNwtEs)Q(#0BI~_Fxqk%Z{^h)k86kX%h#p?#1ZA7S*9T$htrxgEoWiK)x_89rpwk$PHKJ#6k@g91t^)%lB2nngb z@-rh29<$igA3{PN1P3IZAf=c@nB7@lQusc~TewM&4NhQP58Ww@?o@xVGUn`$A_I=| z;2!x8u@g=CQs3^0-)6>sHRO;J#&{4iqRKi`Sgq{x@R|lWM&mF^dR-6OGsqK>G1!*o z{vu^9otrLcPpPTuwVH*sZ?Sgw2-AFs1lv#S_C=5afUw1gsw^VGKA%&g*;VVQS5Obj zq<0!5yHR`E*kn-7wZIlql$0k$Q}K-B@kXYDSl{+#OZsjZPesldcE)rocJKtyQoPv^ z!Tsmjc)gTfkxGsIu$j`sq`q`+nv2)z!Rdjh)G%24htM9ob|RRgUyj6owgIi1)-ihE zvz2|3(`{UZDIxjudIC>*K-+u1Wvl|KVj%CbNmF1BFWca4)v!5F29+?5@#LE=;_54@ z>p`uXQPtJI!{BV}Zfr2=#L-`)_jseV38r91R8nBX6YUssJpjOd1!Ug^DMnrC#3 zTvg!AaK(Eju!gE9E@2#9$Hw<|dZvXVchG;qeB#?(ZHc??b=z6H!;Um+$BbT|qL8LxW#SwOG>ps#|HeF#W zaKtsA`bA@l`bV9&#y#?wg7L$`^sR$~$NBw|?6!W#3m!uagk%M%jE6Q?_4CQB@9SIz zawuB)K;ALwQuKlU=;sQ*?4C<21YLq*Ke(}Djy>_oxLeq}m5_?WP=pX5G?QP#KoR1x zVUxGU=h#w}9p?0iD+5iZcTy|-?mP_|Vt{k?PgKS+b5#RvspmM`TEu*#5ynYs*#t67 z`X5c2P!~SW4*^C;yK`yfS7henYi(2_M%lAz$BAR(Q3_)_OSW)m{5zON^T~GV%KJ_| zJioyFm-dumthQKrqcC*6MtdGnHYka#R4^Vq=unK8u2S6GUGq%P&fZ7b+}U~_yY+#x z1$hM?kSk$r^kuZKQY~Wmp9E{{e;fL&?qr+ZDE%+}Nj8Q&nP33XW6U>OqG0DZUeRsz zK;#U{W6X>b!jaP3EuqecqEp5fqPQwy8g3`P3t-pRJpi$RA>c-c7h6D0yA~$+4X-l( zcm_0F4a}GHN?r@JSFUe4*{4;z>M^Fd65?f`85Tx*H7BV)-k0?FGEyqyAmIuSYt`SJ zT*eFCJ&hB<3Y30{e;4%4!7kx!2eImP{ecY->8Y|znLSF%>1yy3HTxs&958bBd5-4o zz~M&#!I#jLaJgvf{U0hu?#|M^Vfg;XpB(G#?Nqd1WPc)WXzF;kn^4S2D-rE8V zkPxJ^869*=XuhTA)=`9SqV$dp+WQi2iR}2cKmEm;x@e2)iAxm$`NU*3J6IV0&fdxz z%NU&XoRDfhe?%SaXBE0+7(AJ;f`|MaEMF@8LfwN@Dt1+ftf~0qQ}HKF(uo#M$j`d=li4dpW95F(73*JRPXH%`y*6-m-*M*Hwd``Czb+Q)%e) z1yY_aS`6|SI)1tXok{iazVNfj@$Gu4F_P5$`3a(>gIZ%(H%veHVjrr;XiQiFNs}5E zlTb66%+HqE+vyB>>u@(X3<@S-0@%|E27v~uiqaT@_tHgm`bTnep)Dv%suX06@mT}D zJ0Zia(M0S3&hPf>ax#SurhL^W9HXD8RFI{{hmE}loU0P@R9jrpK7$mWKP!8_0Yg?Q z?BEDIn8Mm>YQpXm9BsAs#|sdfjK(di6ue|W$-`f{?00iq7w09_{JB3TMp_~GvC+-Q z0Dsd@paDKTC9k0gej!Hsh}QYo_-5T(S2`ZYh@@|Qo1?vXM*&F9c9(2%Ro1B(onMmk zhmVW*Fvf0GDdZv&hD+V6CQo}B=jRwyX0@cne(n9nBt$!Nxi)%>D!9}QOVR{hh+9@p z>m`sEUrYwqNC-+@)dCNE`_Pb zbKSe!i(sV@qxhN%8sw_1BN3~}WhsZ6xS*L?lr24zOqKG|BuO z)e)R{N3C+YW^_6~WqRGVg@TkI)};moORJAdjMwOpv15uY9tMHU+r>d;+LX3WwQr?r z2u8-XItj_=K@W#ex{e{GVBJgDYU9#lxQLPOS=GbCZKpXv>Yt%`jkvNoZTSXqa&2Te zo?PD3$@D__!s*0j4Lj1@_m(K8%B@1T#`(g-)f9#W+S^D_lr-$86Scvc!F1VOMKp3ulc!vG<*Yo^l+cRjw^wajWqD z9-U#JWbXpx6BgSGRZb1`wETk2O&AZv%EyFE$0OmOnyed^q5&6H#0C9nLKQOAFnHua z9F6})Bw7jkb>W>xpKmyb`kMy*sHN{8$(&|Lvd_SvD+gN3 zu{sARQxRXoMy}L4`@gjlih3}zRC)ihc;wm+rUR@sU(A0SwXT`VT)~%_og6oUcN1%a z-?;KTDenv-tB2ApR%eo13P*3+SE(;%)RiTZKbD1hlqF3!?o7Xmo6d=w{u4I>jz8D! zyxk4KiPJ?j*W`5##N<^%;VlB^_k%^)l>O-#p^$2VLN5H$tU)kDU~ej}{jZ}B2IYma z28Q`L>31GQWWC#cn>(O9QoP&bIs2jUm2?%3ynsvg^6@&>J}xdn0~5v2U^jm=7IN&Q z!sAfn1+5>!k4pHtn9>%JZNuUYLSn};?IB-{YU?B{gPWI6b{WYqN7otC;|hhd(y^e0 zuYRy&y8q*?3Jne@jSO=5x-(oY_&3Gvwjt=?`u4hJ#n^gEi}eWXAFz;*|y5YtgI3_UP21kgWntNw=A=*DID*l z_nAMTJXr{$mfg^JaaHb^LcY6B7eD9r-IGqcK?hATKF@Ml=hK}(z@fj6K@&Ep znvM=K2Afx)^fW5u)Xrg2ZICdCXjd^4{;Cp&DAxq!`%PwhgY2M~sieH|X zQn7d;^uB#^Mv{9A_mz+bzK#n2?<~NR!v(Zwo`zS7n(1oJ)omiPp>sDo5(TZ>#+h8z zjUtmpN!NH!hbtV%k=j)(&mdmrxIYO{^WqL(6#0Dd7(uxBgXzz;+PU9k)2aA~Ll2Y) z0^h3UPoIv}HtO+8C`i^RFR?TW*Xa@|^xS$kCl&5w)U@33DjYKZaLen}Du~P~!>Wypd-6+wSGN z7P4%|!U0nE(4!;j`e)^v9&m|SUJOa@fhr2F+=KCX8PyE5w92Ry_ z;&C`4WUAh%w$=_GHzf&NRZ1j+5fL%o5O;{t_-`SYPUvq!GpOnX!D zAROknV>JtUGR24J>cwrX$FIILLRw)1I(*Mg%6&Jx5MOw4&(3>rbAczJ2(e@69HMItg}xvJ{%<2~QS>{lbsWo3`fcjYr0X0%^_ywN=)`71sw z954E)&h;+zcAk8=2}-|{+zZ7|e9(z)iWZPQO$vewVp4x3S@tZw79KAk{SmWl`8L40 zsMx@#aczk{RuOkK2(oDa?X)v2zc61eNoD%3!=J5j^!s`lCt{m*$XfJ_YPg02tq_rSt zI?0M}x-BimFroM$Jh>?`#=7M4@3qUz)y;Q#Ji@Su(W zagzbvyeRm`9xD*p7Ym@ocTx0Anp*Lk%NYdkMcqwRF*Bsa>Y0?4bU&Edb7o#VtcpSX*=XL zrj(O^;UDsghK$I*6OB|<&_(s14!D)@Is52bgXdQ15ibw*5>gq&rA4j5?nh?6(LdGm z7?Ynq%pQJlMG`e?waN8= zc=!s3sJrKDx=WBQX%$$ySwIkxTm_^X=`N|IySuwVy1N%pYLV`g?rwM&pYQMe17PPf zcjnBQIdiYORO)7Y7jdzHv}3`=bBUzldLyfDuIt#~Cgv|( zCkf@+@nqY}q1&lvag=Df$7_rR;Dt%Vhh9vd_2byW;A=tyyzIF3_)%#dp{X-UCv;b1 zW)dEsIj{xO_g8nlTK%9xu7-zR3>&gM-me~8* zZ*2|xx*=Y%m6R^&N`ULNI#v2;|(ixOIbP?x46^qiu{p2A@>S>f5==xT{%#(9yLxe~7>L zr?{3{rvB(UjBDx6F{m0umtQkhjCd$8zb`kV(Gi9-o0H#wwaL1_taOLf$GG%G))S>P ztPHc6d=HVETF_c2n$9ayLL5*Z2u~`zHnyU*incFF3VQ2GGbCI`FNO=+L~_K8p!b1Fg>k z>;RB)JXg>=>EJf%&aYd*<>W7!BP6L48x|z?+OxQ zO(jauI^&sx5~Bnv3!_S{U8mYKsJoBwwN}vGWxMO!*&oAf5O1P`yzDX!387v2Gw$j@ zlK|8#G7f+f)z-SDNS+HW=CFWdmgphf^0;u9&8O{Kg7b@- zw?{EW(G8N7ZvXIHpG|Np|JqPRfCkdTwdCsj7sx36mftz$QaDV>Mx#})^Q@;t0g#Rn z70<1}LWs@xhtsoTDgfxD3&n4X$fs?KF}4eeZeF^*We(t7iEHRUyL!FWg45K3L~a;d z$oGZ5D+~VlJMQ_^JE&=22Go=LLU?N}gPm*Nm3c*Xz#-ntY#Fj&wkhSU%UKm+Ct8#- zeS+GNMeUS!gY51PWh=Thm}kiN&r*2TilPCdI4>GVO)^qMh>L`VT;nE6>SZQG07eHK zt%pN1*`QnciJNoEKjc|h44rzpx)(nQn{1Am1JI5zM?w&QrAnR+0)R2p2}RROLPm+! zyf?p`^Npq&h;Yw0qiF-hBtEd-kpts*D1Zi9ayP3v-UA~FGc$HFMO~L)}Ql|%SBT`03?*w zKGFbR_|5t0u1I;&a@CKriaUthud|;PK^2;9oc|Q*!VuI3uUvCc{M62f1M<82yFYq2U%1-AN}g zl$XCJcBWC8hAg|wjK11lpNP0_suNC2b8>CC>RDpYqpNRC7W&3V#g@rnLq0g&tOyI$ zx0OxNNEMmo4$|x9B5HH{C4C-q=Zz7=kT1HZnJT19tA zZa8HM<$QKEs z3wU82%kMtyessPL_$5HQUG>ug0I5kC137oj3alqyH#uHS)+H9!H>t?pvarH7-Gt_9 zN^=qEx9Eq19D0Pq7@&h$*xda?+1UB}IrPCN!>r4oT)f0mgX9BervljN_itDqJ|e4m zZIWt{-cX$2B?b)xCz-%2tY+_c)JIe)7LJNAz_||?PbG9)Koo1fvEMG>J06m!tiN#2 zb3JUybYRzNPtD$HA>Ouc2-+}?SZ#~Y<-QZCxUZQ$Et*8A9lR-T0d^B&`ErtJppjZ0 z6Y7YXEYMUxQ>voA)CYM=PUN?UO%#=7ox8O+9noTOWr$#cYE5zN-v&$?cyegtZpq{_ zloq$wxNQS@zniVV!T@X|rN-Nj2l5CNfun%$z@e}p+%|9;d*ng!zGg(d#l)rNKG7Bc zh5sVcIb5TTLwq*3?nHlEc@$@_`0?VFupQHkCdMG z@iXI0Fs=EtVpJ|O^k-o(2!!9e+KeCITa+jCl@3$*L-e-fwQa@2T(Dn^R&y=OQQMwF z0W|g$-?W_JkBTPSeqDEfhbB$D@`9?b2jz!+7#WZ|iaU9}#j~-NYofL%;un}3t;wv! z$?X*eA0@OIJ>B(eA~p6mNCX8W4bA!pvScts!UgtrR8-VhoY*h%snfDUw=$-AhZ}{$-d^CiZX&wa(JzdYa9TN)u7*meT%JC^B0J zxNT-kw+I(?&LM?7Xru)jnSi>HlCDa_J|rK5kngZ5yM34S*@SSMEN+kjMLC1`g*RQj z@ch0;oY#wQBpgJrbRx8Qh%i}iVay~DiJ0J?8&hJ_7zb)C_QeaYOenE3gp_TGm%+2( zxr3zKMz@&^)j693>$!e-b-FZsULgwTs$j&YE?aa}y_i0f(YPv0PZSzztv4Z^4H`c) znRCdq7#rR9$@Rg0WeMmS7027S7xG2+aDLT51R&U^y2%ZKatq_WUKO~Mi7B#W1KlIG zEs$qkos=3=-Iu(@$l85!3jb@ZCC(+W1vM^{)GY>Mv& z4w{UWBidw&Z|e$ODu&f{Y;k$l6cyr=;=XhWGrOvQWHZ0PqH@n-7QJ<#CsWbZa3!gw zL08E)qwkAOxk)ZRHS!b6jpk~{x%{Yg=kcKQ>af09DG!&II|H(bYr7vVNz+_plD?*I zN&bsb!vm&d@RU$z=P0>f^A!+V@iH{w|G`XR^hR(2ZCHZdj!A^d;OkK{(n-_JKMvH)mK$)ZoVPf3`am@jSRnvzJ9Tb z09nuQ0BEOjPoX{*pq4<;Vut3dxTa$pDIV*uW=NojY;<%ItP zjXit%HQZB1@|{OpPdA&?NyhHmgU4~u68%`fONajPR9SV#0eSmZVsXUfVq=OU8jVV( z+R4NsTNo&+9b~nk*M`e8nHStr9|t3s4!d9QOa~JrwN^U zn=9uNKeHdB-EwB;+j!YlMkk|A!KLMIzN{Q&VQ+Z(SJ{9M^+AO`3IxK7063_AaS4N@ zy*K%T$AcpLvdj+k%_bLX+&^R+CMX!zP?2NWP?=i@P@AIl5d1j$^(@mMR?bD&0E^I< z9Bdx|q9hH65nXzK>2d?U>75?7S1yV!X&~x*ntM08k>%wJ{ogeWOuHLpSgB3v3glWd zmHXbRKYB5R^rSe{hG!(ljB@n&aUW;`JFA1lckB3Ux*kUA9e*s0E!Ktbehs{;m)L-F zFJEg%S+>rulf!Mh%X_J2BK*rs9u0KT!5NrnR7o`{T_C}N4C2qE6US(v7N=_l?b6+^e$dOBLBM}Z1mga4C zuu>NIh_m?&&~EtIKii7A5cL|W4Vr&|U$r*C40Lw8d1pAAPxJ~F)MY88t{N(=wVuE0 zwS#$v95*ItB0x60@A93-xn$i9urA+XtP6*J#`kjw{FEm~A>_vUR>n0X=)ty36Xi}8 zU05feGNQ+j(4~f`Y&ZAOwTFIN2Fp=%mLlk*E!&+vsf&RF+IS^xwF%Q|;z z<={;YfTW0i4X8|l*)fL_zcg$;UzW3PqDiagK@r<=2si%MC9FR0*C@s@Dg zP9YzY29jW`FzfwM4xdHP-@)fnehr+)m3?NoK9xpPeuMG8S-4-EM7_TIY6fSGiww zi6|8hZYB_bbx2j7;09x9E-zK=?Wm-k<;i@L_Qj0sgR zFS)2(^y;kzPW{ZpFALhfR>-4_Cx3D`)q5TzYrD9%hLrd!Z{IJk(Asq%q{L+OQs;B| z%n02W?KjUQf6K9+GI@cjTF7_lObjc|Mv$}rH*H6n>Dew0ZJ#4x0pzQ#e*CW<6MVyB zH`%@cEmKE!!Nq(|EjT?WcCYzrKq|-mkoLkpl>*OdHwHKlzotP{6}Nf^TfVwT-UdmP zP$KZE-K_A+gR%;+Ud!j@*N83j3AZ!)Mhq9Z$0MrWadBpIxq~*Se{>IXchBYKZ1~=A zd!3v;d~E8XZMyfKrH%34|C@c+l+8aY4^gMxX^#hFO4W}CYEaD_3B`v4s?RK0bp&Fr z`3+6^O}QVF`3KxH-J61z*eJeku==~1I+$!45GYJaEZ)*3ycvaZi}N~j0NpHuS)nq; zhsS99tjJG}CLzw)LVIwi)P?ZMjK#^Ce&j;P?9RJ2tujb=iHdxD_%d7a%H@>E{$SMMcpmtLx_|RUWB);ol_iBg>GEOlqd&_bxl$v{S+){V!F(&< zAX0(2*8>kJ0{-S06+jtOLckh1ECOF7@-ZTq3FU|gLX4dih_TGvI<06*hp;+j1 zH}$sCXf3qMnbalDC(@FwGgx%cl?rmQ-!S^jaZP~1B*L>DC9>9;CdJ=vLNLHYHzdWe zSZ4j^g(Wf!xVg7W6ZFj0J-LdMh9rH45nla3H-@t7*W*YDbNBu06G3#NB4ZyIBIoFw zuU$>}Nr|_kR3)abl<>E?3=FYUlUDn*PkJJwUt7ETgz-Q%S8m>BsbZE}377GmSg$U{ zr0`d2Os=fCV)fcYhM&yrQ>S>@;G8#p?`C&y^@9yNW%cN4vN2!M*6~m9sCZ7I#z<|x zt?}6-!*~GRInR?E-o{~nA`8=}ZUOvl)9DDA>Jhq4`tPP*6;zO0f~n~4$6UxQA(MQy zPh?&A{FIr;ISc7xA_7w@OJ_slFNvhf`!tT(6Pm3dd_XD5gms%HZRU?mTq((?9-h9u?ldj8{LfGxr_gY*3(;OyQo?KNJ?S{~`VnVBKmHX>GH06=yi-wW&>MMs0M;(SQT_uId^*?Qz9*#=HjKwP`ukh$!W>5bT&`})uzOcNZ zi72QP1KtNqEoxTj(Xf%nvmb1D@N{Ckop|aHE9c;Y5>|VL4{h6wM z4BG49y(i_jq`cF>1x%W&woW)ic~6~O2^Is<3#y-^=g5XP-oW8k^`S2bLih@PCQvO~ zVW{cyx5;{&JhmfOpCK$wFxI$tEwJ^_9whXx5P{~Eg+a9=cs8DOSfIk`bJ>u2<3Ug3 zoJsv1=S)h;S&gptP3aCom+ZqQ=OKGQAy8RfHF<^tJlBJI@ajl0?uA6C93#`A2*TbX z6zX4{IFzn@Ta$}PqcSKq1DA>N1Cf0Cho+WgPlzCl0S3L#$)Ep%@86o7i%S|DR#lBd zZus*UIO+uth|z#Pmao~r(+6xRWfyUk7Y4OvZ1An;fpz5H!O&NYe4urs=0={85#8Lw zlk@vGVsREJFe1Nv@Zqkm=JV3+7v4hyF14Yo;y}y8A~M^K-)eRSb^&2V-Cx+lJq^60 z5G2G%n;XLdUhPnQ7N&4INjuel(vg4bkCdh+L>x}?HX=cJXdnmFDaEZYX2NN&9Q zXD7ke;I|?@15=JLS@NQud3>M-_IU5)@(*_mc(xc=U|Az(NGl3lV%cuY-yRzgvuxvj z6Bnp2`uU+sHRG;NPB1zGD=#vv3t113sgEJm86hu<1_yU-~=9*>Xq_Wf#@l-hxpZLuVSipd zeS&HJ$(qF8|XQdSW3%# z9K6GldR{D;kv!yzk@cQxbHW_`MfpgMorz=$Z=KXF_YAUlwc~k)DK8kuQIiPEPsSpZ zC*9BBw?#i_&>1E(OM}7>LCR~*WLONGx1*-C-*ajg#v12pj8q|4rF6X3wPS{XUzI{r z;^qX7Q2WyU8PCn1*q=wh*^;%QR{A(Ve|(hL+(y^vL<4!hfxs+cF<*>{zM5GY;BO0^ z^d)?>RN7i51^LqMXqe14P1RU|AfxRZLRT=!rOI-FfM-(N00-eQIVfn7;-8?e-H#+_ z+fu3HC1t=$ptU^V;_y=Fev;iPlr3f*3u7^zSYjVh2jm&K?|Nx76w0#!kYKylb;S>!Ono(=G~whz&LNTmg`gwoa|u!>YsN2@_MhE(9)3=$|`48 z=F&grgNQ}_9>3?nz=gL1Jsm|?JEgPpXbsHOR7?G?H|Ld09ht$OZBE9@ckl`QX_X7F z*GHU>C>zslmP!BAcH{M(P<#E98euXH_Y0x`k9QMKlEK(_Hm8M!lP`V`iAA`Od%u{S zNBh%;U*9^l|lVEGUP4-fYlil>>$-q5T$~6`U^L#epF+n4{nWj z=$R$~@&wR2RyJBL5>>-a>DvrS(pAPxzvVpDp9Pb*PGsT6pTuEh3Qv8EVZ0re)`Q>U zC;TMui!KlZ;CJzLBN!c(hl8aVHq9=zRDy4QQCBr)p)(A zMLa&}2urWTDfUY`8pI}5D?1IV)E<&KjOA<>Che^Yt6)VAa+XC%fZ%?`x{{^l1nbeY z=CjI>iLW=XNu;w&)|~gy72pM1u*vUO)0{tD9HUhnk~e;`+-Ywrgu&KsoiL%j@V{b@AbQpg-~JLgBKb;^h@Jmml2+;*#C4Zrs)h3>IrBzDO&)NNz~+Xpvdu-iKY8 zVSVemkdn_)oH3c|6Ku~|=&;1Kr`|^(+Cex+NR;23bij5gM!<~>%(n$8`+X5z^41q< zR*;rbHRtJkZ!oYNT;A$?34UahHHpgklAbxG1)D!3MWm^l0FUcVMD%(sg_46%+cw%y zzls#8yo^@Lo}^2q?*ru}-9)PhW}T|l9$Xm54UakI#>Y!wqfk8NNS)QY0^(h4)TnQ3 z%ycJHYgMqAl|YXtFx~rH-zLkVtQRf)@8u_9buswYQa-J24j*!-3Lk$hv3gSuMv^EE~fTv zTGd!Q@hwgTm|K1~w=sW6$1{*rM9DH!G}Or zq=8};1*T#Rm-17K62taiEtJ#Pwu#s8i+}b7sNK%+(G+%6d6$b@iZ5s2_%7TFisLs^ z5{LDHwhSlew#7#-%rG3CWMEQp9@^sP6G{y|G633XWmHejt0u443X^^e9`rt6nHsND zSiZ22X?sVO(*DpQaG0upwNM!{XaDUZ)J--AjW>0HP}2Iypn@KCmoIar`=l51@!Rrw z>7Q4g66Jswvgqy$l%-8#h;BuhbuamHb12R@uGDxv=g3?8@Z70DOEZno-sMRIi9Pc8 z1<^TYpY=Dqd^37XhC{jl<@wHIL-<$S{cu0 zJlB!L50i~p!i9NnjNgr|7_Rn)acjHuxIS5c{X12MFstoj!djC#Q1JD*Gla;fw`4D! zBKo7?g@P~xbVD@oe;J+brrh5fXcZ8>CtA*yuEn$PC9}nvm9Hv>(m7GD4}y4B=LChn zVUsRIO|8O;Pg|HB28tW)+Z1khGo%H~lUP9ULDcL`4+0EX3MyD$Ej~m%_16%>#%Nsq zl&e!+n(A%txA*01L67o_7LoQcQerOwa#cK|_e)ICpJtW+BVW4IqayXjd`6-_YzPzRuXS_{z#{vf)9wyrIg zzW^&0(*tArdP-O`Kf0J(^=EsU%M%TXx&d;uO{{_l28m!H+X-5)?X(5tmEQlys=>6`rS_Xlg~i;vNwcfpQ0km!Yn0 z9=BvPk%uxR4t;dkQp`mEt5Tf~Bz6UL3xrB@mb@ADn)ZjLSPCuRs?C^!(Ta86CU}l) zTO%ZE0dLBN)2&=#ym^oW?vr;!iCWhB$7|TmW|+K7A<m5PHs=#iO6mv8-CTq7W>?S~PLO*)5daP@!@k??aCPyWToAb*c9h zD4}8vP*}Phq3vIUO=&`qNU-yKMMAvv`Bfz>bth<7`{${j~ zVlVUKHOUNH38sTc{f!WO=%hvEo))yLRy)3OKiBnJ%%{24yHsv$a9@ziN`M%VBS)>L z*6OEKN!eR+thO=ARY7p&J+oJaV zQN?&<6mxsX-)Wh3Nx;CuOhY!lHn%mM-FfcbA*!9@g`TEioXPIGz10qMknO8Gt+>w1 zLl*x~IMS7QUNA0da`dq54tDF+`%x+5-@af<&~083%=cf8lfaHla%s z{^CMVMk+h`b7+aIyA9F;MpY#eTd@AI9;CqyUbFP*9%P&N;k~h~c!dJ4Z4i&{_cf#z zgR#EhySi;btQoe`6GuAz{}vR2&E$W58h5o4uljPGFNIgD$N>l} z(lG3Y$2T-plU3AI|2*tSI${;|H;Zqh`s(mWmY`{;w;iq)7Pg2v zA`e$N;%m-yhK!JsZNpG$CZPjC5P-15)CgR!zQMV(86-71=J>MmHHGaRy&n? z*n5AKad-f3ThlrcH`}RHSxF^$FwB~&v0kcxk0^n-VkRJ=TpVG{5hdFST&l>mUudw2$i^jJ7@$Y5Qv`?ToRa8@zN*!Hj#QnO zw3l?nMGAGXlX6r9x85Tz%)$E}EmNT#^F#^uL3Jf<;ZBVC(dnT`rh-r|k`B|=UM&E&7|2l&L}aeVS5r);CFu!u{&&`_tB`CmC6{>$}jex!+82y1$@?mj!WA z9k9INQWRY7?0Ih=`xCZyVwc#}*f{yj8MmEV zK|Kq^A3UpM7R}2V6(O`#%riPp7@3s5XGF!gVjIuxJrUyzHsq$ub|%lNK76cQphKl1 zqKN`J<22kg_c)Hfz-K)Q>WHJw9px;i697d{*M^>;|04RL-Rb7*X=0a*pe%T6M2y2g z8om7%Crf07yhfQK7s{VSQ}Q?jDDA{zlzY!cTZ1aZCq}EUNAum(-_={Uk?KeXRWYW%Z(cA zg>_4p&L(Ut%}AvlS(8_INF1)?uX#G^#1K64+!~TUm>i?tF_FIM*rRw>1+zJiY%<>+ z<-vogZonIi9dtF|=qu@6-jp#fhJRwc!Rd|kDkAf$@kb5vWrWL!`gsd%OF`ZDk5&ug zmd(jd3FZU_o2&Ng55hEoCdqi$H4QwN7pY%jtV@H+`>Uo%8c2JIEaoh+q9*rOz?2kR zR@U|kacrz(&?GV932H>)vWrH(O z^3jo?V$bLzLY*OR8YQWyc?J6|zj}(2sbxnZ1;Vuh(-YnnEC(oeziY3)aGuzV@biP` zr6q^9T=4SF2(Z6fd-J1Od79k7Ya?{!N6 z+%^f+w^@aWBm?REoL7&pinvs6_IFRiLLHMTDcFW4ambd9K0?{d1 zu+TZtamCK0^C%|N?3&n~FGLtiaDci`s>%5Sw6S+_L)go-XN>DgGd$&*Tt#W!Cc{Ov z=Cb;q?-JfDW}sirKoOW4mEW_?sg-(Iz!u&$Wm!Y}i7m|XWw}%dbYS;3Hb2B-oPE%H zqphkZU+@J0w~xL#euc;eucME}R-I^(7o71GqEtW6x^0p0nWCd_JZ zF=A4zo`0!znTk!#n0rI*xvsn{*sVh=4Vm_stD4PUO`H?+?hOr!NAwqvJ!=B+m?nb9 zL>PTBl6&;w^wY*6-N;s4+FJ7hMbdDNYgXGzySLZAuUk_SZD!e^A4mG0)D;%)W^H$1NC!Gmm26+}8WLk-nmV z<&E)rI~-;hLdM3akFjkbxdqg3Y>p#aGQRfdm?x>IPi&vA;R#x5YE}7`qwk zS!{H1^m&>mg3Z!dhi?|=d+A&|w```u#Q-{7z`FNn3zg_lzT0 zu+!!kTN6NzORnJPtc!&_54^3HsYkEA;O~!vY#NTK?z8a73?wA4PP8WAS$Nj-9PlOr zr_Z$VPOaFixI6A@Y2r=v2fp^cJ0@jJ%D2dz?et#PEdyXQTO1iq1LO>vq)&wp)}#rL zTGS7kJvWWwNkDQ;*FR{CVGUw{+6QiZ7nA12&U(e>3Vqf~Zr*k>N#%`Xa|)#}+P&Ra zhLj0bOBy28Y+Sga38$1Pa=&GGOH^z6{K$?z5*<=?9ZR|^saGIgvXxr&%vtK6Bdq+# zo*UkN$kP3n$CIsn+`lo`xupGk`X1~Zk~!Cw^%!IF`W~JXAu9dM)Grqc20na5tG3^I z9x2buTfpDpUs&=ORufWT10JJfvCR}JT8Xm=tEbeTcai!sc*IYceTYK8%&$PH;0r7* zH%hCw=txA>g($8Z%Kf%|#E7Ucz^p*KM?Ml0WJue87L%5r_^^nw?0 zsB~*gE)nBnuld-iAAj146ejra@s$nzYnzwFU(D()6C^@ifK=BV!O{|On}dtRskbb$ zdn^Ctv=t5Hprnv%!@i}dTHtK3Q0z0@j6_vxC0%~-vNh`rSud5vtw#G(AdSmSoX*0fb(Jo(u?_DqbH+*{F&elgym1rlO5BTup`)uo~yZaiQH0uZA%q)y` zHP%};CRV~4BTo#JpI=xdtd=-`1v%f7qs9sy9dr`Al)DwEiNp3cz+=>~C+$lV<;RKR z-u!}>i&d)L^JdRXK^tves#v-JY0}gpR&hLIR$*_U1+-{xam^fbewTfvW`iXZL0X%- zqFLG5jGK9LJ*1kB_z>q-sAk~PVLs3rumGFN!YIppx3xD)sBwEWE(Lt7BhanyrpJx2JZR7t zant<_Gi))48XL}8a0ZoPQN$5E3U*!pfw4t=mf!rl;&#lyjuNd%GChT>3+~#F_I4V% zBexgx^XqpNb3u4X&|jEH*H=1v#587$?A^n{pFdO0{6b%Y{gxAwsz(~SqeV!0fgWpC zsfsRHcS@T6$w)Vip1K1p4)&ZE=ez<}f4vB-|BJQFAd$%ipT-|(g@wRc4h~}fa z;Di(L#=Fs^UeY**3JWp`1FVqx4ca9QfO6?`1*U?vug{7uyvjK*SQ0_|bN2rZU2RuY z2{qi3Ey?{S9`3~jR;pG{6WG$NyP4zKdFm^%!P%S}Dna?ykp6UP$azaWcWocZ;M88& zXm?*NyM~V&kM1i2qtjxytY|S94}*;=(W-N+^NvfTEbB7J653;2P)qh)u6Son>Hvng6{16KrB*~o)E2EW}+Yak2H#x$y88L z@xtM_!Ri^ViQV2PN$NCy0qxS?!8)VOId08Y2D>J|my@H>0EAo8Zb!V~`VRGOWBvyR z#HxQ*L~ym>cz>e8h8{E!nGXdK0eD=w@b#sGo0pnWQjIft!RD{OhQKzrExc$0Q)WL~MV<=4w3 z%U?|f<;||oTE^yC3(9K+XXmU&e|*bo2g9S|YKPqd&5C1j7Jq)I<`9=phn=J2HUkNY z`F6i-P34c03+_zWu9jxcNlNFddsx>qX3JpwehfHaZaKZ}{8$dZ0Xktsx{p9769PK0zIT8NS zgcp!)^c=wh#yAY8Bd5UO3oHDq$4#}*wO!ZHf$b$2zeN@Cgq@XWe&)Lh`Z1+7H;fzR z)mnKdR{-O-h&^@Qv3h>m_ooOFUPP##9N!qWR#!4kc6bh2VQ3EA>#oW1L&1KC7=Z*5 zJqf{wTHktfJ3_%wWVdpC%)tHjZL9v179y+vA+~`)jmdWi|E%NBQVTeX0Zth{hl(R! z!d(J`DVR_mu3l8rbcVj4xJ?lrat0x3P8W0uZwBQ+hbwS%JTBEhKAKEdk z<`ta(D!X4iGtO|Fn3iuK;WXK&LA;n?D{M8FFP-r$l9eRk$-!CXC+yf$i` z0(O1MK9)1tehlH@9_M$QM|UJ4I4U=2S~|b=7MoD`2s&#sJAaI8hki~EBOPAm8fvn! z`*wYpIn-QnPtoJ$)DJAVa@6mEpAAPI4=e3{Q&J4M=h#XA1HHlY zf$)&@XOFw#KS|b$>hG# zb5t1p2l~?{YfDir$U?EPt<^1dQ^!>LF0r{o7bsi?V0XuX){4zkir_5i|9=^v%WkR~xqj?w>w6?rcY)dQ*Sl3YKgViMV6Oil4D1hm>%ta+<&N zJ9rkhw5uL?`vAhjuY&KYSQnIlCMKturXKB{3*Rg6^&~mA1qDSC&>iCl_HXO0T+`L} z;qk>gT0wTaS@iypJX_GNddS zhm~GgkGq|u=rxvnzMk8k6A}D7RE?{Ust^3#P|olh{Y-oFED(j8Z8Nr^$itP@W4-Ms&HM9R{=DYa7O%CbgD8wo!u7MXf~l5sja zmWwnK&C4xJn96PM+qCBw&!o7Rw#Y-=b zKQ?}Q-&m--tHoa^kBd!U-SIcc&03R%GBkj2DE8jEtId);kc=p(AUcu=1(XgT0%6-6 z!QS)x?~Aqwxu{HpExNa)q*!wlz{DGXvwf)J56`JB$hFb>QZnAksLNPwN)M%H>a)q& zN^_T03h|6JK1W6)_+A>nu7072!Dm57e7)g)H^wsihLJyHF#9JX-VpjTHM=rLx=9k- zIf}5&NnlbcnW`%kC0idKrPzL%yu)W(ckx4qUc*V*tvh~wHeRV)#aq~tLZ8B!;|;)O=|JEvMg~j{-KA-su2_pEsUc-{s7-{uAjB1; z9_*Q+{8K(!AdH&(2lH%=G;tlQ9 zD(+5qO-QeSj`?vtqnHKb&p@-^e8#Fz3yLh`k>($GyeagkTwvcOx zRI_gR`u7akvN z=+y}iC*HwLG%lJ6*zP9UDuP9JnnQJF`+A@*|Bu?h=hV#I6jva1R8DKD=E~0}Wu6LW zkJ1jFHG=_n(_@Ps8>9Q(QwKqJcjyw?^qkv$s-&( zu`&!gj39=U?ep`p&Tz+7SgB~6_yA^oNu+^@H7__E`djeafNxtgsPDR6$^W}p61{vt z^h%aQBhr2)>S}~#XG42?UgdE?uWqH4#eJ)`c4J5B#9T?|(ZQhy;sS`0+I8vr*H@@B z33j`Pj9VvSotf@;dmH|CJwW*C4XC`^rvzV_+4MmhI!(z;DY8BN}I%YO`odAYtdg*z0cqt9!L(X)zt;W5)il~_@7i;)u4(JwK zDI4h+gLG`6rZ``=MbTOPYxqu73XzKQ0MX%9)X?j>O;zNyKeRFkl8T)%tA zE60zv(yllT+L*EM+OhOzg1dD{^JZTZJh|42Lz10)$lnSq*T4Dqf3bE_r|+PDzc6NB zgOd$|Q5MJL|NTu#h-+wTW}f0E!fJL%su$K{hAzN3$3lWLTQ-)Sbd1MJvIa?w`|COA zO&qbp-wz1VD2~#x`KQy>>xrXPSo1V*PzMmL+_BESpkN^&!h1|U??LYo?|k3`MU)T+ z-JYl-CVFJq^QBA7(dngQuQJRV)I5zHxL-Z`OLeT{+^Xo!z|O1{PAC4xhe0f65r=q5IEm zh=?r>W~H{uHA9-|4AP*K2jFie=IfKyqj|w2AuI%oeJ@ee4%n@47UR*flb`<1@FoZe z+oNdSd0V4KI91C$bn+F?#h+n5Tv2B62|QG%Mj2j~6n@s2=I^xUQ$2o{emr{MJ`1}C zniSfqrpTy@Q0jd8M*`vhHTTtjQGQRnO9&z*Ev>YqbeFW02-4l%-65hP0*in&C@J0D zxzgR;!jjT;A9neC@BI_*FTQX&&pC7E%)IA4GlzZ5>)z2I)zQekEC0)#p0Dy}?Wy5} z(t`FvT0^b#eiQ0(N?y@QvFrlq`bud*U-NanjTB6=-1)OzHNtE}V>~B2gR>tS>0;Qh z<9uDa<_m0k2Cf;KblTETuAMt{(4Tc0x`8paz%+7r>jUg|EKu=DtPO-h9fR+XzpY^G z>VdH>L&U(X`_{t=G#4!ohc=@4iB< zp!I5HLd!X`qZ}@fL(DBF!36np?b;80v<*|3uVDg02iUr6go_Ue+Fu_Y>Cq!UP>Y-BAaP%rdDKUUsOArmwds{vmoAdd6;d^|D{|# z{RYgP8eP49yp-^_5##F_;@U(Yh1gdIv0_>a&@tu~Tnsg0M27B?#@aYFLG&$glRe-Y z#Yn3WAn0A-xRxww3QREk69humxQYI&yn> ziV9dx-Ng$>VBQEw_iSokpNl1}Wk2rE=Xp_Mfz~%p9Xn(nEME{KYs;Yo64TtYFoQ)t zDjBB9l%er`TYLG*VSh+R*k>o$G{n16?T%RTT$$``Tej( z+~eMQoC%z*x=?3#mTY#W-u7EA^rrZ>s?azg!O?H#S4ekBp;w%$PfxL`G|#_PaEtf~ zaB}}##-3G~Vb{^Xu&biFu1*kLDCBJfUYsGR4_vk2D-n)#(jnSAY5@Aib{XTuP+T8o zP4rA%U`47!(1SZn5TX2YIoOYiLNa<9)YBnNDZ&rOSUtlMgt3L<3dhJpb1g*Tq5qC} zrN0#Ueu*seb=mBDh)i%m8^g$(|HlX$on5aapMLmf1tH;8)LSHuzqLXyjOp(cbG|x3 z47Hz`2m$$A`DzLZ`evjwew(MXJ$MEST5>amAuK^%)ajEFd+jY2fdP56&A(5}PY)=| z)}x)C6nmky2DP+H_8D6uf6V!8iNu3b@%kT*S`gu<+sk7FD#n)Q;*WB1R6=hf@W(S} zh$^b99K~A1k?CU^_=87f$kJc^XUqa)xRyeQ-U)MBOr8=uDMCU<=q|@qQ9=_&Ucv{G zO<%93Th1n9ea-bFlw}Ss=lq!@{yUXIYCu47t(NgvG>pwvXV4M~IAipz8Y8uvfW7DC zNvf;dRgcOXt=x#Kb29B)YEC9GI)iC7C8(pwyA$^bRNv1T3vMN-aP>o5OXI{Mu(ojK zxXb@^S^Z$PM@r>>5OFwH6OmgW-QvixFn+=6Y#r6>=@uvacQkog#+Ng3l<$)44Sa5t zHIXpt5M&>m^zUA>3BlNw-wudlnv1;oxia zdigh=GGp+GR4ZYZ3BUY9E2P%eAG@YwBd_khAW=*Z4+{mW5Y@Tyxr}QmWZJi@L)w%9 zPw9_*9+A~@f3Oh#&bfQYZ)Y36Q=j6mfFOg{;N~Bi)7$Aw`=sb9!oX$mBwtuhKT#G7 zmmbh0y3f$~oHzf=tD2&ML$OC9nk~^f5*N>MHb7rK00H{(ZMwqV?Szr*B%zC3t>@+o z0~l;V0*hWU87Tcrm6EYzpNw-zV=7Ct{@y~ z``p|-2wQZSGP29#7VTKhRgg98FgNfLFmb7Z(b4RSSvHD!*iKvGV04N^hqHCmeO!o# z*<8sEEe%OT!treki#~`2r@;-SfN^kxYVrqsU~eERcc^X~q&#F6ap6b5u%(NnBmSfL zb=-wJ;GUPR&;R7j&;__5@1tY^;<##&OCQ>$LG#ue3WMD&D!6=iePzgr2PHl{@p!(N ze4b_Vz05(67b+e%si$@y>n6bm8T3~nC(4F|*A_6Jlf|6dBc4Rvf(s5$ST;+BDj8wO z3D7LtWnU+R0Mb_uUywi1+R>&N)SFuSQo^yRsli?y@8>=l7E^G*b4{-IO{$IbH)UQB z13RJK5V&@&_WMea6CaPSIUr)CSuZjLQJq7z2o}l?nPoiS$Ny_HuZF~!L8!;ljm9`;xNlMHu;MhS-?uIR$@U2O=m60MSjHp{U% zf|L-U^gdIG1YghI=k%S7A|rjvWY5)A!gX?o2b9CzZ-0=`e}}m7b7{^Gv`dwEN*`PY zmG3_O4g;A%GqK5YWY=@dDJ!u-g*`Hifr5gS=7GA%h?s4k&NIk4k#(o=b={BlS)>7` zal%TGx@+*tKBLMU-Q%pSmd2oP zal@{AutkbHzyt1J^t%w%c1+fdT&f@SF^;!+<46rxTRvMUjEio=kv&=-hyP5%4lWg% z`g)>L8*1Kp?FBu7qdGAVoz&%&dX3^$JKny%IYmnHJj)PG4`B4)Y;TgTHNtF;hbX?X zecqK`S>R;7$Zw7bxAR}_^6Ap~1j(%>f%o7sY}QH5V67~QL{4hFy1#x zwuSt+A#lK`KK7a-~6%`%f068!s$U0t`Q;mbf<#`I|SkLu5w!8 z(e2*BrlbXhCIk!+G8yrIqh5#64)O6tT~0YZnyX6}z*ozOT~jwKxwZBm+j#-s()ep& zq7rD8F>wJ2p;}HvV11R}zA53h^b0sicl`uRkvVF2HI8&(I>*1Vurw+j+ij%7oEG{Y zpZd_w9Mt8~EO6=RtxdRul}b)HqyrU$LkBgv9U51v;5Z9sb=sZ?X6M9R!~u=RgEmc= zgGlT=aSJg^($Btbdw6?zJ+ae4@}~1kcpzsLzjy%YWVdG9EL)EA$G5A~^aj?p>@KLL zK0GWgM{?#%F^d|C&KK}JPobJbZD}k6_3;$`LplKF8lajkxp`D<%Ve2i&&{y>F8ztv zh=fvm^e&vMf4E4XeJlLEnBq_FQ%B!6FsgEr$kmJ&nO$^)v5nZ^((#OdhX$@m;TN7{g<|*#LS=8{P=Cfx*k)!LH!&9^P%?SxusLest&}SHIb+PjB{yzenwlLBdvfFckF#E{_=`lF4H_1kO^bk`|XvC$)_cDi(SN-%JVlY73`O zXubqO@VD^eP*n@lGw#h{eb!|roQ4Trwb;!Jla>6l?$GWXnTu|z0G zwErV=+nr7Higz$&?rO;ki-;}PiP!O>#}Vr-@}eCR*>fcrrHQZ*!>-aawnHzXy^BoI z^$@mQt2yhpGNka8GbVPBW>{F=cSrU@v!-C(v%W+$JI$FH+r&H zjLi2^{st14G!P+o?nQrZ+-YAK&`NM*&v_p#h-fR#N*4YZjWxUxgOnFSh3ad&mVVt}Py`T#Gz+D@k*8z{2ge10<8nFbE8DIW2=O7; zA0*!Jl|9B9T>GKff6Qt5=;vcZ24^9<)}a{Nl{LZNpM!yo0Knn zkWFXiSemIY+FG8Eeo0X5N^`ehlhu7rMrkl(li&6dYf$ETHn*DG&R}J80c`p-Ym-w&SsBA14J)GzvqHVVZGO5(5*mtD-Ddb2VYeP-`t#2be&CU({ zwAl%l8y0+S;|oJ`s^H0dO42CcL6sddu}%I9GD?x7jd&C^wRHB!6V~vMVT@Rpb7UPq z6VQVf-4J8t$ke2LkR3p}q&4}FNW@B~tu#&G+IXzk-%^|#zvA|Z+sUcA^KxVLNWPWW z_j#cCtm&dApDVkc3Wit5La>dD_iYwFIi^BRRE{>C%KwvQK5264lvmRj%HHE2*3^oi z9}QuX`Iae?VCHP_?^w_YTSvDSE|xNurQ;PTOR4lPD5{W(nx_<ff{J(L&N`)3yq-?#W~7|jZ&_C zzBFmeNzHS-==0fjVtE70h0LF9<+Bu@zQ58FQmG9`w}w3VxEHffk<$==znxe@GtS>kSCODyCS{@8XQO3<1&JfN|Pg`#T$-?ssG8S1=^BR7xu zxl&VOQJY-l+OGs#EV|Rwl@pbjfVkFPMuJzBHgS!6Aj3Y@8m zbCS$8<<#UGna>Z9EJ?J4IkQ_#E{P&Ha0RO(F^bW242*d1(R6eV{j+oU4zUg<<){@g zcXVkfuXxw>2jUap4#VuRh8dFa1E5Hp8kFmVmtR9#Lu%Nc(5L-&x#6+Cn6m;}x1^&d zoeP?|6h}VATs24smj_ws9XbWe8w#rPRVMF%cmhKqWWNGL`mic`y27?Uz%p5s)9fMI-?K9kLse z1^1iI?PU?bXLJ5*Xx-mE@iy24_%<;(+=ve3A<*^Q%{nOZV4H@MEr1>10QU$$NFSD1+gB)7UD$Fd97;U!B%2%-!uOXf4f z*i+&Nz5Or(cn-iNdNjYnO!A(zR{QR<~$`Al$u5n zjL8O)Dx{`XZIuzp%E+jAy3KpGGlg(`vgVQDDS@Wx=toF9P@;z~xk$EK5FmH=VHTDC zh3P(Tn%T;578`JAIep1WwFA!?9$NGWZp6$aJU`u#m38!? z1I(7;Yl?VWSJrV2vk&b9I$aG93noWPB#Y8vMjH*3!JoOU7s#keQ%!!3hf7v{?so8X zKD#r#wKBX)VlH*3WmNmQ1bpcp#?U*f_4Oh++Pu# z;Um+pBc|tI{&yFkNOVNmIUvE;H$9TA?;NMG-p1k9WBU3miWcdx*$>9RG6PDZ7|xqgdN`~i;~ zH-cu?y%i+C5VADL;-0nD&%;%A7;UA2PB=wa^ToUe9)3qBMJE%POi}V8=1#3KNtCkp zqQ4AzYZ^htaY`&ZDp)Gl z0@O4Pl_P#ECx{v?<#B2atC$%f1SAWR5qS=j$tGgl$ruB8F@kUOeE7rXjGMpTjAH&M z*cTS90Ii4pHlOW9-BpQ%IsRRScapm$% zDE^t=dd5E=Tnp5FZBYBcpjI4aH(ZV6=4f0-;9yhtoA(I^qkkCf$s@Hi_A{85m7HhA zJ|grH@8kZfdPSW)(K~@Tq@oMZ79?1rVah<`YCvt=m7n-_hG+`Oo@?S_ zS>@j!N2-WQZiXHN!dI>`uQT`s1X|90qjqFw2}IJJLB>`7)evp1?~j@t9+D~-mY_sg zr6C3CT-4)d%{SK;1}#EMqpj!I3iOKH?}5TMI6DxiQ=<_Iepr`hnCeh?lm7fAko($A znZ%ktwIn{AlICa`DskYHy$sT#X%s_+(0$x1^T&XwKIO$Ef6DN@OoUID>md9zMV@I$ zg?wo!x8%cGAx<(F&o>aBu5*V;Fat8k6y;QL(^zOJAFQ8FA`BTQm-$H)m#g0aY0P(0 zoxeaI=&t|orEB0-Sn4L&C@rinBi-MSHG{`?X5!c5gnCc1;VxFn>AGtI#9Y%MaD*@& zy!l8MjmI2BH|2t8y|-~joBjj zF+x82>yD_y3zfn0027Dd6xX2uFx8JqLkEk8Qt`dP!LlvY_x-rCKAjZsK0x*_z}#a< zgu*Fx%p!t?w;ql-yOD^u=0=C5^r0(Z!RFw2Rjp}!KVy7#mobK43?z(Gp3lE8P|va*z%3KUOJruDDwn{bbsQzyC!nyDN(pc&*VbNq(o z0$eGk97I2iXva(u{N!=wMCO~W4Iy!ln;x9V%3B+#w0yX<2@&F&Z*p~ux|QAYIDtPY z%u<1DO{L>AWJ9X0DF|)4ZXElwmUk)t(1l7g$0|j(t_q}hyHgX>YNZwUg!G|(q^P`L ztk|FVHN&*dsE+Wt&Dh@@96p{86_E`|f1k9l~6RYb`y>o{ZE%{=J3M9$}>E7~caZ*%7}FN{AB&!&!@% z8H6nVzeX3(`p%AqHt%iGlZR@<2atpUh3Wr1LH~bU4YV=9JV`ypf$%)QC=YiBA9s$E zD@EQO4d(yZdJb334Um-lXZrL!WruwY-MI2#y4T}CS0qzzV@;Z??mjwb%Z*5u!SX`*%UUZ!LfByyS=RZl6?&&(L zm)apX`oI3mK2WgzZ{Gl>LR*dtK0G{8O8EcK)%)-RZ{Bz`0GB9WOpI;;{r^s{Z}Q&= zw0|0RBU+#o%w(y^_i^x{r-tdx%SatJzy9~ZZW~JVqTOd&_^iS{Ueu(KOF40xaA9W3 z%SlOw&{In~9%Qz6b@Qk~=;m<^W0?|za}@wJb`=M_c}Y2 zMLhMLq&_G)Dw-bI=`n;Xm>;b$s!`nbgYTCm9Pm}hxp)A}p6{8N4Mo`(IJ2%#KS_x2u0>RQaB#w9-yl+%So*L9ehB>ZsptD#19LFM`BK6(m1}6)v#`u8p7C6(~<2P-T`<`mGTi^EndW2~c<%$ucJ!~j$>4pT_g%Rl&{7*5ce@G7IdS+#+M|hZ*kF`V zhl6N|y|VIiiByl*2zZGITzZhw&P5$^1 z)1;T-Q=c<{pi2VAZEzL4lA9>M30Jf{M)Zb_2BuiB0FH$@0TvrUyshuQGJW- zsa6b@5)QRqfAY}5QXOQLPv74AwU|2pF0SG6N`YKSO>AIiuR{e9tn-?gXWm3R#E6@d5tfdYJ_8%3(@=h_VOh#C+bI6i>I=>-AWfeF*(OfUELL01mm{Ii&h{!6 z+7aJ`v>JAa@xN8Gs8&OnsIHX05{qS+eWE?{6;C#KA4%eP7AC*8mG~}w>s%D!1!dqO!LkS*|d!CX#b1$MIIBY z-r4bR<*Dt>K0i-n^1iMBTQSLr&S)1Ev`uIR9Kj~;&0HFw!7Q}qwaop+}U%eK!T>JVB;O#NxP zNE~kSA5}@FPKj8G=|aBRDmw4nUUrFkjbAGE*A?u0kB=sCdRgx5;LhlUj4T|J0N%va zi0FN!*P9PXf6mB%Z5D&h;BlTMHxstl2)HMnR%ux|qEIuA9Z>bd>t)^c8ez2I=*i^S zUB50$62NwtFuMugCmV{BqF`q(IIBZ}YyUc9%}_{K9nm?k@Afj>gyU$uzb>=zCiWMS zex+OM3*Ne0I32$JR)LHwi9`BwW%#le>BU0Lb@oLL&#W_RvsdfxPX>R|6{!=sq)(o6 z+zj_HKeFbLOdFNXJS}$AQ`JI|Oe}R6P;ak)Fk-IN73t@)Ahgshy@nd5xbPNB$6oH& z=5r@7P2O}e5HLPbO-3D3FLkzOr%HF6=*^Qa4z9T%`5iW%HI!M*wI9edc`XH>5?3z1 zq*?%X>d3Usgvxav?K*JtNi}TJDE4+`SHa4Qwm?4wbKU$sQ3^SE=s& z-P2V(I{py$LsC;(Ef;<8yjmUdB zs)4+dszJ-NVfA+v8o&9Q`-HeSus<)QD}4LFNAPF$C&LU!-nYk_AmyR}@6pDG!=)=F zU=p-2b@mQP+%IcOwB@+)LT(0q^WIAWsRc@)VPR?};>dLkso^rxpv797(gr<~HAfAT zW~r|eeDQH1^0~`w#IQNYG|PXo0x|d#h$`5aAxfq+oHXwwX6|g!zrJ{|k{+(Eu`=Dz(Sc9(c4G-U~)XGhOzr0I4IxUG{YX>PI?pnt~1 zQ~=pXk@uOvZ{-cbj9KB;-DvEME4nFqfC0#UC#H2Z_LQ*~H*suqe&7yW>(5)EC5QhI z60>R>7Ku(5xb{=Yg#pWnaFYDw8JVGeI|=q)MOz}`iyKlj4XGg^>P%Fc zixlT{_mec;x=XD|c(_*;i%TA>>GB$TV#COgwtZ3G=ZoGy5~E*M_ISbjq<514@h>iv zhJGM+Srf+d{v0-w_h}ok{#|qF_PykEKW?#NDUV?V?`b!?D`&;w!T={{^HY_koj>7| z!t06AT_1tI7H|!wq1}-+V&Hweh@UFUD#ucI)M|AKcK>!BP4TW*)k#Ee9LYdd>D^~J zFb#JQkhidtTg?X+e8+R7|ESf_{MID8^RDIy%zdWgXSE9? zEx==n?*dN0$e=8GK@y86tSgWIPG;ZP06%VR9}^n!7RF&4-KmnHeAo@I>;>p zcJst!-UsV6-RAOQ>%?VdhOuxH_b}~q1BUT1md~xv2~#g+^kL^4m8&;q(mN8Qsdf_eH8+?@i7zj5uwe6=|s`XpLiqKrbZ5J4Z^3*dt>GBd3f7(}lJRClUh7n<4 zJk6&p>THu>wAGAPu?lMHrwt=h?XQfSJQ^F-KK|<2m+EYV=$XU~;MwrEQsj3b0j7sL zrfkZN@m#lLG)jO*D#}U5igMQ9Jka6gpD2}Ak^iHoq4%sjPy?_fHXWmf$|ydE6{-Nq zi01(k6SG{R0(=@>F*dEKnl3H7P;PR)D<~3HZpHh-p0DK`$C;n_I3N*Z`|yTR*?E&Ixeqn6Rdfwi+h zO3nG1hYKGQ|5j?pBej zLb4`(_oR(08e=mN*PC}eT-%~!|7&+co&ByZu8MEUr!%M-AFA|ZNYnWH_!FVwk*3pT znv1kRiger#Gkjk^fMW%0CBoayg4nF{DOLnrI8-YbR7Kl$S*!0O=DP&_L!KB=@dZ#u zN<&W^)}U;CN58XdMB~kF#aoJZVz48FBR%Hl4wujF+LH;ZL9i%E!yT${DJ#IRnphMY zfwm1mdJVoYzvI{~^WUc1_Iy^otIEFf=Os-dR&+S~S~clVw!2A1)aqISc!5ferMdQ4 zDL?(CsZH3alj-&PQEWv4E*gEyN}~E(G*()u^eq_ObACr-EXc3%DQxd(7V!WZ=P)JdqFvMelBGLWa8S2;U$}i3IcHS7al_(9{4#oZ_Ho`GOR? z9%9W$BbE6Mq<>{jfpxZ% ztem0-ujdnVSS(gEOSHM3U zUZ3|N0`@=J=7m#AW1Q2t>8IsPxmKCbz|E;22T2I=TOUShoSv>{-B9CIpNZ3(!)vMU z7D?|eNZE8JwAgsZiwa!SzV9KEC?_z3%z0^E5D1xtj(qb2IMq?ay_?)PX&R3wO(FC za!b$Jy2SOE4GXgOr^&oH2!5TI$D1jx);ltYw}O&8 zTjoDP>YJi*5j1Xc585I$Y22AyM37sU9*|J!qme1Udy$LSsYG=YjpKy% z>gd$QCWt;LB(R)QYhqmZZrMzJQdmSEn7yBz$f83gu>8z9RcDS7##*iI_e+oyv5M+! zp?)oXEvTaYCYz;FvoD6d~gPDn8al z(mfsy*yGF1D)cnNS+@ytd2T*=21&yU0={k?MRahj!07O@fMMm5fXTwoLh7tQ8N)tr z-uc9#$j6)+@v^&45c{|3ElO(=hY6ZE_ZbvCMe))57IstrUHN5yh=zrRM^5Na#fgD_ ztvk0Px#K+dVzOXyR^j@{Cr=k-VQNvIPFkC^t-pKc5Eo7!5SyH*TvlUQla1LXd4iWr z+(iu4mn+oXpY$lkCfC2~4pRdDY1(x(GcDXHmum}HRHeLA<9oc)!@!5P(%G^siI0); zv02pQy)fZHu8q!&&qACem?k0#;5uYGJdOQ{*=05ke`{!{iXxUWRrcmLOGJ*Ao2v_h z>P@e<|Eb*hjxAE=FOF%u=>X6@>wF{Yv)LG5JdGPYDRZ!tskvnM zUduV@fwY>>TVP`$nDeA>_p58D&X;A`-0{Z*{J=-oIcm&j-DZbhZyxJVvU*!Tsim!m zs&(YGq@&pM!$T_Cz|9U;9~he>&^cRaQKh0(F5`5#zd=~+pdGp;yW=0fN+mTMIHTb@3*rClP#ii zg*HK-t1ljUPLLVyA{>~>(n-DEY%8?|?oe@ONyRRuum+>!w9RD(?o?KlcZ4FGX6ve946Kh}RtCI-@4 zJf;Nxs`$zx0LvF(yOf)3bLTM@-dGF(AC5`wq~eynuWtf(Y}(%!>sC{o;~r!w``aue zYulWtfn6RenOO>bYR44_Oh70+SzACap!W)1(r9V6fHa0w&ZOA6^mYpnRm68wE@}%> zd*cfIg5Qdln_&w0_r)Uh(JlA!)NGn@l*3{@zj^=X+$z+2?)tNxvEX)HtnUXgK7z{z z(Zv{brDclvfPvaeg8*CQ#vI?qPI$IirsMCjX`u7S%2-OM=A`4af&^ZIkN`>$EGBEHTSg0l$@tWLIFQToyN^h0atl%i3uZ)T*A7fn+-&zi|BhPM z5G|7~S`AcY+KSrDmD3sg(6eg*O1X;EASyo3;owuHUikTP9YXfqs}L=8(DG^#1sr`N zW|re%cStg=eik@=e;<{|p1uiwJWxgk-z45K5n*%5lXsjb{{pFQO)vfoXz1YP@xz^4 zwb|uOcgq+0NzKQKqyW{jb+Gzeb=%YzH_;QvQ`U^FJ==4u4=DB2PR_jV>+XDV#UNvu zhl||RE>*Sd8}q@4xd!$G!RDR_(l><6%+Bp~YhGa*M+w}ON0{`YmCead%G#3wW1xeiM~f$pl`AMQd^$d}tDU(Ob>0FEJ1E}_@ti0vza_4^PSOdfxD!wqhwVds?V(a>Z1R7E4H8%1md@uPyn0QXR_P zZjlcSZ2va+-QV<&#{*1v4@P08%06;3Twz6nvN z?sYpC`QAhBbylr+=_H>o?0&rVDvj5<#8c1^4RZIl$>Me;f!{!TwBr-#@fHY_zL|oj zIv-}q@7xWR{(-mk~!` zO9pC$=jlkGKzr=XybqAQ47@kzE4=u|S}@ zq=awrpSu|mz)Ga^LMl}!TeY>RU$swwf<$RuZH~tHp8S@;h;VfXB5Z@M`SMl>QSz` z$)#VsRCUbOrFORI{?l_aO-f&^Jui>s9aB%?IN1@WPEN}vS5^G^H{+Gmy7=c<4a~=X z`qfml>ljWT-ZIy&=H&ei@0FprvV* z|K8a1l_FRaf296uWT2soh;{v;0G?G1+HUrl+_l?KbXH8_&Nz&}V5F$j(Tf_Qk^AM$ zhWQQuz5Ekm;+Cf6d&k@QUEEO>1Rj#9APQYE(BIOaD~~3>&;akO_kD2m+Q-;xJ@ZqY z9=%}JS2ste^(*O@4>8m4?|~mOsnEeY#us^X*+66#VYSWbWx!9;{v8?hy`DXh?ep6H zS(#SfBiFkj{6?Xj2D79it!t)L4g08TJ-6M|s6JJW_Z%D`#Csu7kWe2{=s0a&y5P?d zp1c4%PwLK6#k1_2xzt>!JEBvK`ji$_nFoBYs4yX@3gTe0Fa%wFvjL2~MZ`vzVm|Q< z)Ay{`T+#BHe_kqs-Ku62v93PO(`RT(aC4OCjLGKPX5E21i+Z}WT)X0eK@o>EO36N7 zFknolkh#rwL7B71dhx*fLD$XOX)$~JYHgv;29sB(FJz9BG-?iC(>^upU>_s4kcQu(I8J8!LnoJF&Aj39+)^B!|DDF3)TuwhyNcGU^oy$psOGHu4beX9t;) zzRPmflcEo_JF3lVa}MHq8?|M398VTkb3QZ}JM~i|Nq9qUeSqv$txGm5%!1kJamara zPR<}k;mZ;#{uakJ0u_E` z4c)(Fn(l?u#dC8$tgKAeHG>V@8MEg($pTL};7zj?{oVid#q46UUpd8i@bchRE_}SZyu)@npD-CE!Peoib z97IxUchJGVjgvd5U5P_&Co(Zf=PF%^76lgP?fZB#v3A3Ig^O9eLJ|}gSXFsx9n)--Km{9%LzM`BXP>kj{Q9_qlHfi5fE}^s)z|1C5YXfyFyZ5!32*Ai(oi5_vT7+> zG-^jYmYLzX3_bpfGOsl)>g_VKIaz_jvSU=o}$<#KR&No8o7h8fxyzf{a z>;9Pg>4rzm-L&G}vb{2L87~&G5vc}i#J|X#v%YmommL)H_*Y3(+r|mxbQ*aA9#*?2 zbT>N+6iJU=iDmAgYfmA(vTi3>(*pz&Zc&KLUFAB6PSHf=xf@&FNW}SJE=f^%doJvw zx7Q4r$kMlqoLOKfw$_Ou(}tQz$6fxUO>%|g#-22tDLU;a&U zkW#&T@$$v~E`o3XlkCmU`$WUhb67W_t@NbjkzQY99nost>u!}?^ z%>2wg`dt;#&p7*Un6xk{m|FcxOgi=_CiR>rlP3s; zJ&$Xb>HbG_>Ye@jmUYEn?+=^*liCo`2qNDpDiT(=>t0yZ*&|4|RjBrAKv zNOOi8>y;TzPfH_TtINUUro8q=Dvl|JiRi}~2Rcn{pC9iiboVInmL~6;Bi7pTT|@UR6@M0j8E z)7lw#p^bl-G6l@cg?cA)u)cr)=EZ?MV)f6=&ibxM*WurGD3@FrJ<@b|wLwWyiZVHD z=ym?~M=PP%NyG8|2_@#S^#StPw0`a{^fG$)`!gjd3Q=H0p~-AVm2TUn)PA)7&WDb? zNve8yvOjT3b8`<{UVENsw6=b+s!6JOGX~`-tiA>yM|Mb;FTlovBynWr%i@O ztr%NB#+Oz+DWIdBHdK6W-YR{TvrQVQ(3JiYQI&lAlmz=V_Rlcp)Ul;4m&HDDk0=H9 z2_qGyS$R-gxn^))me}Y8_%!$C%XAFsT@U>e*rpV$N#D_JC;p&!Ax@EIzxpesNa}xS zeD2|VqcGAHoZu8Q=l5CW^o%#P@zPC14vxlaMKQGG1gkVN!5>n8jWW0goLBu+5NMFj z-j{pgEt7iMLS1Fj&PyzUTJO{Z);N08TxS2e{i!aB%z;FrY+oIIX0uKt?1Iz z`2KySKtZwQyD~cL4ENZT-rYUh31ExC(ikx}v~ZydW8&OCuy&YS?78s(YkMDks_P}F zy=$W)_1V*sxwXBliJhCn*^-t9aE!rz`f>~%Jn%K&AK$8F_w%xV0Osy|L)}^^*q*z5 z)r>LLV-$fqX054Y-c3d;wvp$iq9j2X9&7h7H|b?BRlmmkh?WaG1LUO)xx5DMrMX6! z#`JNCf!#iA3E4G!jDh7z*Dj@&)RV}-o>ygf@h-)WVe0f|NFR*l5-hq*aP6r=DWTlE z9Ynb4mG2#3AN4X9kQjO8rkib@RJ~EH2l3TF5FzSvnT(S!Ql9e*%Cs1p5efLmPMbd{ zBJ_2O2c|t?qJb+pZN`_xqcnSeGTUdjxS~W|NWs*IlX=dhETf-Vd`V~U+7!_2+Avpi<0Z!#*<{9avt7@5d^Z|6T8&6HAv*eHX>0d) z4RIjyzcuvi1K?STK_`ubZaeuI{h_ieF$hK`r|R>Z>`-fVN)-fj6~YlfutOE@;mK4O zadR5K^OHDMtHS`nEPOX2UwY)zkKdw~Tk|_Ldj#+awm#UbFxqA(S+ap(F|vdRz{@uy zkJw`aXk{5PdjaZq58n%VjCsu2GrY=_M9$uV@S#I!8eM80rJ0lW&+1tK_!GEtPdVcL zDJiUD_h+_8ZgT*?=*9sU-k0ty_VF8zWin9U4g3Q!JBi>B>}Vi-^YbobKqgS7nHA52t$!za*{co?{Z$;HduxZ9!OFPUGT+dwu&_H7TPG5li zNYTY$EdmE$kvU4+SP?0D`yt^rf)x=I6>y)SruP6Kwo2 Date: Fri, 21 Jun 2019 16:36:00 +0200 Subject: [PATCH 11/64] move setup to docker file Signed-off-by: Marco Bernasocchi --- Dockerfile | 34 ++++++++++++++++++------ files/{start.sh => docker-entrypoint.sh} | 0 files/lizmapConfig.ini.php | 2 +- files/setup.sh | 29 -------------------- 4 files changed, 27 insertions(+), 38 deletions(-) rename files/{start.sh => docker-entrypoint.sh} (100%) mode change 100644 => 100755 delete mode 100755 files/setup.sh diff --git a/Dockerfile b/Dockerfile index cb7c302..9c6fae2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,14 +30,32 @@ COPY files/000-default.conf /etc/apache2/sites-available/ COPY files/lizmapConfig.ini.php /var/www/lizmap/var/config/ COPY files/localconfig.ini.php /var/www/lizmap/var/config/ -# copy own scripts -COPY files/start.sh /io/ -COPY files/setup.sh /io/ +# enable self signed SSL +RUN mkdir /etc/apache2/ssl +RUN make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem +RUN a2ensite default-ssl + +# install lizmap +RUN mkdir -p /var/www/ \ + && curl -SL https://github.com/opengisch/lizmap-web-client/archive/$LIZMAPVERSION.tar.gz \ + | tar --strip-components=1 -xzC /var/www +# Set rights & active config +RUN chmod +x /var/www/lizmap/install/set_rights.sh && /var/www/lizmap/install/set_rights.sh www-data www-data +# use default profiles.ini +RUN cp /var/www/lizmap/var/config/profiles.ini.php.dist /var/www/lizmap/var/config/profiles.ini.php +# Install +RUN php /var/www/lizmap/install/installer.php +# backup default var folder +RUN cp -ar /var/www/lizmap/var var/www/lizmap/var_install + +# change jauth.db +#COPY files/jauth.db /var/www/lizmap/var/db/jauth.db + +RUN mkdir -p /io/qgis_projects/ -ADD https://github.com/opengisch/lizmap-web-client/archive/$LIZMAPVERSION.tar.gz /var/www/ - -RUN /io/setup.sh - VOLUME ["/var/www/lizmap/var" , "/io"] EXPOSE 80 443 -ENTRYPOINT /io/start.sh + +COPY files/docker-entrypoint.sh / + +ENTRYPOINT ["/docker-entrypoint.sh"] \ No newline at end of file diff --git a/files/start.sh b/files/docker-entrypoint.sh old mode 100644 new mode 100755 similarity index 100% rename from files/start.sh rename to files/docker-entrypoint.sh diff --git a/files/lizmapConfig.ini.php b/files/lizmapConfig.ini.php index 1690637..a1e40f0 100644 --- a/files/lizmapConfig.ini.php +++ b/files/lizmapConfig.ini.php @@ -46,7 +46,7 @@ requestProxyEnabled=0 requestProxyType=http requestProxyNotForDomain="localhost,127.0.0.1" -adminContactEmail="marco@opengis.ch" +adminContactEmail="postmaster@localhost" ; googleAnalyticsID=UA-1234-1 [repository:demo] diff --git a/files/setup.sh b/files/setup.sh deleted file mode 100755 index 77ec350..0000000 --- a/files/setup.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/bash -set -x - -mkdir /etc/apache2/ssl -/usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem -/usr/sbin/a2ensite default-ssl - -chmod 0755 /io/start.sh - -# unzip lizmap master -tar xfz /var/www/$LIZMAPVERSION.tar.gz --strip-components=1 -C /var/www/ -rm /var/www/$LIZMAPVERSION.tar.gz - -# Set rights & active config -chmod +x /var/www/lizmap/install/set_rights.sh -/var/www/lizmap/install/set_rights.sh www-data www-data -cp /var/www/lizmap/var/config/profiles.ini.php.dist /var/www/lizmap/var/config/profiles.ini.php -# Installer -php /var/www/lizmap/install/installer.php - -#change jauth.db -#cp /home/files/jauth.db /var/www/lizmap/var/db/jauth.db -# Set rights -chown :www-data /var/www/lizmap/www -R -chmod 775 /var/www/lizmap/www -R -chown :www-data /var/www/lizmap/var -R -chmod 775 /var/www/lizmap/var -R -/var/www/lizmap/install/set_rights.sh www-data www-data -cp -ar /var/www/lizmap/var var/www/lizmap/var_install && echo "done /var/www/lizmap/var var/www/lizmap/var_install" From 60154120141b99adb420b4d06962cb3f2ba729a3 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Fri, 21 Jun 2019 20:24:16 +0200 Subject: [PATCH 12/64] clean up but ctrl+c is not working Signed-off-by: Marco Bernasocchi --- Dockerfile | 6 +++--- files/docker-entrypoint.sh | 9 ++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9c6fae2..3826429 100644 --- a/Dockerfile +++ b/Dockerfile @@ -56,6 +56,6 @@ RUN mkdir -p /io/qgis_projects/ VOLUME ["/var/www/lizmap/var" , "/io"] EXPOSE 80 443 -COPY files/docker-entrypoint.sh / - -ENTRYPOINT ["/docker-entrypoint.sh"] \ No newline at end of file +COPY files/docker-entrypoint.sh /usr/local/bin/ +#RUN chmod u+x /bin/docker-entrypoint.sh +CMD ["docker-entrypoint.sh"] \ No newline at end of file diff --git a/files/docker-entrypoint.sh b/files/docker-entrypoint.sh index 3d34643..581ea81 100755 --- a/files/docker-entrypoint.sh +++ b/files/docker-entrypoint.sh @@ -1,7 +1,6 @@ #!/bin/bash - +set -e #generate config file - VAR="/var/www/lizmap/var/config" if [ ! -d $VAR ]; then @@ -10,10 +9,10 @@ if [ ! -d $VAR ]; then fi #set-rights - /var/www/lizmap/install/set_rights.sh www-data www-data +/var/www/lizmap/install/set_rights.sh www-data www-data # Apache gets grumpy about PID files pre-existing -rm -f /var/run/apache2/apache2.pid +rm -f /run/apache2/apache2.pid service php7.2-fpm start -exec /usr/sbin/apachectl -D FOREGROUND +exec /usr/sbin/apachectl -DFOREGROUND From 6ad3d757eaeaf8bc3e3e190801996799f617e75b Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Sat, 22 Jun 2019 18:32:18 +0200 Subject: [PATCH 13/64] all cleaned up. docker compose works. added demo project Signed-off-by: Marco Bernasocchi --- Dockerfile | 20 +- {files => conf}/000-default.conf | 0 {files => conf}/apache2.conf | 0 {files => conf}/default-ssl.conf | 0 {files => conf}/docker-entrypoint.sh | 0 {files => conf}/fcgid.conf | 0 {files => conf}/jauth.db | Bin {files => conf}/lizmapConfig.ini.php | 4 +- {files => conf}/localconfig.ini.php | 0 {files => conf}/mod_deflate.conf | 0 conf/qgis_nginx.conf | 113 +++++ docker-compose.yml | 55 +-- projects/data.gpkg | Bin 0 -> 135168 bytes projects/test.qgs | 650 +++++++++++++++++++++++++++ projects/test.qgs.cfg | 135 ++++++ 15 files changed, 932 insertions(+), 45 deletions(-) rename {files => conf}/000-default.conf (100%) rename {files => conf}/apache2.conf (100%) rename {files => conf}/default-ssl.conf (100%) rename {files => conf}/docker-entrypoint.sh (100%) rename {files => conf}/fcgid.conf (100%) rename {files => conf}/jauth.db (100%) rename {files => conf}/lizmapConfig.ini.php (94%) rename {files => conf}/localconfig.ini.php (100%) rename {files => conf}/mod_deflate.conf (100%) create mode 100755 conf/qgis_nginx.conf create mode 100644 projects/data.gpkg create mode 100644 projects/test.qgs create mode 100644 projects/test.qgs.cfg diff --git a/Dockerfile b/Dockerfile index 3826429..b26cfdb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,13 +22,13 @@ RUN a2dismod mpm_prefork mpm_event; \ a2enmod fcgid proxy_fcgi; # copy config -COPY files/apache2.conf /etc/apache2/ -COPY files/mod_deflate.conf /etc/apache2/conf-available/ -COPY files/fcgid.conf /etc/apache2/mods-enabled/ -COPY files/default-ssl.conf /etc/apache2/sites-available/ -COPY files/000-default.conf /etc/apache2/sites-available/ -COPY files/lizmapConfig.ini.php /var/www/lizmap/var/config/ -COPY files/localconfig.ini.php /var/www/lizmap/var/config/ +COPY conf/apache2.conf /etc/apache2/ +COPY conf/mod_deflate.conf /etc/apache2/conf-available/ +COPY conf/fcgid.conf /etc/apache2/mods-enabled/ +COPY conf/default-ssl.conf /etc/apache2/sites-available/ +COPY conf/000-default.conf /etc/apache2/sites-available/ +COPY conf/lizmapConfig.ini.php /var/www/lizmap/var/config/ +COPY conf/localconfig.ini.php /var/www/lizmap/var/config/ # enable self signed SSL RUN mkdir /etc/apache2/ssl @@ -49,13 +49,13 @@ RUN php /var/www/lizmap/install/installer.php RUN cp -ar /var/www/lizmap/var var/www/lizmap/var_install # change jauth.db -#COPY files/jauth.db /var/www/lizmap/var/db/jauth.db +#COPY conf/jauth.db /var/www/lizmap/var/db/jauth.db -RUN mkdir -p /io/qgis_projects/ +RUN mkdir -p /io/data/ VOLUME ["/var/www/lizmap/var" , "/io"] EXPOSE 80 443 -COPY files/docker-entrypoint.sh /usr/local/bin/ +COPY conf/docker-entrypoint.sh /usr/local/bin/ #RUN chmod u+x /bin/docker-entrypoint.sh CMD ["docker-entrypoint.sh"] \ No newline at end of file diff --git a/files/000-default.conf b/conf/000-default.conf similarity index 100% rename from files/000-default.conf rename to conf/000-default.conf diff --git a/files/apache2.conf b/conf/apache2.conf similarity index 100% rename from files/apache2.conf rename to conf/apache2.conf diff --git a/files/default-ssl.conf b/conf/default-ssl.conf similarity index 100% rename from files/default-ssl.conf rename to conf/default-ssl.conf diff --git a/files/docker-entrypoint.sh b/conf/docker-entrypoint.sh similarity index 100% rename from files/docker-entrypoint.sh rename to conf/docker-entrypoint.sh diff --git a/files/fcgid.conf b/conf/fcgid.conf similarity index 100% rename from files/fcgid.conf rename to conf/fcgid.conf diff --git a/files/jauth.db b/conf/jauth.db similarity index 100% rename from files/jauth.db rename to conf/jauth.db diff --git a/files/lizmapConfig.ini.php b/conf/lizmapConfig.ini.php similarity index 94% rename from files/lizmapConfig.ini.php rename to conf/lizmapConfig.ini.php index a1e40f0..f35f376 100644 --- a/files/lizmapConfig.ini.php +++ b/conf/lizmapConfig.ini.php @@ -4,7 +4,7 @@ ;Services ;list the different map services (servers, generic parameters, etc.) [services] -wmsServerURL="http://qgiserver/cgi-bin/qgis_mapserv.fcgi" +wmsServerURL="http://qgisserver/ows/" ;List of URL available for the web client ; cache @@ -51,5 +51,5 @@ [repository:demo] label=Main -path="/io/qgis_projects/" +path="/io/data/" allowUserDefinedThemes=1 diff --git a/files/localconfig.ini.php b/conf/localconfig.ini.php similarity index 100% rename from files/localconfig.ini.php rename to conf/localconfig.ini.php diff --git a/files/mod_deflate.conf b/conf/mod_deflate.conf similarity index 100% rename from files/mod_deflate.conf rename to conf/mod_deflate.conf diff --git a/conf/qgis_nginx.conf b/conf/qgis_nginx.conf new file mode 100755 index 0000000..c7c6f7a --- /dev/null +++ b/conf/qgis_nginx.conf @@ -0,0 +1,113 @@ +# -*- coding: utf-8 -*- +# vim: tabstop=4 shiftwidth=4 softtabstop=4 +# +# oq-qgis-server +# Copyright (C) 2018-2019 GEM Foundation +# +# oq-qgis-server is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# oq-qgis-server is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +user nginx; +worker_processes auto; +error_log /var/log/nginx/error.log; +pid /run/nginx.pid; + +# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. +include /usr/share/nginx/modules/*.conf; + +events { + worker_connections 1024; +} + +http { + log_format main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for"'; + + access_log /var/log/nginx/access.log main; + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + # Get 'port' from `$http_host` + map $http_host $port { + "~*.*:(?

.*)" $p; + default server_port; + } + # Get 'proto' from `$scheme` unless 'X-Forwarded-Proto' + # is set by the reverse proxy + map $http_x_forwarded_proto $qgis_proto { + "" $scheme; + default $http_x_forwarded_proto; + } + # Get 'https' from `$https` unless 'X-Forwarded-SSL' + # is set by the reverse proxy + map $http_x_forwarded_ssl $qgis_ssl { + "" $https; + default $http_x_forwarded_ssl; + } + # Get 'host' from `$host` unless 'X-Forwarded-Host' + # is set by the reverse proxy + map $http_x_forwarded_host $qgis_host { + "" $host; + default $http_x_forwarded_host; + } + # Get 'port' from `$port` unless 'X-Forwarded-Port' + # is set by the reverse proxy + map $http_x_forwarded_port $qgis_port { + "" $port; + default $http_x_forwarded_port; + } + + server { + listen 80 default_server; + listen [::]:80 default_server; + server_name _; + root /usr/share/nginx/html; + + location /ogc/ { + rewrite ^/ogc/(.*)$ /qgis/qgis_mapserv.fcgi?map=/io/data/$1/$1.qgs; + } + # Direct access without map rewrite + location /ows/ { + rewrite ^/ows/$ /qgis/qgis_mapserv.fcgi; + } + location /qgis/ { + internal; # Used only by the OGC rewrite + root /var/www/data; + fastcgi_pass localhost:9993; + + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param QUERY_STRING $query_string; + # build links in GetCapabilities based on + # the hostname exposed by the reverse proxy + fastcgi_param HTTPS $qgis_ssl; + fastcgi_param SERVER_NAME $qgis_host; + fastcgi_param SERVER_PORT $qgis_port; + } + error_page 404 /404.html; + location = /40x.html { + } + error_page 500 502 503 504 /50x.html; + location = /50x.html { + } + } + +} diff --git a/docker-compose.yml b/docker-compose.yml index 9415197..108c304 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,33 +1,39 @@ -version: '3.2' +version: '3.7' services: lizmap: - image: opengisch/docker-lizmap:3.3rc2 + build: + context: . + args: + lizmap_version: 3.3rc2 + #image: "opengisch/docker-lizmap:3.3rc2" restart: on-failure ports: - 80:80 - 443:443 volumes: - - project:/io/qgis_projects + - ./projects:/io/data:ro - var:/var/www/lizmap/var depends_on: - postgis - - qgiserver + - qgisserver - redis - links: - - qgiserver:qgiserver - - redis:redis - - qgiserver: - image: "openquake/qgis-server:3.6.3-ubuntu" - environment: - QGIS_SERVER_PARALLEL_RENDERING: "true" - QGIS_SERVER_MAX_THREADS: 4 - QGIS_SERVER_LOG_LEVEL: 0 + + qgisserver: + image: "openquake/qgis-server:3.6.3" + + environment: + # Improve rendering performance + QGIS_SERVER_PARALLEL_RENDERING: "true" + QGIS_SERVER_MAX_THREADS: 4 + # Limit the maximum size returned by a GetMap + QGIS_SERVER_WMS_MAX_HEIGHT: 5000 + QGIS_SERVER_WMS_MAX_WIDTH: 5000 # needs to be defined as fcgi_param in nginx.conf # PGSERVICEFILE: /io/.pg_service.conf restart: on-failure volumes: - - project:/io/qgis_projects + - ./projects:/io/data:ro + - ./conf/qgis_nginx.conf:/etc/nginx/nginx.conf expose: - 80 @@ -45,15 +51,10 @@ services: - 5432:5432 expose: - 5432 - entrypoint: > - bash -c "wget -N -P / https://raw.githubusercontent.com/jancelin/docker-postgis/master/setup-database.sh && - wget -N -P /home https://github.com/jancelin/docker-postgis/raw/master/geopoppy.sql && - /docker-entrypoint.sh" environment: - ALLOW_IP_RANGE=0.0.0.0/0 - POSTGRES_USER=docker - - POSTGRES_DBNAME=geopoppy - - POSTGRES_DUMP=geopoppy.sql + - POSTGRES_DBNAME=gis volumes: - postgres:/var/lib/postgresql @@ -74,21 +75,9 @@ services: - /var/run/docker.sock:/var/run/docker.sock - portainer:/data - cloud: - image: coderaiser/cloudcmd:latest-alpine - restart: always - ports: - - 8000:8000 - volumes: -# - ~:/root - - project:/mnt/fs - volumes: portainer: pgadmin4: postgres: redis: var: - project: - - diff --git a/projects/data.gpkg b/projects/data.gpkg new file mode 100644 index 0000000000000000000000000000000000000000..10da0290eaab2eca7d76112282ecdf86dd205bd8 GIT binary patch literal 135168 zcmeI*X>1!;Vh8XU>Yx-`roCB*O&!P2^coab)IpIt=tSAj)>x(^kqSx0R=mMrG<>9{ zCTEzLktJo*2DF`Qo1#F00{fvK7F(b|`>DVdZFhn8L-#}XOH%}k7HEMUK#R6O(V$0w zF3{Z;+cz^LH9X{sl5E+lKdpoF=FK~P@0d&GWZzs=OiBuxUY1M}8&rY-#o_!|H@ikSbk%{74Clf8aFm^rH_U5`2N!hzv%n1?}yG?cQm|* z00bZa0SG_<0uX=z1Rwwb2teSl15 z00Izz00bZa0SG|gsT26{<~Pp_%yDNuAFpt?7P4eEM#jmqK{xW+=n~as$<%aVIlJIH zvz$rayq3Ka*ezBdydb0(c47p=^NHNblD&Z#iOw)k@hv>8MiHH?_C6&zG3FK*!MQ1U`CL%Mjspw>Uaw-y!$D*Ce5RXhwb}mD# zQHJzQ;aV=4PTdLA@x(}WIlzjS$Rw78oRGN_kg00wQb{aRUCAqw%Cc`-Z^%-KiUmn# z^nq}sXeXUc?GBtHp%SZ>0_=Mw;xSeEedpi&o64@Mc zwij0e;Z!=4yYWs~xSbPHS-WCZKVWSc7^&#m&&{z)$YeyCt2HDUS=)JAl1$Mw<`^y+ zDQT)W;k@0dzuC6lkdeD{5i7=qs<6mqGNMZPB9k%ZURO6tB{H&k*Q8q}3)jRvEf@^5 zy?;b!r)F5&e3kREzC3WDyrQzGic0gONVTFaRn`@mWHZ@RIwfq>*EQa_BgvYk=M`0A zcZPLZpgL7$N{ns8q~$w5slU9haA)}ocXx7;CEcV3Ys`8kKWQZ1ctds~JtC9)h2JO) zj<5mwaHx8|Hr7}j^3+shYcQPt=i@%iSXU}4=0={5vkqpzAv>N1QB;zrvQm~x?6)<% z4Wg;UT&JX_X;jv!t|@uz{Ga!I%&{-LAOHafKmY;|fB*y_009U<00I!`Uf{R8+r;Eg z$md6g=6cx6Q=wXgUH^*8G$u>(v>1=YsTiA@nG&Vh*@Cz>9gW2!Q`1yhD-@_?Zs^o- zHX*}Wp-^HMeL|BHk@)CDbaY}W7n!*-F?D4!Ha0O8dD~Zb>Gq$fzCZe(w`2e2JM$bX zB=7qH$G-4_00bZa0SG_<0uX=z1Rwwb2teRj5g6-{2fMg>;GF+|#`!*bRw{^cLI45~ zfB*y_009U<00Izz00bcLD1qmDMr)S_cK%Ah`TPG*Ip3#`+7jy^009U<00Izz00bZa z0SG_<0uXqL1jhLuneXEEzXyN+{}i-1TRVQYbH{lc`+& z^Z!2Ke4jk=k|RS1KmY;|fB*y_009U<00Izz00j0S5bc%EcJtYP)@1h=wTL3EZDQ?LD_LI`Hs} zsVl`I)r*z8MbT7BR4hv@XsiBfQ^}j_qM{m9H(TRe%Ls{_KysPn!h(2P z!u51UAjwo#$mB>m)xKSjuoy&0T)ROs>04}rg=C6kg+<|7j${(atT3Fon$G0HBOmPB}Fx_kXkM6>JeE|Rm~)8l$5Ap5OZBpNhBB| zw{8fmq{AuU)>u>gS4kxF3K3HC_iy^V=iX$D7k6WPPt(d`iQc0naifxF#b`zPe-YbK zXb`R}&s+Xlf$YRNAgEKu{eZfP(1~-RnbQ^fRWeb-eD#!r*|!JGefG$md~1EWfqBIJ zai?G%d*dGXzB1JB&yMn(qUPzA@oq^msVHrjn!PNxb~`cB8glBvwUb`|=qUeD+#XD= z>syzH>OD7cbx|O#Yss*kh^R_sN^-*O97(0w_sZg8*i}{bycofnIvVSmhS_dw*Qrum zH`xr*vavmVIU~CBy4^OcC|hiNZi$BS9wqbX6{|vxA~`F!JFmQ!PGxg!PDi(NNg6S%Ga6{#fZv>+PW1{tnJ z3@x1K_urY?^EhSl?PJwykCP8Muh%~_!+-t4&Um#xf0>&4wkT_*jk0Rk&EFb0(B9Uq zQFd?au#N+^*105q9ev?~zS0`YLxvdqjoU(V`?;L#a7VSjn?VUnwY5cUCyPH=L)2tSc2$VMoLE4!2(Q zU@%;g3{#ZZVQrD^-`Fu@F1fU`ha>ff!|dp|U@B!g9K5_bdbvD$IiI_H6&pC3o@cwNj=S$XEhwsDC(+U!Tl-ze`uqRWo*~XN zbn5qqR!LAw-QK~TJol@X*^_vA{^CjGf;>71+|QkH zE;K}TJE?OY^6&Q?xkDO_6T8}3a{7AnIsd^fJna8G*gs=J=xl8$cOWw^P{`Q=kBkU>P>cR!D ze`JKeFSKNAQQ0+i615j!*ey$Y?QZ#X>^j!Y%zrgjds zx6ikyUt43P-sEi`584-o8l0i!7yGS#uxjT}yMAQQcQ>fYvT-ga)fd0elvB&fVJoLF ziyFGW>UZY;S9Y8G-Pcz3JNI`;qr=?qj&)?$NSg{#-Z1P-&PAQF%fh;I)p_SSpLL98 zUwLlY=(Wbh(&P({?YTYK?(=e~JMX9Lf~mV`!(d=?AlLjmm-hq z7{#%z6{0)a+D5K^`o%r<)0)eH`e{=d4cjBWuz#4AtIvDS-C}o};=7Ic+QFrBoqN9> zwNoMu&9Z(nJ?c#X4R_vWSc{je`*!uToyU&i=RNSX*Mr|tF0Vu8We~+)q z`Tm&wzzYHpfB*y_009U<00Izz00bZafyW~-=kapadH;or3(FjT#>a6y&obJ&`;{+` ze=?T%-}pD)_-f>>gl9?87452|OX_><)_!_fNG&9@WAgfIJllNGf2n!%fB)>i^8dX( zp7^a_{=x6Q@+)s8*w(UkmFlWwXtKQS+TJ?<=Y5}Y>5fpNY^<||aIu>Tt#m1#_tIuD}UT&-uane_uSw_golg{4Y=E{{Qzm z-}j&0>Y?NifB*y_009U<00Izz00bZaf#V@C%l8ay)^7WY^-n_*rFcFTnVpivczk+F zj1?v(#kFWu7NctgIvI=6soBW1bN~Ny&i5nV=f}eewS)i!AOHafKmY;|fB*y_009Ub z2Z4T1?*PwxJiUDHz~G>D{?DC04)sPIApijgKmY;|fB*y_009U<00PHX0O$Y5x9w4L z2tWV=5P$##AOHafKmY;|I6eY6|35x$jhaFL0uX=z1Rwwb2tWV=5P-n(6~Oub@ojt5 z90Cx400bZa0SG_<0uX=z1dfjY&i{{3Tcf5BfB*y_009U<00Izz00ba#d9r%0fSq6EmT8$yZ8*L~7n%$mYbP zA(SiT_HatLRf`r1k*mT&GS$d8Lo&khV&a;>LUQT-Rw_W=N-VAjS>j|>Q1XE=%YR8x zZ@V)O6Dv^KY7TTFu6Byp6c~Di2&wt%`{6-<)m!!QRl}6lN~{g{)%+Dnr>c3NjY+*n zB(5$B`=t||f&_+DEl*X=Y6ijTUdx%}QX;cT-Vj#9P82Ibs9G6e)$ghH@KyOB)wdGc zXXUL;FC0qMt&|>F@w{Y8p{n_1R^`5GA73pVq{_OsspR)rXM5Y152ey}Qh{OnSI5@2 zR8%cgEr-1R?d^f;<^d|bzv|ZN`BpNMTS+XE+(G(xfUIPbsRd$}WLU|ENm)_1*iUK8 z`l+bf_WSKnbu;MokBsmSF5C4jR_+!>x@A(;P&CzOS$wIfDOy&NVLJs;mCBUlgxk5W ztd%y(sw<$8@J?7`1`X$FK~WWxWovJ}v%-+Iij(3_*tK*jo698Fuq8z*nldFTspOk0 zg1Zo5;wnIxG-nCQc>D4HG5fXshk*T2{_Mj-nB#C$s#!j zKmY;|fB*!z`!9XT>z8Hz{s;DfMHeS(T|_<8bV$?P+2AkL-uWkb=6|Lo@PDSyMh|E?D9N#2vT+4t9Oe*5EpVBi1fP6qEG009U*4FcBr zKX>|RC<)2{0SG_<0uX=z1Rwwb2tWV=5P-nr60pwyy`F#JhW`4bfACx0zwFQUev>WY z1%aO~fd`W@_UwuC^1#D#?b#ExUt*q?DErjz0+q}SoryJ?WDkRwezWUgg-ltiq@ zT4V%L(l)8?`VjXJi|d31yMPKh4~%#)8QrDPoF{-BX`>yq2=zwW?_)#`+-M_@snPgJ z=P54_FV_0^{+?t|8<<`6n%3cUpnU7iv)?ggKjlR$<=Y<8-DpSWy2ZO8TG8j{S~58+8?tVi8E;`uv=+jQ)KKEsUyhIfkR%zzKg38x`{ zvF|V%GI~@E8GVus$v!B%i^nM)ZgVz`#QN0!%sr{;L1Mf%e_S|>ZZ~;U-EOkA+g-1J rcKShQlBaJXY3h0GXBppT@MvkftBS+GP-OVA->_GoNAF4a< literal 0 HcmV?d00001 diff --git a/projects/test.qgs b/projects/test.qgs new file mode 100644 index 0000000..dc51e78 --- /dev/null +++ b/projects/test.qgs @@ -0,0 +1,650 @@ + + + Test project + + + + + + +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs + 3857 + 3857 + EPSG:3857 + WGS 84 / Pseudo-Mercator + merc + WGS84 + false + + + + + + + + + + + + + + OpenStreetMap_6acb267c_fb1c_4aa5_9be1_d8ceb2ed360e + people_3ce4cac6_949e_4575_a88f_b6349156eabf_76ad2946_df1f_4b3c_a5e7_df35e62d3d1f + + + + + + + + + + meters + + -21039383.75992870703339577 + -21039383.75992871820926666 + 21039383.75992870703339577 + 21039383.75992870330810547 + + 0 + + + +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs + 3857 + 3857 + EPSG:3857 + WGS 84 / Pseudo-Mercator + merc + WGS84 + false + + + 0 + + + + + + + + + + + + + + + + + -20037508.34278924390673637 + -20037508.34278925508260727 + 20037508.34278924390673637 + 20037508.34278924390673637 + + OpenStreetMap_6acb267c_fb1c_4aa5_9be1_d8ceb2ed360e + crs=EPSG:3857&format&type=xyz&url=http://a.tile.openstreetmap.org/%7Bz%7D/%7Bx%7D/%7By%7D.png&zmax=19&zmin=0 + + + + OpenStreetMap + + + +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs + 3857 + 3857 + EPSG:3857 + WGS 84 / Pseudo-Mercator + merc + WGS84 + false + + + + + + + + + + + + + + + + 0 + 0 + + + + + false + + + + + wms + + + + + + + + 1 + 1 + 0 + + + + + + + + + + None + WholeRaster + Estimated + 0.02 + 0.98 + 2 + + + + + + + 0 + + + + 1009180 + 5817710 + 1031420 + 5911790 + + people_3ce4cac6_949e_4575_a88f_b6349156eabf_76ad2946_df1f_4b3c_a5e7_df35e62d3d1f + ./data.gpkg|layername=people_3ce4cac6_949e_4575_a88f_b6349156eabf + + + + people + + + +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs + 3857 + 3857 + EPSG:3857 + WGS 84 / Pseudo-Mercator + merc + WGS84 + false + + + + + + + dataset + people (offline) + + + + + + + + + + + + + + + + + 0 + 0 + + + + + false + + + + + + + + + + + + + ogr + + + + + + + + + + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + # -*- coding: utf-8 -*- +""" +QGIS forms can have a Python function that is called when the form is +opened. + +Use this function to add extra logic to your forms. + +Enter the name of the function in the "Python Init function" +field. +An example follows: +""" +from qgis.PyQt.QtWidgets import QWidget + +def my_form_open(dialog, layer, feature): + geom = feature.geometry() + control = dialog.findChild(QWidget, "MyLineEdit") + + 0 + generatedlayout + + + + + + + + + + + + + + + + fid + + + + + + + + + + + opengis.ch + + + + + 4 + + + + + + WGS84 + + false + false + + + + + + + 5000 + None + + + + 1 + + + true + + + + false + + + + + true + 2 + MU + + + + true + 0 + 50 + false + 0 + false + 16 + false + 30 + + + + people_3ce4cac6_949e_4575_a88f_b6349156eabf_76ad2946_df1f_4b3c_a5e7_df35e62d3d1f + + + 1 + + false + + false + + 90 + + Test project + + + + + + conditions unknown + + + false + + + + 1 + false + + ./data.gpkg + + 1 + + 255 + 255 + 0 + 255 + 255 + 255 + 255 + + + m2 + meters + + + + true + + singleLayer + + 10 + /home/marco/OPENGIS.ch-CLOUD/conferences/2019/qgis_coruna/workshop_qfield_coruna_2019/workshop_3h/attendees_live.qgs + 0 + 1024 + + 1230ded733be9a709daf407bd59e2f05 + d1144f15f99bd1d57ffab0d1f70620e4 + e2a34a7ab758315678e7c348afee5ab9 + f61c6d169261b66a1cbaca4701b1efb4 + f8585dc706d79a852be17f9c9a4f9696 + + 1 + + + false + + + + 3 + + + + false + + + + + + + + + + + Test project + + + + + + + + + + + + David + 2019-03-04T11:39:10 + + + + \ No newline at end of file diff --git a/projects/test.qgs.cfg b/projects/test.qgs.cfg new file mode 100644 index 0000000..046464b --- /dev/null +++ b/projects/test.qgs.cfg @@ -0,0 +1,135 @@ +{ + "options": { + "projection": { + "proj4": "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs", + "ref": "EPSG:3857" + }, + "bbox": [ + -41788791.327147834, + -21039383.75992872, + 41788791.327147834, + 21039383.759928703 + ], + "mapScales": [ + 10000, + 25000, + 50000, + 100000, + 250000, + 500000, + 1000000, + 2500000, + 5000000, + 10000000, + 25000000, + 50000000 + ], + "minScale": 10000, + "maxScale": 50000000, + "initialExtent": [ + 597081.0943525913, + 5566630.494829406, + 1354199.0140246656, + 5940735.819843843 + ], + "popupLocation": "dock", + "pointTolerance": 25, + "lineTolerance": 10, + "polygonTolerance": 5, + "tmTimeFrameSize": 10, + "tmTimeFrameType": "seconds", + "tmAnimationFrameLength": 1000, + "startupBaselayer": "OpenStreetMap", + "datavizLocation": "dock", + "atlasLayer": "people_3ce4cac6_949e_4575_a88f_b6349156eabf_76ad2946_df1f_4b3c_a5e7_df35e62d3d1f", + "atlasDisplayLayerDescription": "True", + "atlasHighlightGeometry": "True", + "atlasZoom": "zoom", + "atlasDisplayPopup": "True", + "atlasMaxWidth": 25, + "atlasDuration": 5 + }, + "layers": { + "people": { + "id": "people_3ce4cac6_949e_4575_a88f_b6349156eabf_76ad2946_df1f_4b3c_a5e7_df35e62d3d1f", + "name": "people", + "type": "layer", + "geometryType": "point", + "extent": [ + 1009180.0, + 5817710.0, + 1031420.0, + 5911790.0 + ], + "crs": "EPSG:3857", + "title": "people", + "abstract": "", + "link": "", + "minScale": 1, + "maxScale": 1000000000000, + "toggled": "True", + "popup": "True", + "popupSource": "auto", + "popupTemplate": "", + "popupMaxFeatures": 10, + "popupDisplayChildren": "False", + "noLegendImage": "False", + "groupAsLayer": "False", + "baseLayer": "False", + "displayInLegend": "True", + "singleTile": "True", + "imageFormat": "image/png", + "cached": "False", + "clientCacheExpiration": 300 + }, + "OpenStreetMap": { + "id": "OpenStreetMap_6acb267c_fb1c_4aa5_9be1_d8ceb2ed360e", + "name": "OpenStreetMap", + "type": "layer", + "extent": [ + -20037508.342789244, + -20037508.342789255, + 20037508.342789244, + 20037508.342789244 + ], + "crs": "EPSG:3857", + "title": "OpenStreetMap", + "abstract": "", + "link": "", + "minScale": 1, + "maxScale": 1000000000000, + "toggled": "True", + "popup": "False", + "popupSource": "auto", + "popupTemplate": "", + "popupMaxFeatures": 10, + "popupDisplayChildren": "False", + "noLegendImage": "False", + "groupAsLayer": "False", + "baseLayer": "True", + "displayInLegend": "True", + "singleTile": "False", + "imageFormat": "image/png", + "cached": "False", + "clientCacheExpiration": 300, + "externalWmsToggle": "True", + "externalAccess": { + "crs": "EPSG:3857", + "format": "", + "type": "xyz", + "url": "http://a.tile.openstreetmap.org/{z}/{x}/{y}.png", + "zmax": "19", + "zmin": "0" + } + } + }, + "tooltipLayers": { + "people": { + "fields": "name", + "displayGeom": "False", + "colorGeom": "", + "layerId": "people_3ce4cac6_949e_4575_a88f_b6349156eabf_76ad2946_df1f_4b3c_a5e7_df35e62d3d1f", + "order": 0 + } + } +} \ No newline at end of file From 3da441f9957ff58eff3b7824cedde0df15085975 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Sun, 23 Jun 2019 13:18:57 +0200 Subject: [PATCH 14/64] use qgis server 3.8 with default config Signed-off-by: Marco Bernasocchi --- conf/qgis_nginx.conf | 113 ------------------------------------------- docker-compose.yml | 4 +- 2 files changed, 2 insertions(+), 115 deletions(-) delete mode 100755 conf/qgis_nginx.conf diff --git a/conf/qgis_nginx.conf b/conf/qgis_nginx.conf deleted file mode 100755 index c7c6f7a..0000000 --- a/conf/qgis_nginx.conf +++ /dev/null @@ -1,113 +0,0 @@ -# -*- coding: utf-8 -*- -# vim: tabstop=4 shiftwidth=4 softtabstop=4 -# -# oq-qgis-server -# Copyright (C) 2018-2019 GEM Foundation -# -# oq-qgis-server is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# oq-qgis-server is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . - -user nginx; -worker_processes auto; -error_log /var/log/nginx/error.log; -pid /run/nginx.pid; - -# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. -include /usr/share/nginx/modules/*.conf; - -events { - worker_connections 1024; -} - -http { - log_format main '$remote_addr - $remote_user [$time_local] "$request" ' - '$status $body_bytes_sent "$http_referer" ' - '"$http_user_agent" "$http_x_forwarded_for"'; - - access_log /var/log/nginx/access.log main; - - sendfile on; - tcp_nopush on; - tcp_nodelay on; - keepalive_timeout 65; - types_hash_max_size 2048; - - include /etc/nginx/mime.types; - default_type application/octet-stream; - - # Get 'port' from `$http_host` - map $http_host $port { - "~*.*:(?

.*)" $p; - default server_port; - } - # Get 'proto' from `$scheme` unless 'X-Forwarded-Proto' - # is set by the reverse proxy - map $http_x_forwarded_proto $qgis_proto { - "" $scheme; - default $http_x_forwarded_proto; - } - # Get 'https' from `$https` unless 'X-Forwarded-SSL' - # is set by the reverse proxy - map $http_x_forwarded_ssl $qgis_ssl { - "" $https; - default $http_x_forwarded_ssl; - } - # Get 'host' from `$host` unless 'X-Forwarded-Host' - # is set by the reverse proxy - map $http_x_forwarded_host $qgis_host { - "" $host; - default $http_x_forwarded_host; - } - # Get 'port' from `$port` unless 'X-Forwarded-Port' - # is set by the reverse proxy - map $http_x_forwarded_port $qgis_port { - "" $port; - default $http_x_forwarded_port; - } - - server { - listen 80 default_server; - listen [::]:80 default_server; - server_name _; - root /usr/share/nginx/html; - - location /ogc/ { - rewrite ^/ogc/(.*)$ /qgis/qgis_mapserv.fcgi?map=/io/data/$1/$1.qgs; - } - # Direct access without map rewrite - location /ows/ { - rewrite ^/ows/$ /qgis/qgis_mapserv.fcgi; - } - location /qgis/ { - internal; # Used only by the OGC rewrite - root /var/www/data; - fastcgi_pass localhost:9993; - - include fastcgi_params; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_param QUERY_STRING $query_string; - # build links in GetCapabilities based on - # the hostname exposed by the reverse proxy - fastcgi_param HTTPS $qgis_ssl; - fastcgi_param SERVER_NAME $qgis_host; - fastcgi_param SERVER_PORT $qgis_port; - } - error_page 404 /404.html; - location = /40x.html { - } - error_page 500 502 503 504 /50x.html; - location = /50x.html { - } - } - -} diff --git a/docker-compose.yml b/docker-compose.yml index 108c304..1239800 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,7 +19,7 @@ services: - redis qgisserver: - image: "openquake/qgis-server:3.6.3" + image: "openquake/qgis-server:3.8.0" environment: # Improve rendering performance @@ -33,7 +33,7 @@ services: restart: on-failure volumes: - ./projects:/io/data:ro - - ./conf/qgis_nginx.conf:/etc/nginx/nginx.conf + # - ./conf/qgis_nginx.conf:/etc/nginx/nginx.conf expose: - 80 From f2aea47ca0e8a0e5cd90ec38741bb65a8ff16f29 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Wed, 26 Jun 2019 01:06:27 +0200 Subject: [PATCH 15/64] change gpkg PRAGMA to delete to allow mounting in read only this fixes the QGIS server error: unable to open database file: this file is a WAL-enabled database. It cannot be opened because it is presumably read-only or in a read-only directory. Signed-off-by: Marco Bernasocchi --- projects/data.gpkg | Bin 135168 -> 135168 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/projects/data.gpkg b/projects/data.gpkg index 10da0290eaab2eca7d76112282ecdf86dd205bd8..507c14152227d928672c42181cfc3e5cab5e7d4f 100644 GIT binary patch delta 50 zcmZozz|pXPLnb)TC$l6~AuYcsH?c&)m_dMnk&(ecL4kpR!G5BQGoyWDLTdu!)&!;n F`~YQ<4JiNs delta 50 zcmZozz|pXPLnb)TC$l6~AuYcsH?c&)m_dMniHX5ML4kpR!EU0AGoxK<du!)&!;n F`~YRA4JiNs From 1ebf172d4524e325cc4ecc4dae0bfb40d3efebad Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Sun, 30 Jun 2019 14:32:10 +0200 Subject: [PATCH 16/64] use ubuntu images to solve statx problem Signed-off-by: Marco Bernasocchi --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 1239800..6df9468 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: build: context: . args: - lizmap_version: 3.3rc2 + lizmap_version: 3.3rc2-ubuntu #image: "opengisch/docker-lizmap:3.3rc2" restart: on-failure ports: From cc093f59cc98d47f3202237ae0e3c7c0e06049fe Mon Sep 17 00:00:00 2001 From: Mario Baranzini Date: Mon, 8 Jul 2019 17:11:31 +0200 Subject: [PATCH 17/64] Set apache directory index for documents works with a link in the qgis project like this: Dossier documents --- conf/apache2.conf | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/conf/apache2.conf b/conf/apache2.conf index 8651a4c..af474c2 100644 --- a/conf/apache2.conf +++ b/conf/apache2.conf @@ -168,6 +168,12 @@ Include ports.conf Options -Indexes +Alias "/2_doc_cloud" "/io/data/media/2_doc_cloud" + + Require all granted + Options +Indexes + + # # Options Indexes FollowSymLinks # AllowOverride None From 6a478f87c7207998f26cea36fe2b0eb69810785a Mon Sep 17 00:00:00 2001 From: Mario Baranzini Date: Mon, 5 Aug 2019 23:08:43 +0200 Subject: [PATCH 18/64] Require referer to allow documents directory --- conf/apache2.conf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/conf/apache2.conf b/conf/apache2.conf index af474c2..9f85983 100644 --- a/conf/apache2.conf +++ b/conf/apache2.conf @@ -168,9 +168,12 @@ Include ports.conf Options -Indexes + Alias "/2_doc_cloud" "/io/data/media/2_doc_cloud" +SetEnvIf Referer "index.php/view/map/" localreferer +SetEnvIf Referer "2_doc_cloud" localreferer - Require all granted + Require env localreferer Options +Indexes From 5bda277ce38870f5f8e62dc8c27b8ea497fb1555 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Wed, 18 Sep 2019 21:46:14 +0200 Subject: [PATCH 19/64] update versions --- docker-compose.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 6df9468..a00b8d7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,8 +4,8 @@ services: build: context: . args: - lizmap_version: 3.3rc2-ubuntu - #image: "opengisch/docker-lizmap:3.3rc2" + lizmap_version: 3.3 + #image: "opengisch/docker-lizmap:3.3" restart: on-failure ports: - 80:80 @@ -19,7 +19,7 @@ services: - redis qgisserver: - image: "openquake/qgis-server:3.8.0" + image: "openquake/qgis-server:3.8.3" environment: # Improve rendering performance From 0ab57c971617a5a52314810b6b9161694039d76b Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Wed, 18 Sep 2019 21:56:34 +0200 Subject: [PATCH 20/64] use explicit network --- docker-compose.yml | 53 +++++++++++++++++++++++++++++----------------- 1 file changed, 34 insertions(+), 19 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index a00b8d7..2093871 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,15 +8,17 @@ services: #image: "opengisch/docker-lizmap:3.3" restart: on-failure ports: - - 80:80 - - 443:443 + - 80:80 + - 443:443 volumes: - - ./projects:/io/data:ro - - var:/var/www/lizmap/var + - ./projects:/io/data:ro + - var:/var/www/lizmap/var depends_on: - postgis - qgisserver - redis + networks: + - net qgisserver: image: "openquake/qgis-server:3.8.3" @@ -28,15 +30,17 @@ services: # Limit the maximum size returned by a GetMap QGIS_SERVER_WMS_MAX_HEIGHT: 5000 QGIS_SERVER_WMS_MAX_WIDTH: 5000 - # needs to be defined as fcgi_param in nginx.conf - # PGSERVICEFILE: /io/.pg_service.conf + # needs to be defined as fcgi_param in nginx.conf + # PGSERVICEFILE: /io/.pg_service.conf restart: on-failure volumes: - ./projects:/io/data:ro - # - ./conf/qgis_nginx.conf:/etc/nginx/nginx.conf + # - ./conf/qgis_nginx.conf:/etc/nginx/nginx.conf expose: - 80 - + networks: + - net + redis: image: redis:alpine restart: on-failure @@ -44,6 +48,8 @@ services: - redis:/data expose: - 6379 + networks: + - net postgis: image: kartoza/postgis:11.0-2.5 @@ -57,7 +63,9 @@ services: - POSTGRES_DBNAME=gis volumes: - postgres:/var/lib/postgresql - + networks: + - net + pgadmin4: image: chorss/docker-pgadmin4 restart: on-failure @@ -65,19 +73,26 @@ services: - 5050:5050 volumes: - pgadmin4:/data - + networks: + - net + portainer: image: portainer/portainer restart: always ports: - - 9000:9000 + - 9000:9000 volumes: - - /var/run/docker.sock:/var/run/docker.sock - - portainer:/data - + - /var/run/docker.sock:/var/run/docker.sock + - portainer:/data + networks: + - net + +networks: + net: + volumes: - portainer: - pgadmin4: - postgres: - redis: - var: + portainer: + pgadmin4: + postgres: + redis: + var: From a77d859c9cf0912345579454fb8b8f78c837f3b8 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Wed, 18 Sep 2019 22:49:26 +0200 Subject: [PATCH 21/64] fix version numbering Signed-off-by: Marco Bernasocchi --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 2093871..cdaf5e4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: build: context: . args: - lizmap_version: 3.3 + lizmap_version: 3.3.0 #image: "opengisch/docker-lizmap:3.3" restart: on-failure ports: From 98584b08bb0e192b1e5055469c0f7d3ca349df62 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Thu, 19 Sep 2019 02:47:33 +0200 Subject: [PATCH 22/64] Include letsencrypt (#1) * update versions * use explicit network * fix version numbering Signed-off-by: Marco Bernasocchi * add certbot * bit of cleanup Signed-off-by: Marco Bernasocchi --- Dockerfile | 14 ++++++++- conf/docker-entrypoint.sh | 4 +++ docker-compose.yml | 61 +++++++++++++++++++++++++-------------- 3 files changed, 56 insertions(+), 23 deletions(-) diff --git a/Dockerfile b/Dockerfile index b26cfdb..9963131 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,10 +8,22 @@ RUN apt-get -y update \ apache2 libapache2-mod-fcgid \ php7.2-fpm php7.2 \ php7.2-curl php7.2-cli php7.2-sqlite php7.2-gd php7.2-pgsql php7.2-xmlrpc php7.2-xml\ - sqlite3 postgresql-client \ + sqlite3 postgresql-client + +RUN apt-get -y update \ + && apt-get install -y software-properties-common \ + && add-apt-repository -y universe \ + && add-apt-repository -y ppa:certbot/certbot \ + && apt-get update \ + && apt-get install -y certbot python-certbot-apache\ && apt-get clean \ && rm -r /var/lib/apt/lists/* +ARG LE_domain="example.com" +ARG LE_email="info@example.com" +ENV LE_domain=$LE_domain +ENV LE_email=$LE_email + # this can be overriden at build time with --build-arg lizmap_version=release_3_2 ARG lizmap_version=master ENV LIZMAPVERSION=$lizmap_version diff --git a/conf/docker-entrypoint.sh b/conf/docker-entrypoint.sh index 581ea81..6db538b 100755 --- a/conf/docker-entrypoint.sh +++ b/conf/docker-entrypoint.sh @@ -15,4 +15,8 @@ fi rm -f /run/apache2/apache2.pid service php7.2-fpm start +/usr/sbin/apachectl start +certbot --non-interactive --apache --redirect --agree-tos --domains $LE_domain --email $LE_email +/usr/sbin/apachectl stop +sleep 5 exec /usr/sbin/apachectl -DFOREGROUND diff --git a/docker-compose.yml b/docker-compose.yml index 6df9468..f4f81da 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,22 +4,26 @@ services: build: context: . args: - lizmap_version: 3.3rc2-ubuntu - #image: "opengisch/docker-lizmap:3.3rc2" + lizmap_version: 3.3.0 + LE_domain: 'example.com' + LE_email: 'info@example.com' + #image: "opengisch/docker-lizmap:3.3" restart: on-failure ports: - - 80:80 - - 443:443 + - 80:80 + - 443:443 volumes: - - ./projects:/io/data:ro - - var:/var/www/lizmap/var + - ./projects:/io/data:ro + - var:/var/www/lizmap/var depends_on: - postgis - qgisserver - redis + networks: + - net qgisserver: - image: "openquake/qgis-server:3.8.0" + image: "openquake/qgis-server:3.8.3" environment: # Improve rendering performance @@ -28,15 +32,17 @@ services: # Limit the maximum size returned by a GetMap QGIS_SERVER_WMS_MAX_HEIGHT: 5000 QGIS_SERVER_WMS_MAX_WIDTH: 5000 - # needs to be defined as fcgi_param in nginx.conf - # PGSERVICEFILE: /io/.pg_service.conf + # needs to be defined as fcgi_param in nginx.conf + # PGSERVICEFILE: /io/.pg_service.conf restart: on-failure volumes: - ./projects:/io/data:ro - # - ./conf/qgis_nginx.conf:/etc/nginx/nginx.conf + # - ./conf/qgis_nginx.conf:/etc/nginx/nginx.conf expose: - 80 - + networks: + - net + redis: image: redis:alpine restart: on-failure @@ -44,6 +50,8 @@ services: - redis:/data expose: - 6379 + networks: + - net postgis: image: kartoza/postgis:11.0-2.5 @@ -57,7 +65,9 @@ services: - POSTGRES_DBNAME=gis volumes: - postgres:/var/lib/postgresql - + networks: + - net + pgadmin4: image: chorss/docker-pgadmin4 restart: on-failure @@ -65,19 +75,26 @@ services: - 5050:5050 volumes: - pgadmin4:/data - + networks: + - net + portainer: image: portainer/portainer restart: always ports: - - 9000:9000 + - 9000:9000 volumes: - - /var/run/docker.sock:/var/run/docker.sock - - portainer:/data - + - /var/run/docker.sock:/var/run/docker.sock + - portainer:/data + networks: + - net + +networks: + net: + volumes: - portainer: - pgadmin4: - postgres: - redis: - var: + portainer: + pgadmin4: + postgres: + redis: + var: From 1359fd5f1445313d0d7cb8085d929d93c738b50c Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Thu, 19 Sep 2019 15:23:00 +0200 Subject: [PATCH 23/64] disable certbot --- conf/docker-entrypoint.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/docker-entrypoint.sh b/conf/docker-entrypoint.sh index 6db538b..e955a05 100755 --- a/conf/docker-entrypoint.sh +++ b/conf/docker-entrypoint.sh @@ -15,8 +15,8 @@ fi rm -f /run/apache2/apache2.pid service php7.2-fpm start -/usr/sbin/apachectl start -certbot --non-interactive --apache --redirect --agree-tos --domains $LE_domain --email $LE_email -/usr/sbin/apachectl stop -sleep 5 +#/usr/sbin/apachectl start +#certbot --non-interactive --apache --redirect --agree-tos --domains $LE_domain --email $LE_email +#/usr/sbin/apachectl stop +#sleep 5 exec /usr/sbin/apachectl -DFOREGROUND From 1582144edd428f2088b387b075d64c1c7f81fb5a Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Thu, 19 Sep 2019 15:49:36 +0200 Subject: [PATCH 24/64] cleanup Signed-off-by: Marco Bernasocchi --- conf/docker-entrypoint.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/conf/docker-entrypoint.sh b/conf/docker-entrypoint.sh index e955a05..57b18ad 100755 --- a/conf/docker-entrypoint.sh +++ b/conf/docker-entrypoint.sh @@ -15,8 +15,8 @@ fi rm -f /run/apache2/apache2.pid service php7.2-fpm start -#/usr/sbin/apachectl start -#certbot --non-interactive --apache --redirect --agree-tos --domains $LE_domain --email $LE_email -#/usr/sbin/apachectl stop -#sleep 5 +# /usr/sbin/apachectl start +# certbot --non-interactive --apache --redirect --agree-tos --domains $LE_domain --email $LE_email +# /usr/sbin/apachectl stop +# sleep 5 exec /usr/sbin/apachectl -DFOREGROUND From 91d5c60128b53f9b8ef406dc1af59b97acedd783 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Thu, 19 Sep 2019 16:31:30 +0200 Subject: [PATCH 25/64] enable certbot only on first run --- conf/docker-entrypoint.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/conf/docker-entrypoint.sh b/conf/docker-entrypoint.sh index 57b18ad..c20d333 100755 --- a/conf/docker-entrypoint.sh +++ b/conf/docker-entrypoint.sh @@ -15,8 +15,12 @@ fi rm -f /run/apache2/apache2.pid service php7.2-fpm start -# /usr/sbin/apachectl start -# certbot --non-interactive --apache --redirect --agree-tos --domains $LE_domain --email $LE_email -# /usr/sbin/apachectl stop -# sleep 5 -exec /usr/sbin/apachectl -DFOREGROUND + +LE_CONF=/etc/apache2/sites-enabled/000-default-le-ssl.conf +if [ ! -f "$LE_CONF" ]; then + /usr/sbin/apachectl start + certbot --non-interactive --apache --redirect --agree-tos --domains $LE_domain --email $LE_email + /usr/sbin/apachectl stop + sleep 5 +fi +exec /usr/sbin/apachectl -DFOREGROUND \ No newline at end of file From 6a44b03b77bd91770a8baf4b223812cbb7af5e67 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Thu, 19 Sep 2019 17:25:22 +0200 Subject: [PATCH 26/64] use certbot staging by default Signed-off-by: Marco Bernasocchi --- Dockerfile | 2 ++ conf/docker-entrypoint.sh | 5 ++++- docker-compose.yml | 1 + 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 9963131..251bca1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,8 +21,10 @@ RUN apt-get -y update \ ARG LE_domain="example.com" ARG LE_email="info@example.com" +ARG LE_staging='true' ENV LE_domain=$LE_domain ENV LE_email=$LE_email +ENV LE_staging=$LE_staging # this can be overriden at build time with --build-arg lizmap_version=release_3_2 ARG lizmap_version=master diff --git a/conf/docker-entrypoint.sh b/conf/docker-entrypoint.sh index c20d333..96757cd 100755 --- a/conf/docker-entrypoint.sh +++ b/conf/docker-entrypoint.sh @@ -16,10 +16,13 @@ rm -f /run/apache2/apache2.pid service php7.2-fpm start +if [ $LE_staging == 'true' ]; then + STAGING='--test-cert' +fi LE_CONF=/etc/apache2/sites-enabled/000-default-le-ssl.conf if [ ! -f "$LE_CONF" ]; then /usr/sbin/apachectl start - certbot --non-interactive --apache --redirect --agree-tos --domains $LE_domain --email $LE_email + certbot --non-interactive --apache --redirect --agree-tos --domains $LE_domain --email $LE_email $STAGING /usr/sbin/apachectl stop sleep 5 fi diff --git a/docker-compose.yml b/docker-compose.yml index f4f81da..46303d9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,6 +7,7 @@ services: lizmap_version: 3.3.0 LE_domain: 'example.com' LE_email: 'info@example.com' + LE_staging: 'true' # change to 'false' when ready for productionb #image: "opengisch/docker-lizmap:3.3" restart: on-failure ports: From 78758260e942367e8fce8e7d584a7ebc9f736e39 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Thu, 19 Sep 2019 17:50:36 +0200 Subject: [PATCH 27/64] add crontab to auto renew Signed-off-by: Marco Bernasocchi --- Dockerfile | 12 +++++++++++- conf/crontab | 1 + 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 conf/crontab diff --git a/Dockerfile b/Dockerfile index 251bca1..6c56025 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,7 +15,7 @@ RUN apt-get -y update \ && add-apt-repository -y universe \ && add-apt-repository -y ppa:certbot/certbot \ && apt-get update \ - && apt-get install -y certbot python-certbot-apache\ + && apt-get install -y certbot python-certbot-apache cron\ && apt-get clean \ && rm -r /var/lib/apt/lists/* @@ -70,6 +70,16 @@ RUN mkdir -p /io/data/ VOLUME ["/var/www/lizmap/var" , "/io"] EXPOSE 80 443 +# Add crontab file in the cron directory +ADD conf/crontab /etc/cron.d/cache-cron +# Give execution rights on the cron job +RUN chmod 0644 /etc/cron.d/cache-cron +# Apply cron job +RUN crontab /etc/cron.d/cache-cron +# Create the log file to be able to run tail +RUN touch /var/log/cron.log + + COPY conf/docker-entrypoint.sh /usr/local/bin/ #RUN chmod u+x /bin/docker-entrypoint.sh CMD ["docker-entrypoint.sh"] \ No newline at end of file diff --git a/conf/crontab b/conf/crontab new file mode 100644 index 0000000..75c4d24 --- /dev/null +++ b/conf/crontab @@ -0,0 +1 @@ +0 */12 * * * certbot renew >/dev/null 2>&1 From 85746fb9d2e6bdfddd163b9bfd325265ca53c31f Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Thu, 19 Sep 2019 20:36:00 +0200 Subject: [PATCH 28/64] reuse marioba pg image Signed-off-by: Marco Bernasocchi --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 46303d9..a1f9471 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -55,7 +55,7 @@ services: - net postgis: - image: kartoza/postgis:11.0-2.5 + image: marioba/postgis:latest ports: - 5432:5432 expose: From 04d2d0732b2148ccd90b3c96b0eebf3bcfaa2008 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Thu, 31 Oct 2019 14:51:46 +0100 Subject: [PATCH 29/64] fix text file busy --- Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index b26cfdb..4dd2fd8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -40,7 +40,8 @@ RUN mkdir -p /var/www/ \ && curl -SL https://github.com/opengisch/lizmap-web-client/archive/$LIZMAPVERSION.tar.gz \ | tar --strip-components=1 -xzC /var/www # Set rights & active config -RUN chmod +x /var/www/lizmap/install/set_rights.sh && /var/www/lizmap/install/set_rights.sh www-data www-data +RUN chmod +x /var/www/lizmap/install/set_rights.sh +RUN /var/www/lizmap/install/set_rights.sh www-data www-data # use default profiles.ini RUN cp /var/www/lizmap/var/config/profiles.ini.php.dist /var/www/lizmap/var/config/profiles.ini.php # Install @@ -58,4 +59,4 @@ EXPOSE 80 443 COPY conf/docker-entrypoint.sh /usr/local/bin/ #RUN chmod u+x /bin/docker-entrypoint.sh -CMD ["docker-entrypoint.sh"] \ No newline at end of file +CMD ["docker-entrypoint.sh"] From 3f718fcb3c2e5eb5c1b86fcdf96a13405f4c0b1e Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Tue, 10 Dec 2019 17:59:47 +0100 Subject: [PATCH 30/64] allow disabling letsencrypt --- Dockerfile | 4 +++- conf/docker-entrypoint.sh | 35 ++++++++++++++++++++++++----------- docker-compose.yml | 1 + 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6c56025..8f85ed5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,9 +22,11 @@ RUN apt-get -y update \ ARG LE_domain="example.com" ARG LE_email="info@example.com" ARG LE_staging='true' +ARG LE_on='false' ENV LE_domain=$LE_domain ENV LE_email=$LE_email ENV LE_staging=$LE_staging +ENV LE_on=$LE_on # this can be overriden at build time with --build-arg lizmap_version=release_3_2 ARG lizmap_version=master @@ -82,4 +84,4 @@ RUN touch /var/log/cron.log COPY conf/docker-entrypoint.sh /usr/local/bin/ #RUN chmod u+x /bin/docker-entrypoint.sh -CMD ["docker-entrypoint.sh"] \ No newline at end of file +CMD ["docker-entrypoint.sh"] diff --git a/conf/docker-entrypoint.sh b/conf/docker-entrypoint.sh index 96757cd..69dab2d 100755 --- a/conf/docker-entrypoint.sh +++ b/conf/docker-entrypoint.sh @@ -3,7 +3,13 @@ set -e #generate config file VAR="/var/www/lizmap/var/config" -if [ ! -d $VAR ]; then +echo "LE_on:" $LE_on +echo "LE_staging:" $LE_staging +echo "LE_email:" $LE_email +echo "LE_domain:" $LE_domain + + +if [[ ! -d $VAR ]]; then echo "Creating Config file in /var" cp -avr /var/www/lizmap/var_install/* /var/www/lizmap/var fi @@ -16,14 +22,21 @@ rm -f /run/apache2/apache2.pid service php7.2-fpm start -if [ $LE_staging == 'true' ]; then - STAGING='--test-cert' -fi -LE_CONF=/etc/apache2/sites-enabled/000-default-le-ssl.conf -if [ ! -f "$LE_CONF" ]; then - /usr/sbin/apachectl start - certbot --non-interactive --apache --redirect --agree-tos --domains $LE_domain --email $LE_email $STAGING - /usr/sbin/apachectl stop - sleep 5 +if [[ $LE_on == 'true' ]]; then + + if [[ $LE_staging == 'true' ]]; then + echo "LE will use staging certificate" + STAGING='--test-cert' + fi + LE_CONF=/etc/apache2/sites-enabled/000-default-le-ssl.conf + if [[ ! -f "$LE_CONF" ]]; then + /usr/sbin/apachectl start + echo "LE need to create conf files. Issuing:" + set -x + certbot --non-interactive --apache --redirect --agree-tos --domains $LE_domain --email $LE_email $STAGING + set +x + /usr/sbin/apachectl stop + sleep 5 + fi fi -exec /usr/sbin/apachectl -DFOREGROUND \ No newline at end of file +exec /usr/sbin/apachectl -DFOREGROUND diff --git a/docker-compose.yml b/docker-compose.yml index a1f9471..b9b85bb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,6 +5,7 @@ services: context: . args: lizmap_version: 3.3.0 + LE_on: 'false' LE_domain: 'example.com' LE_email: 'info@example.com' LE_staging: 'true' # change to 'false' when ready for productionb From a9534341d336c378ef5e18d5cc723e09666942cb Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Tue, 10 Dec 2019 18:58:41 +0100 Subject: [PATCH 31/64] stay closer to master --- conf/apache2.conf | 8 -------- docker-compose.yml | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/conf/apache2.conf b/conf/apache2.conf index 9f85983..af2cb47 100644 --- a/conf/apache2.conf +++ b/conf/apache2.conf @@ -169,14 +169,6 @@ Include ports.conf -Alias "/2_doc_cloud" "/io/data/media/2_doc_cloud" -SetEnvIf Referer "index.php/view/map/" localreferer -SetEnvIf Referer "2_doc_cloud" localreferer - - Require env localreferer - Options +Indexes - - # # Options Indexes FollowSymLinks # AllowOverride None diff --git a/docker-compose.yml b/docker-compose.yml index b9b85bb..bf06579 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -56,7 +56,7 @@ services: - net postgis: - image: marioba/postgis:latest + image: kartoza/postgis:11.0-2.5 ports: - 5432:5432 expose: From b28d77ee47209a6e9746a9d05e02645ca141857f Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Tue, 10 Dec 2019 19:00:25 +0100 Subject: [PATCH 32/64] typo --- conf/apache2.conf | 1 - 1 file changed, 1 deletion(-) diff --git a/conf/apache2.conf b/conf/apache2.conf index af2cb47..8651a4c 100644 --- a/conf/apache2.conf +++ b/conf/apache2.conf @@ -168,7 +168,6 @@ Include ports.conf Options -Indexes - # # Options Indexes FollowSymLinks # AllowOverride None From 215f9a82819445b713503b2cc47218657890ca43 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Tue, 10 Dec 2019 20:29:07 +0100 Subject: [PATCH 33/64] optimise installation order. Will also trigger a no-cache build that will take care of https://community.letsencrypt.org/t/acme-v2-scheduled-deprecation-of-unauthenticated-resource-gets/74380 --- Dockerfile | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index bdb230e..697a452 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,20 +3,20 @@ MAINTAINER Marco Bernasocchi / docker-lizmap ENV DEBIAN_FRONTEND noninteractive +RUN apt-get -y update \ + && apt-get install -y software-properties-common \ + && add-apt-repository -y universe \ + && add-apt-repository -y ppa:certbot/certbot + RUN apt-get -y update \ && apt-get install -y --fix-missing python-simplejson xauth htop nano curl ntp ntpdate ssl-cert software-properties-common \ apache2 libapache2-mod-fcgid \ php7.2-fpm php7.2 \ php7.2-curl php7.2-cli php7.2-sqlite php7.2-gd php7.2-pgsql php7.2-xmlrpc php7.2-xml\ - sqlite3 postgresql-client + sqlite3 postgresql-client \ + cron certbot python-certbot-apache -RUN apt-get -y update \ - && apt-get install -y software-properties-common \ - && add-apt-repository -y universe \ - && add-apt-repository -y ppa:certbot/certbot \ - && apt-get update \ - && apt-get install -y certbot python-certbot-apache cron\ - && apt-get clean \ +RUN apt-get clean \ && rm -r /var/lib/apt/lists/* ARG LE_domain="example.com" From 8fafddea64af1e78ce99b76b9852e2344b81b4b3 Mon Sep 17 00:00:00 2001 From: Andreas Mischler <43773680+sbaeji@users.noreply.github.com> Date: Thu, 16 Jan 2020 17:35:19 +0100 Subject: [PATCH 34/64] update qgis server to 3.10.1 --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index bf06579..12797f3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,7 +25,7 @@ services: - net qgisserver: - image: "openquake/qgis-server:3.8.3" + image: "openquake/qgis-server:3.10.1" environment: # Improve rendering performance From 476699aae318cd0fb9a7aed266579a114f4adcd4 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Fri, 26 Jun 2020 15:49:21 +0200 Subject: [PATCH 35/64] update qgis and lizmap to 3.10.6 and 3.3.6 --- docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 12797f3..85f26f0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: build: context: . args: - lizmap_version: 3.3.0 + lizmap_version: 3.3.6 LE_on: 'false' LE_domain: 'example.com' LE_email: 'info@example.com' @@ -25,7 +25,7 @@ services: - net qgisserver: - image: "openquake/qgis-server:3.10.1" + image: "openquake/qgis-server:3.10.6" environment: # Improve rendering performance From d495a2291f9c6d90a81d40c0f58c97e0a0f3245c Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Fri, 26 Jun 2020 16:05:00 +0200 Subject: [PATCH 36/64] downgrade qgis to last avail docker --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 85f26f0..7592117 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,7 +25,7 @@ services: - net qgisserver: - image: "openquake/qgis-server:3.10.6" + image: "openquake/qgis-server:3.10.1" environment: # Improve rendering performance From f1cfa5f8c9d4d5c817d362d7ee2452b87c852062 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Fri, 26 Jun 2020 16:41:38 +0200 Subject: [PATCH 37/64] Revert "downgrade qgis to last avail docker" This reverts commit d495a2291f9c6d90a81d40c0f58c97e0a0f3245c. --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 7592117..85f26f0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,7 +25,7 @@ services: - net qgisserver: - image: "openquake/qgis-server:3.10.1" + image: "openquake/qgis-server:3.10.6" environment: # Improve rendering performance From a0e58d3024fd7f2a373c9be8cd8663bb0dabaeeb Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Fri, 26 Jun 2020 16:44:11 +0200 Subject: [PATCH 38/64] update qgis to 3.10.7 --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 85f26f0..e72d785 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,7 +25,7 @@ services: - net qgisserver: - image: "openquake/qgis-server:3.10.6" + image: "openquake/qgis-server:3.10.7" environment: # Improve rendering performance From 209399a833d3940fcbc2af19ffb26a44a0619a9c Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Wed, 23 Sep 2020 15:57:04 +0200 Subject: [PATCH 39/64] enable cron on start --- conf/docker-entrypoint.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/conf/docker-entrypoint.sh b/conf/docker-entrypoint.sh index 69dab2d..d33d974 100755 --- a/conf/docker-entrypoint.sh +++ b/conf/docker-entrypoint.sh @@ -39,4 +39,5 @@ if [[ $LE_on == 'true' ]]; then sleep 5 fi fi +cron exec /usr/sbin/apachectl -DFOREGROUND From f5aeae8408c2aceaac3caf8d163eae7a372e47f3 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Fri, 23 Oct 2020 16:04:52 +0200 Subject: [PATCH 40/64] add ldap --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) mode change 100644 => 100755 Dockerfile diff --git a/Dockerfile b/Dockerfile old mode 100644 new mode 100755 index 697a452..3367f75 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,7 @@ RUN apt-get -y update \ && apt-get install -y --fix-missing python-simplejson xauth htop nano curl ntp ntpdate ssl-cert software-properties-common \ apache2 libapache2-mod-fcgid \ php7.2-fpm php7.2 \ - php7.2-curl php7.2-cli php7.2-sqlite php7.2-gd php7.2-pgsql php7.2-xmlrpc php7.2-xml\ + php7.2-curl php7.2-cli php7.2-sqlite php7.2-gd php7.2-pgsql php7.2-xmlrpc php7.2-xml php-ldap\ sqlite3 postgresql-client \ cron certbot python-certbot-apache @@ -52,6 +52,7 @@ RUN make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem RUN a2ensite default-ssl # install lizmap +RUN echo "Downloading https://github.com/opengisch/lizmap-web-client/archive/$LIZMAPVERSION.tar.gz" RUN mkdir -p /var/www/ \ && curl -SL https://github.com/opengisch/lizmap-web-client/archive/$LIZMAPVERSION.tar.gz \ | tar --strip-components=1 -xzC /var/www From ac3262172f14a0250a8f62f7c89ed71e9aa5857d Mon Sep 17 00:00:00 2001 From: signedav Date: Sat, 24 Oct 2020 14:07:00 +0200 Subject: [PATCH 41/64] clean up temp before php install, because of this https://github.com/3liz/lizmap-web-client/issues/110#issuecomment-278923532 No idea what temp files are already written, but if it helps then fair enough. --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index 3367f75..caaeeaf 100755 --- a/Dockerfile +++ b/Dockerfile @@ -62,6 +62,7 @@ RUN /var/www/lizmap/install/set_rights.sh www-data www-data # use default profiles.ini RUN cp /var/www/lizmap/var/config/profiles.ini.php.dist /var/www/lizmap/var/config/profiles.ini.php # Install +RUN rm -rf /var/www/temp/lizmap/* RUN php /var/www/lizmap/install/installer.php # backup default var folder RUN cp -ar /var/www/lizmap/var var/www/lizmap/var_install From cbdbdd30c4bbf9a11f97a34dd585b444f7a3c5a6 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Thu, 4 Feb 2021 16:40:55 +0100 Subject: [PATCH 42/64] Update docker-compose.yml --- docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index e72d785..249bcc1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: build: context: . args: - lizmap_version: 3.3.6 + lizmap_version: 3.3.13 LE_on: 'false' LE_domain: 'example.com' LE_email: 'info@example.com' @@ -25,7 +25,7 @@ services: - net qgisserver: - image: "openquake/qgis-server:3.10.7" + image: "openquake/qgis-server:3.16" environment: # Improve rendering performance From 79c9edea7a77a84a5a757222ca39b04b878efbe3 Mon Sep 17 00:00:00 2001 From: signedav Date: Thu, 4 Feb 2021 16:49:05 +0100 Subject: [PATCH 43/64] commands to reload ldap config done in the configuration files --- conf/docker-entrypoint.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/conf/docker-entrypoint.sh b/conf/docker-entrypoint.sh index d33d974..d01c036 100755 --- a/conf/docker-entrypoint.sh +++ b/conf/docker-entrypoint.sh @@ -39,5 +39,7 @@ if [[ $LE_on == 'true' ]]; then sleep 5 fi fi +rm -rf /var/www/temp/lizmap/* +php ./var/www/lizmap/install/installer.php cron exec /usr/sbin/apachectl -DFOREGROUND From b9a4e7d224e8178eca3b3b6b58984cb961555b2e Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Thu, 4 Feb 2021 16:56:50 +0100 Subject: [PATCH 44/64] add WITH_LDAP arg --- Dockerfile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index caaeeaf..223dfce 100755 --- a/Dockerfile +++ b/Dockerfile @@ -22,11 +22,12 @@ RUN apt-get clean \ ARG LE_domain="example.com" ARG LE_email="info@example.com" ARG LE_staging='true' -ARG LE_on='false' +ARG WITH_LDAP='false' + ENV LE_domain=$LE_domain ENV LE_email=$LE_email ENV LE_staging=$LE_staging -ENV LE_on=$LE_on +ENV WITH_LDAP=$WITH_LDAP # this can be overriden at build time with --build-arg lizmap_version=release_3_2 ARG lizmap_version=master From 5e62f60727e6bb364ea6e8abb21e838ee371def4 Mon Sep 17 00:00:00 2001 From: signedav Date: Thu, 4 Feb 2021 16:59:50 +0100 Subject: [PATCH 45/64] consider WITH_LDAP --- conf/docker-entrypoint.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/conf/docker-entrypoint.sh b/conf/docker-entrypoint.sh index d01c036..8249cb6 100755 --- a/conf/docker-entrypoint.sh +++ b/conf/docker-entrypoint.sh @@ -39,7 +39,9 @@ if [[ $LE_on == 'true' ]]; then sleep 5 fi fi -rm -rf /var/www/temp/lizmap/* -php ./var/www/lizmap/install/installer.php +if [[ $WITH_LDAP == 'true' ]]; then + rm -rf /var/www/temp/lizmap/* + php ./var/www/lizmap/install/installer.php +fi cron exec /usr/sbin/apachectl -DFOREGROUND From afcd39aa02ba78f7d52d612937eb331fe4817b2a Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Thu, 4 Feb 2021 17:10:12 +0100 Subject: [PATCH 46/64] Update README.md --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e0b4c6b..45c62a4 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,14 @@ docker-lizmap ============= LizMap is a complete Internet QGIS map publishing. +___________________________________________________________________________ -____________________________________________________________________ +Building image: +--------------- +docker build --build-arg lizmap_version=3.3.13 -t=opengisch/lizmap:3.3.13 . + +Using image: +--------------- With Docker-compose: From eceb799adc504df5fc170d96aaba46e7aced981f Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Thu, 4 Feb 2021 17:14:09 +0100 Subject: [PATCH 47/64] Update Dockerfile --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 223dfce..961352d 100755 --- a/Dockerfile +++ b/Dockerfile @@ -22,11 +22,13 @@ RUN apt-get clean \ ARG LE_domain="example.com" ARG LE_email="info@example.com" ARG LE_staging='true' +ARG LE_on='false' ARG WITH_LDAP='false' ENV LE_domain=$LE_domain ENV LE_email=$LE_email ENV LE_staging=$LE_staging +ENV LE_on=$LE_on ENV WITH_LDAP=$WITH_LDAP # this can be overriden at build time with --build-arg lizmap_version=release_3_2 From f4ed1b26d2274dc0aaf2bc6d04b8990265e75133 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Thu, 4 Feb 2021 17:19:26 +0100 Subject: [PATCH 48/64] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 45c62a4..84bb8e4 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ ___________________________________________________________________________ Building image: --------------- -docker build --build-arg lizmap_version=3.3.13 -t=opengisch/lizmap:3.3.13 . +docker build --build-arg lizmap_version=3.3.13 --build-arg WITH_LDAP=true -t=opengisch/lizmap:3.3.13 . Using image: --------------- From c442e6d8398c0de65860886574ecaeadb7721347 Mon Sep 17 00:00:00 2001 From: Marco Bernasocchi Date: Tue, 10 Aug 2021 16:37:20 +0200 Subject: [PATCH 49/64] fix path in entrypoint --- conf/docker-entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/docker-entrypoint.sh b/conf/docker-entrypoint.sh index 8249cb6..c5b1a32 100755 --- a/conf/docker-entrypoint.sh +++ b/conf/docker-entrypoint.sh @@ -41,7 +41,7 @@ if [[ $LE_on == 'true' ]]; then fi if [[ $WITH_LDAP == 'true' ]]; then rm -rf /var/www/temp/lizmap/* - php ./var/www/lizmap/install/installer.php + php /var/www/lizmap/install/installer.php fi cron exec /usr/sbin/apachectl -DFOREGROUND From 925c242d2db77dd340e261f76f556f4b80209a7c Mon Sep 17 00:00:00 2001 From: Matthias Kuhn Date: Tue, 17 Aug 2021 12:57:58 +0200 Subject: [PATCH 50/64] Revert to version 3.3.11 --- .github/workflows/release.yaml | 24 ++++++++++++++++++++++++ Dockerfile | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/release.yaml diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..3f2621d --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,24 @@ +name: 🧪 Release + +on: + release: + types: ['published', 'released'] + + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Extract tag + run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV + + - name: Build and push + id: docker-build + uses: whoan/docker-build-with-cache-action@v5 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + image_name: opengisch/lizmap + image_tag: ${{ env.RELEASE_VERSION }} diff --git a/Dockerfile b/Dockerfile index 961352d..8014af5 100755 --- a/Dockerfile +++ b/Dockerfile @@ -32,7 +32,7 @@ ENV LE_on=$LE_on ENV WITH_LDAP=$WITH_LDAP # this can be overriden at build time with --build-arg lizmap_version=release_3_2 -ARG lizmap_version=master +ARG lizmap_version=3.3.11 ENV LIZMAPVERSION=$lizmap_version # setup apache modules From 9b0db567e234fdee3f29c32411a8dd3a775e444f Mon Sep 17 00:00:00 2001 From: Matthias Kuhn Date: Tue, 17 Aug 2021 12:59:37 +0200 Subject: [PATCH 51/64] Only published --- .github/workflows/release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 3f2621d..90c1f97 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -2,7 +2,7 @@ name: 🧪 Release on: release: - types: ['published', 'released'] + types: ['published'] jobs: From a23cb07b44d01947a2d9e27d0efe3ba44b92bc31 Mon Sep 17 00:00:00 2001 From: Matthias Kuhn Date: Tue, 17 Aug 2021 14:42:10 +0200 Subject: [PATCH 52/64] Update workflow --- .github/workflows/release.yaml | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 90c1f97..aaa4088 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -9,16 +9,27 @@ jobs: build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - - name: Extract tag + - + uses: actions/checkout@v2 + - + name: Extract tag run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV - - - name: Build and push - id: docker-build - uses: whoan/docker-build-with-cache-action@v5 + - + name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - + name: Login to DockerHub + uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - image_name: opengisch/lizmap - image_tag: ${{ env.RELEASE_VERSION }} + - + name: Build and push + id: docker_build + uses: docker/build-push-action@v2 + with: + push: true + tags: opengisch/lizmap:${{ env.RELEASE_VERSION }} From 72badd37902ac3a89ba83c0701d316392d2ad8d1 Mon Sep 17 00:00:00 2001 From: Clemens Rudert Date: Tue, 22 Feb 2022 02:03:31 +0100 Subject: [PATCH 53/64] set lizmap to version 3.5.1, use qgis server to 3.22 in compose for tests, use lizmap web client directly from original repo --- Dockerfile | 17 +++++++++++------ docker-compose.yml | 5 ++--- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8014af5..508d1b9 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ FROM ubuntu:bionic -MAINTAINER Marco Bernasocchi / docker-lizmap +LABEL opengisch.image.authors=="Clemens Rudert" ENV DEBIAN_FRONTEND noninteractive @@ -14,7 +14,9 @@ RUN apt-get -y update \ php7.2-fpm php7.2 \ php7.2-curl php7.2-cli php7.2-sqlite php7.2-gd php7.2-pgsql php7.2-xmlrpc php7.2-xml php-ldap\ sqlite3 postgresql-client \ - cron certbot python-certbot-apache + cron certbot python-certbot-apache \ + unzip \ + rsync RUN apt-get clean \ && rm -r /var/lib/apt/lists/* @@ -32,7 +34,7 @@ ENV LE_on=$LE_on ENV WITH_LDAP=$WITH_LDAP # this can be overriden at build time with --build-arg lizmap_version=release_3_2 -ARG lizmap_version=3.3.11 +ARG lizmap_version=3.5.1 ENV LIZMAPVERSION=$lizmap_version # setup apache modules @@ -55,10 +57,13 @@ RUN make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem RUN a2ensite default-ssl # install lizmap -RUN echo "Downloading https://github.com/opengisch/lizmap-web-client/archive/$LIZMAPVERSION.tar.gz" +RUN echo "Downloading https://github.com/3liz/lizmap-web-client/releases/download/$LIZMAPVERSION/lizmap-web-client-$LIZMAPVERSION.zip" RUN mkdir -p /var/www/ \ - && curl -SL https://github.com/opengisch/lizmap-web-client/archive/$LIZMAPVERSION.tar.gz \ - | tar --strip-components=1 -xzC /var/www + && curl -SL https://github.com/3liz/lizmap-web-client/releases/download/$LIZMAPVERSION/lizmap-web-client-$LIZMAPVERSION.zip > lizmap-web-client-$LIZMAPVERSION.zip && \ + unzip -q lizmap-web-client-$LIZMAPVERSION.zip && \ + rsync -a lizmap-web-client-$LIZMAPVERSION/* /var/www && \ + rm -rf lizmap-web-client-$LIZMAPVERSION && \ + rm -rf lizmap-web-client-$LIZMAPVERSION.zip # Set rights & active config RUN chmod +x /var/www/lizmap/install/set_rights.sh RUN /var/www/lizmap/install/set_rights.sh www-data www-data diff --git a/docker-compose.yml b/docker-compose.yml index 249bcc1..d197cc3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,12 +4,11 @@ services: build: context: . args: - lizmap_version: 3.3.13 + lizmap_version: 3.5.1 LE_on: 'false' LE_domain: 'example.com' LE_email: 'info@example.com' LE_staging: 'true' # change to 'false' when ready for productionb - #image: "opengisch/docker-lizmap:3.3" restart: on-failure ports: - 80:80 @@ -25,7 +24,7 @@ services: - net qgisserver: - image: "openquake/qgis-server:3.16" + image: "opengisch/qgis-server:3.22" environment: # Improve rendering performance From e45166a83c95627d7c378ea254d70785a76568f8 Mon Sep 17 00:00:00 2001 From: Clemens Rudert Date: Fri, 11 Mar 2022 15:10:53 +0100 Subject: [PATCH 54/64] setup version 3.4.9 for usage with docker --- Dockerfile | 2 +- docker-compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 508d1b9..96dd4f6 100755 --- a/Dockerfile +++ b/Dockerfile @@ -34,7 +34,7 @@ ENV LE_on=$LE_on ENV WITH_LDAP=$WITH_LDAP # this can be overriden at build time with --build-arg lizmap_version=release_3_2 -ARG lizmap_version=3.5.1 +ARG lizmap_version=3.4.9 ENV LIZMAPVERSION=$lizmap_version # setup apache modules diff --git a/docker-compose.yml b/docker-compose.yml index d197cc3..f4310ad 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: build: context: . args: - lizmap_version: 3.5.1 + lizmap_version: 3.4.9 LE_on: 'false' LE_domain: 'example.com' LE_email: 'info@example.com' From 6cb8d5d8898cf456b5f002dcd1ceb525726f01fe Mon Sep 17 00:00:00 2001 From: Clemens Rudert Date: Fri, 29 Apr 2022 19:37:20 +0200 Subject: [PATCH 55/64] bumpp to new version --- Dockerfile | 2 +- docker-compose.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 96dd4f6..8037d0c 100755 --- a/Dockerfile +++ b/Dockerfile @@ -34,7 +34,7 @@ ENV LE_on=$LE_on ENV WITH_LDAP=$WITH_LDAP # this can be overriden at build time with --build-arg lizmap_version=release_3_2 -ARG lizmap_version=3.4.9 +ARG lizmap_version=3.5.3 ENV LIZMAPVERSION=$lizmap_version # setup apache modules diff --git a/docker-compose.yml b/docker-compose.yml index f4310ad..fd4db70 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: build: context: . args: - lizmap_version: 3.4.9 + lizmap_version: 3.5.3 LE_on: 'false' LE_domain: 'example.com' LE_email: 'info@example.com' From 6f0b8f70f2445247bd3b8fbbfaa029f15d259ec7 Mon Sep 17 00:00:00 2001 From: Clemens Rudert Date: Wed, 18 May 2022 23:56:19 +0200 Subject: [PATCH 56/64] fix php deps --- Dockerfile | 12 ++++++------ conf/000-default.conf | 2 +- conf/docker-entrypoint.sh | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8037d0c..981e05e 100755 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:bionic +FROM ubuntu:22.04 LABEL opengisch.image.authors=="Clemens Rudert" ENV DEBIAN_FRONTEND noninteractive @@ -6,15 +6,15 @@ ENV DEBIAN_FRONTEND noninteractive RUN apt-get -y update \ && apt-get install -y software-properties-common \ && add-apt-repository -y universe \ - && add-apt-repository -y ppa:certbot/certbot + && add-apt-repository ppa:ondrej/php RUN apt-get -y update \ - && apt-get install -y --fix-missing python-simplejson xauth htop nano curl ntp ntpdate ssl-cert software-properties-common \ + && apt-get install -y --fix-missing python3-simplejson xauth htop nano curl ntp ntpdate ssl-cert software-properties-common \ apache2 libapache2-mod-fcgid \ - php7.2-fpm php7.2 \ - php7.2-curl php7.2-cli php7.2-sqlite php7.2-gd php7.2-pgsql php7.2-xmlrpc php7.2-xml php-ldap\ + php7.4-fpm php7.4 \ + php7.4-curl php7.4-cli php7.4-sqlite php7.4-gd php7.4-pgsql php7.4-xmlrpc php7.4-xml php-ldap\ sqlite3 postgresql-client \ - cron certbot python-certbot-apache \ + cron certbot python3-certbot-apache \ unzip \ rsync diff --git a/conf/000-default.conf b/conf/000-default.conf index 124dcac..59a3e11 100644 --- a/conf/000-default.conf +++ b/conf/000-default.conf @@ -36,7 +36,7 @@ # 2.4.10+ can proxy to unix socket - SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/" + SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost/" diff --git a/conf/docker-entrypoint.sh b/conf/docker-entrypoint.sh index c5b1a32..b14c669 100755 --- a/conf/docker-entrypoint.sh +++ b/conf/docker-entrypoint.sh @@ -20,7 +20,7 @@ fi # Apache gets grumpy about PID files pre-existing rm -f /run/apache2/apache2.pid -service php7.2-fpm start +service php7.4-fpm start if [[ $LE_on == 'true' ]]; then From dfd5222354edcb14700949d2c325ded1ca43b07d Mon Sep 17 00:00:00 2001 From: Clemens Rudert Date: Thu, 19 May 2022 00:30:19 +0200 Subject: [PATCH 57/64] fix version --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 981e05e..a6b3f61 100755 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,7 @@ RUN apt-get -y update \ && apt-get install -y --fix-missing python3-simplejson xauth htop nano curl ntp ntpdate ssl-cert software-properties-common \ apache2 libapache2-mod-fcgid \ php7.4-fpm php7.4 \ - php7.4-curl php7.4-cli php7.4-sqlite php7.4-gd php7.4-pgsql php7.4-xmlrpc php7.4-xml php-ldap\ + php7.4-curl php7.4-cli php7.4-sqlite php7.4-gd php7.4-pgsql php7.4-xmlrpc php7.4-xml php7.4-ldap\ sqlite3 postgresql-client \ cron certbot python3-certbot-apache \ unzip \ From bc2c4f1f9b2962e8bb4157b496d139d8a3d8aaf9 Mon Sep 17 00:00:00 2001 From: Clemens Rudert Date: Thu, 14 Sep 2023 16:27:23 +0200 Subject: [PATCH 58/64] add saml support --- Dockerfile | 60 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 51 insertions(+), 9 deletions(-) diff --git a/Dockerfile b/Dockerfile index a6b3f61..841e77f 100755 --- a/Dockerfile +++ b/Dockerfile @@ -5,22 +5,52 @@ ENV DEBIAN_FRONTEND noninteractive RUN apt-get -y update \ && apt-get install -y software-properties-common \ - && add-apt-repository -y universe \ - && add-apt-repository ppa:ondrej/php + && add-apt-repository -y universe + # && add-apt-repository ppa:ondrej/php RUN apt-get -y update \ - && apt-get install -y --fix-missing python3-simplejson xauth htop nano curl ntp ntpdate ssl-cert software-properties-common \ + && apt-get install -y --fix-missing \ + python3-simplejson \ + xauth \ + htop \ + nano \ + curl \ + ntp \ + ntpdate \ + ssl-cert \ + openssl \ + software-properties-common \ apache2 libapache2-mod-fcgid \ - php7.4-fpm php7.4 \ - php7.4-curl php7.4-cli php7.4-sqlite php7.4-gd php7.4-pgsql php7.4-xmlrpc php7.4-xml php7.4-ldap\ - sqlite3 postgresql-client \ + php-fpm \ + php \ + php-curl \ + php-cli \ + php-pdo \ + php-pgsql \ + php-sqlite3 \ + php-gd \ + php-xmlrpc \ + php-xml \ + php-ldap\ + php-date \ + # php-zlib \ + sqlite3 \ + postgresql-client \ cron certbot python3-certbot-apache \ unzip \ - rsync + rsync \ + zlib1g RUN apt-get clean \ && rm -r /var/lib/apt/lists/* +# Get php composer +RUN curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php && \ + HASH=`curl -sS https://composer.github.io/installer.sig` && \ + echo $HASH && \ + php -r "if (hash_file('SHA384', '/tmp/composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" && \ + php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer + ARG LE_domain="example.com" ARG LE_email="info@example.com" ARG LE_staging='true' @@ -34,7 +64,7 @@ ENV LE_on=$LE_on ENV WITH_LDAP=$WITH_LDAP # this can be overriden at build time with --build-arg lizmap_version=release_3_2 -ARG lizmap_version=3.5.3 +ARG lizmap_version=3.6.5 ENV LIZMAPVERSION=$lizmap_version # setup apache modules @@ -69,9 +99,21 @@ RUN chmod +x /var/www/lizmap/install/set_rights.sh RUN /var/www/lizmap/install/set_rights.sh www-data www-data # use default profiles.ini RUN cp /var/www/lizmap/var/config/profiles.ini.php.dist /var/www/lizmap/var/config/profiles.ini.php + +# use default composer.json +RUN cp /var/www/lizmap/my-packages/composer.json.dist /var/www/lizmap/my-packages/composer.json + +RUN composer require --working-dir=/var/www/lizmap/my-packages "jelix/saml-module" + # Install -RUN rm -rf /var/www/temp/lizmap/* +# RUN rm -rf /var/www/temp/lizmap/* +RUN php /var/www/lizmap/install/configurator.php saml +RUN php /var/www/lizmap/install/configurator.php samladmin RUN php /var/www/lizmap/install/installer.php +# Clean up +RUN /var/www/lizmap/install/clean_vartmp.sh +RUN /var/www/lizmap/install/set_rights.sh + # backup default var folder RUN cp -ar /var/www/lizmap/var var/www/lizmap/var_install From 6ae4a3b73353bfdd4e8e2d7c2a98393b8cb7a731 Mon Sep 17 00:00:00 2001 From: Clemens Rudert Date: Thu, 14 Sep 2023 16:39:22 +0200 Subject: [PATCH 59/64] allow superuser --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 841e77f..9e4abae 100755 --- a/Dockerfile +++ b/Dockerfile @@ -103,6 +103,8 @@ RUN cp /var/www/lizmap/var/config/profiles.ini.php.dist /var/www/lizmap/var/conf # use default composer.json RUN cp /var/www/lizmap/my-packages/composer.json.dist /var/www/lizmap/my-packages/composer.json + +ENV COMPOSER_ALLOW_SUPERUSER=1 RUN composer require --working-dir=/var/www/lizmap/my-packages "jelix/saml-module" # Install From c4ba0e568e20eebd09bb2b635597089f77724ea6 Mon Sep 17 00:00:00 2001 From: Clemens Rudert Date: Thu, 14 Sep 2023 17:27:19 +0200 Subject: [PATCH 60/64] fix entrypoint --- conf/docker-entrypoint.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/docker-entrypoint.sh b/conf/docker-entrypoint.sh index b14c669..1c43ac5 100755 --- a/conf/docker-entrypoint.sh +++ b/conf/docker-entrypoint.sh @@ -20,7 +20,7 @@ fi # Apache gets grumpy about PID files pre-existing rm -f /run/apache2/apache2.pid -service php7.4-fpm start +service php8.1-fpm start if [[ $LE_on == 'true' ]]; then From e2464dc33fe2d189bf362240454e568082d52b76 Mon Sep 17 00:00:00 2001 From: Clemens Rudert Date: Thu, 14 Sep 2023 17:28:54 +0200 Subject: [PATCH 61/64] fix apache module --- conf/000-default.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/000-default.conf b/conf/000-default.conf index 59a3e11..79674fe 100644 --- a/conf/000-default.conf +++ b/conf/000-default.conf @@ -36,7 +36,7 @@ # 2.4.10+ can proxy to unix socket - SetHandler "proxy:unix:/var/run/php/php7.4-fpm.sock|fcgi://localhost/" + SetHandler "proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost/" From 6f9a13be5f3491615da270f6c4fdc63da09b14cb Mon Sep 17 00:00:00 2001 From: Laurent Jouanneau Date: Fri, 20 Oct 2023 16:50:10 +0200 Subject: [PATCH 62/64] Fix the build and the startup of the image The lizmap installer and the configuration of extra modules should be launch at startup, not during the build, else we may loose data and configuration parameters set by the module installers. Configurators and installers are idempotent, so we can launch them at each starts without issues. --- Dockerfile | 36 +++++++++--------------------------- README.md | 4 ++-- conf/docker-entrypoint.sh | 24 +++++++++++++++--------- docker-compose.yml | 2 +- 4 files changed, 27 insertions(+), 39 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9e4abae..03ce571 100755 --- a/Dockerfile +++ b/Dockerfile @@ -55,16 +55,14 @@ ARG LE_domain="example.com" ARG LE_email="info@example.com" ARG LE_staging='true' ARG LE_on='false' -ARG WITH_LDAP='false' ENV LE_domain=$LE_domain ENV LE_email=$LE_email ENV LE_staging=$LE_staging ENV LE_on=$LE_on -ENV WITH_LDAP=$WITH_LDAP # this can be overriden at build time with --build-arg lizmap_version=release_3_2 -ARG lizmap_version=3.6.5 +ARG lizmap_version=3.6.7 ENV LIZMAPVERSION=$lizmap_version # setup apache modules @@ -78,8 +76,6 @@ COPY conf/mod_deflate.conf /etc/apache2/conf-available/ COPY conf/fcgid.conf /etc/apache2/mods-enabled/ COPY conf/default-ssl.conf /etc/apache2/sites-available/ COPY conf/000-default.conf /etc/apache2/sites-available/ -COPY conf/lizmapConfig.ini.php /var/www/lizmap/var/config/ -COPY conf/localconfig.ini.php /var/www/lizmap/var/config/ # enable self signed SSL RUN mkdir /etc/apache2/ssl @@ -94,34 +90,20 @@ RUN mkdir -p /var/www/ \ rsync -a lizmap-web-client-$LIZMAPVERSION/* /var/www && \ rm -rf lizmap-web-client-$LIZMAPVERSION && \ rm -rf lizmap-web-client-$LIZMAPVERSION.zip -# Set rights & active config -RUN chmod +x /var/www/lizmap/install/set_rights.sh -RUN /var/www/lizmap/install/set_rights.sh www-data www-data -# use default profiles.ini +# set default configuration RUN cp /var/www/lizmap/var/config/profiles.ini.php.dist /var/www/lizmap/var/config/profiles.ini.php +COPY conf/lizmapConfig.ini.php /var/www/lizmap/var/config/ +COPY conf/localconfig.ini.php /var/www/lizmap/var/config/ -# use default composer.json -RUN cp /var/www/lizmap/my-packages/composer.json.dist /var/www/lizmap/my-packages/composer.json - +# backup default var folder, it will be copied by docker-entrypoints.sh into /var/www/lizmap/var at first start, +# if the directory is empty +RUN mv /var/www/lizmap/var var/www/lizmap/var_install +# use default composer.json and install the extra modules +RUN cp /var/www/lizmap/my-packages/composer.json.dist /var/www/lizmap/my-packages/composer.json ENV COMPOSER_ALLOW_SUPERUSER=1 RUN composer require --working-dir=/var/www/lizmap/my-packages "jelix/saml-module" -# Install -# RUN rm -rf /var/www/temp/lizmap/* -RUN php /var/www/lizmap/install/configurator.php saml -RUN php /var/www/lizmap/install/configurator.php samladmin -RUN php /var/www/lizmap/install/installer.php -# Clean up -RUN /var/www/lizmap/install/clean_vartmp.sh -RUN /var/www/lizmap/install/set_rights.sh - -# backup default var folder -RUN cp -ar /var/www/lizmap/var var/www/lizmap/var_install - -# change jauth.db -#COPY conf/jauth.db /var/www/lizmap/var/db/jauth.db - RUN mkdir -p /io/data/ VOLUME ["/var/www/lizmap/var" , "/io"] diff --git a/README.md b/README.md index 84bb8e4..3d23feb 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ ___________________________________________________________________________ Building image: --------------- -docker build --build-arg lizmap_version=3.3.13 --build-arg WITH_LDAP=true -t=opengisch/lizmap:3.3.13 . +docker build --build-arg lizmap_version=3.6.7 -t=opengisch/lizmap:3.6.7 . Using image: --------------- @@ -28,7 +28,7 @@ docker-compose up -d * Now config lizmap on web : ``` -http://ip/lizmap/www/admin.php/config +http://localhost/admin.php/config ``` * change URL WMS: diff --git a/conf/docker-entrypoint.sh b/conf/docker-entrypoint.sh index 1c43ac5..74223a8 100755 --- a/conf/docker-entrypoint.sh +++ b/conf/docker-entrypoint.sh @@ -1,7 +1,7 @@ #!/bin/bash set -e #generate config file -VAR="/var/www/lizmap/var/config" +VARCONFIG="/var/www/lizmap/var/config" echo "LE_on:" $LE_on echo "LE_staging:" $LE_staging @@ -9,14 +9,12 @@ echo "LE_email:" $LE_email echo "LE_domain:" $LE_domain -if [[ ! -d $VAR ]]; then +if [[ ! -d $VARCONFIG ]]; then + # the var volume is empty, let's fill it with default configuration files and missing directories echo "Creating Config file in /var" cp -avr /var/www/lizmap/var_install/* /var/www/lizmap/var fi -#set-rights -/var/www/lizmap/install/set_rights.sh www-data www-data - # Apache gets grumpy about PID files pre-existing rm -f /run/apache2/apache2.pid @@ -39,9 +37,17 @@ if [[ $LE_on == 'true' ]]; then sleep 5 fi fi -if [[ $WITH_LDAP == 'true' ]]; then - rm -rf /var/www/temp/lizmap/* - php /var/www/lizmap/install/installer.php -fi + +# configure extra modules +php /var/www/lizmap/install/configurator.php saml +php /var/www/lizmap/install/configurator.php samladmin + +# launch the installer, it will launch modules/lizmap installers if lizmap/var was empty or it will launch module updaters +# if needed.. +php /var/www/lizmap/install/installer.php +/var/www/lizmap/install/clean_vartmp.sh +#set-rights +/var/www/lizmap/install/set_rights.sh www-data www-data + cron exec /usr/sbin/apachectl -DFOREGROUND diff --git a/docker-compose.yml b/docker-compose.yml index fd4db70..5507e6e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: build: context: . args: - lizmap_version: 3.5.3 + lizmap_version: 3.6.7 LE_on: 'false' LE_domain: 'example.com' LE_email: 'info@example.com' From 1f8a5c93dc909154c68d665ae223eb3d22f9a7d8 Mon Sep 17 00:00:00 2001 From: Laurent Jouanneau Date: Fri, 20 Oct 2023 17:29:55 +0200 Subject: [PATCH 63/64] Add a process to upgrade from a previous version of lizmap --- README.md | 34 ++++++++++++++++++++++++++++++++++ conf/docker-entrypoint.sh | 29 +++++++++++++++++++++++++++-- docker-compose.yml | 3 ++- 3 files changed, 63 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3d23feb..f9ed72f 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,40 @@ http://localhost/admin.php/config * http://docs.3liz.com/fr/ +Upgrading from Lizmap 3.5 +------------------------- + +If you want to reuse a database containing tables of Lizmap 3.5, create a directory somewhere, +for example `./lizmap-previous-config`, and copy these files into it: + +- at least the `installer.ini.php` of the Lizmap 3.5 installation (stored originally into `lizmap/var/config`) +- the `lizmapConfig.ini.php` file if you want to retrieve the list of projects +- the `profiles.ini.php` file if there are specific connection profiles +- the `localconfig.ini.php` and `liveconfig.ini.php` if you want to retrieve some specific configuration, but + you should remove from them any reference to modules that are not used anymore into your new lizmap container. +- if you are using a sqlite database, the `jauth.db` database file (stored originally into `lizmap/var/db`) + +Modify the `docker-compose.yml` file to mount the `./lizmap-previous-config` directory at `/var/www/lizmap/previous-config` +for the lizmap image. For example: + +``` +services: + lizmap: + ... + volumes: + - ./projects:/io/data:ro + - var:/var/www/lizmap/var + - ./lizmap-previous-config/:/var/www/lizmap/previous-config +``` + +Launch docker compose. It will install the `installer.ini.php` and the `jauth.db`, and other configuration files if +there are present, and then it will launch the Lizmap installer which will migrate data if needed. + +Stop the containers and remove the mount on `/var/www/lizmap/previous-config`, else it will overwrite new data +at the next start, with the old database and old configuration files. + + + ------------------------------- Lizmap Web Application generates dynamically a web map application (php/html/css/js) with the help of Qgis Server ( QGIS Server Tutorial ). You can configure one web map per Qgis project with the QGIS LizMap Plugin. diff --git a/conf/docker-entrypoint.sh b/conf/docker-entrypoint.sh index 74223a8..edaa084 100755 --- a/conf/docker-entrypoint.sh +++ b/conf/docker-entrypoint.sh @@ -2,19 +2,42 @@ set -e #generate config file VARCONFIG="/var/www/lizmap/var/config" +PREVIOUSCONFIG="/var/www/lizmap/previous-config" echo "LE_on:" $LE_on echo "LE_staging:" $LE_staging echo "LE_email:" $LE_email echo "LE_domain:" $LE_domain - if [[ ! -d $VARCONFIG ]]; then # the var volume is empty, let's fill it with default configuration files and missing directories echo "Creating Config file in /var" cp -avr /var/www/lizmap/var_install/* /var/www/lizmap/var fi +if [[ -d $PREVIOUSCONFIG ]]; then + # there is a volume containing the installer.ini.php file and the jauth.db file of + # a previous version of Lizmap, let's install it. + if [[ -f $PREVIOUSCONFIG/installer.ini.php ]]; then + cp $PREVIOUSCONFIG/installer.ini.php $VARCONFIG/ + fi + if [[ -f $PREVIOUSCONFIG/localconfig.ini.php ]]; then + cp $PREVIOUSCONFIG/localconfig.ini.php $VARCONFIG/ + fi + if [[ -f $PREVIOUSCONFIG/liveconfig.ini.php ]]; then + cp $PREVIOUSCONFIG/liveconfig.ini.php $VARCONFIG/ + fi + if [[ -f $PREVIOUSCONFIG/profiles.ini.php ]]; then + cp $PREVIOUSCONFIG/profiles.ini.php $VARCONFIG/ + fi + if [[ -f $PREVIOUSCONFIG/lizmapConfig.ini.php ]]; then + cp $PREVIOUSCONFIG/lizmapConfig.ini.php $VARCONFIG/ + fi + if [[ -f $PREVIOUSCONFIG/jauth.db ]]; then + cp $PREVIOUSCONFIG/jauth.db /var/www/lizmap/var/db/ + fi +fi + # Apache gets grumpy about PID files pre-existing rm -f /run/apache2/apache2.pid @@ -38,13 +61,15 @@ if [[ $LE_on == 'true' ]]; then fi fi -# configure extra modules +# activate extra modules php /var/www/lizmap/install/configurator.php saml php /var/www/lizmap/install/configurator.php samladmin # launch the installer, it will launch modules/lizmap installers if lizmap/var was empty or it will launch module updaters # if needed.. php /var/www/lizmap/install/installer.php + +# remove cache and temporary files, to be sure that they will be regenerated with the updated configuration and source files /var/www/lizmap/install/clean_vartmp.sh #set-rights /var/www/lizmap/install/set_rights.sh www-data www-data diff --git a/docker-compose.yml b/docker-compose.yml index 5507e6e..942999e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,7 +8,7 @@ services: LE_on: 'false' LE_domain: 'example.com' LE_email: 'info@example.com' - LE_staging: 'true' # change to 'false' when ready for productionb + LE_staging: 'true' # change to 'false' when ready for production restart: on-failure ports: - 80:80 @@ -16,6 +16,7 @@ services: volumes: - ./projects:/io/data:ro - var:/var/www/lizmap/var + #- ./lizmap-previous-config/:/var/www/lizmap/previous-config depends_on: - postgis - qgisserver From a3276a8913daafdb4c837cb910b90d13127d222d Mon Sep 17 00:00:00 2001 From: Laurent Jouanneau Date: Tue, 24 Oct 2023 14:05:01 +0200 Subject: [PATCH 64/64] Fix: launch the configurator alone to do migration if any --- conf/docker-entrypoint.sh | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/conf/docker-entrypoint.sh b/conf/docker-entrypoint.sh index edaa084..cc9c82f 100755 --- a/conf/docker-entrypoint.sh +++ b/conf/docker-entrypoint.sh @@ -61,15 +61,20 @@ if [[ $LE_on == 'true' ]]; then fi fi +# launch the configurator. In case this is an upgrade of Lizmap, it will +# launch the migration of configuration file if needed +php /var/www/lizmap/install/configurator.php + # activate extra modules php /var/www/lizmap/install/configurator.php saml php /var/www/lizmap/install/configurator.php samladmin -# launch the installer, it will launch modules/lizmap installers if lizmap/var was empty or it will launch module updaters -# if needed.. +# launch the installer, it will launch modules/lizmap installers if +# lizmap/var was empty or it will launch module updaters if needed.. php /var/www/lizmap/install/installer.php -# remove cache and temporary files, to be sure that they will be regenerated with the updated configuration and source files +# remove cache and temporary files, to be sure that they will be regenerated +# with the updated configuration and source files /var/www/lizmap/install/clean_vartmp.sh #set-rights /var/www/lizmap/install/set_rights.sh www-data www-data