Dockerizzazione

This repository contains scripts and recipes for deploy of the G3W-SUITE web-gis application with Docker and Docker compose .

Deploy

Follow steps to deploy G3W-SUITE on a Ubuntu Server (20.04)

Configurazione

Crea un file .env (o copia .env.example e rinominalo in .env) e posizionalo nella directory principale, il file conterrà le credenziali del database (cambia your password) e altre impostazioni:

# External hostname, for docker internal network aliases
WEBGIS_PUBLIC_HOSTNAME=demo.g3wsuite.it/

# This volume is persistent and mounted by all
# containers as /shared-volume
WEBGIS_DOCKER_SHARED_VOLUME=/tmp/shared-volume-g3w-suite


# DB setup
G3WSUITE_POSTGRES_USER_LOCAL=g3wsuite
G3WSUITE_POSTGRES_PASS=<your_password>
G3WSUITE_POSTGRES_DBNAME=g3wsuite
G3WSUITE_POSTGRES_HOST=postgis
G3WSUITE_POSTGRES_PORT=5432

Description of other environment variables that can be used, are available on Docker environment variables

Run

docker-compose up -d

If all went well, G3W-SUITE run on http://localhost:8080

Login Page

G3W-SUITE with consumer image

G3W-SUITE use huey for bach processing (https://github.com/coleifer/huey), so if you want to use it, use docker-compose-consumer.yml file on deploy:

docker-compose -f docker-compose-consumer.yml up -d

Builds

Docker compose will download images from docker hub (https://hub.docker.com/u/g3wsuite), but is also possible build main image of G3W-SUITE and other docker-compose images.

G3W-SUITE

The main suite docker image can be built with:

docker build -f Dockerfile.g3wsuite.dockerfile -t g3wsuite/g3w-suite:dev --no-cache .

The image is build from https://github.com/g3w-suite/g3w-admin.git --branch dev and from a dependencies base image Dockerfile.g3wsuite-deps.ltr.dockerfile, the dependencies image can be built with:

docker build -f Dockerfile.g3wsuite-deps.ltr.dockerfile -t g3wsuite/g3w-suite-deps-ltr:dev --no-cache .

Usually is sufficient make build of main docker image g3wsuite/g3w-suite:dev, the build of dependence image g3wsuite/g3w-suite-deps-ltr:dev is done to update last QGIS LTR version.

PostGis

L”immagine di Postgis può essere costruita con:

docker build -f Dockerfile.postgis.dockerfile -t g3wsuite/postgis:11.0-2.5 .

La Docker hub name per questa immagine è g3wsuite/postgis: 11.0-2.5

Setups

PG_SERVICE

To use of PostgreSql Service, put your service setups into ./scripts/pg_service.conf file, the conf file will be mounted into docker container at runtime to PGSERVICEFILE path position.

Configurazione aggiuntiva HTTPS

To active https with LetsEncrypt just follow the following instructions:

  • move config/_nginx/django_ssl.conf to config/nginx/django_ssl.conf

  • controlla il nome di dominio nel file .env e in config/nginx/django_ssl.conf

  • lanciare docker pull certbot/certbot

  • lanciare ./run_certbot.sh

  • activate 301 redirect into config/nginx/django.conf

  • restart compose

  • make sure the certs are renewed by adding a cron job with crontab -e and add the following line: 0 3 * * * /<path_to_your_docker_files>/run_certbot.sh

  • se hai disabilitato HTTPS, puoi spostare config/nginx/django ssl.conf nella sua posizione originale e riavviare il Docker compose per abilitare HTTPS

Volumes

Dati, progetti, caricamenti e database sono archiviati in un volume condiviso shared-volume, il volume deve essere su un dispositivo di archiviazione permanente e deve esservi applicato un criterio di backup.

Currently, the volume is mounted in /tmp/shared-volume-g3wsuite-dev. In production environments it is encouraged to change this to a permanent location. This can be done by modifying the .env file.

Prima configurazione

  • accediamo al pannello di amministrazione web dell”applicazione utilizzando le credenziali predefinite (admin/admin)

  • cambiare la password per l”utente amministratore e per qualsiasi altro eventuale utente di esempio

Caching

La tile cache può essere configurata e cancellata per singolo livello attraverso il pannello di amministrazione della applicazione e permane fino a quando non viene disabilitata o cancellata.

Suggerimento: abilita la cache su vettoriali lineari e poligonali.

Editing

Editing module is active by default, to avoid simultaneous feature editing by two or more users, the editing module works with a feature lock system. This locking system can remain active if users do not exit the editing state correctly, to avoid this it is advisable to activate a cron job on host machine that checks the features that have been locked for more than 4 hours and frees them:

0 */1 * * * docker exec -e DISPLAY=:99 g3w-suite-docker_g3w-suite_1 python3 /code/g3w-admin/manage.py check_features_locked

Front-end App

Set the environment variable

FRONTEND=True

This will set the front end app as the default app

Personalizzazione dello stile

I templates possono essere sovrascritti inserendo gli override in config/g3w-suite/overrides/templates, è necessario un riavvio del servizio Docker per rendere effettive le modifiche.

Anche il logo viene sovrascritto (tramite config/g3w-suite/settings_docker.py che è montato come volume), le modifiche al file delle impostazioni richiedono il riavvio del servizio Docker.

Un CSS personalizzato viene aggiunto alle pagine, il file si trova in config/g3w-suite/overrides/static/style.css e può essere modificato direttamente, le modifiche hanno effetto immediato.

Ottimizzazione delle prestazioni

Regole generali (in nessun ordine particolare: sono tutte obbligatorie)

  1. imposta la visibilità dipendente dalla scala per l”intero layer o per alcune features filtrate (esempio: mostra solo le strade principali fino alla scala 1: 1E+6)

  2. quando per la stilizzazione dei layer si utilizza il metodo categorizzato o la classificazione basata su regole oppure quando si attiva la visibilità dipendente dalla scala, è fortemente consigliato creare indici sulle colonne coinvolte nell”espressione della regola (esempio: “create indice idx_elec_penwell_ious on elec_penwell_ious (owner);”)

  3. avvia il progetto con solo pochi livelli attivi all”avvio

  4. non rendere attivi di default i livelli base XYZ come (Google base maps)

  5. non utilizzare il rendering basato sul metodo categorizzato o basato su regole con troppe categorie (esempio: elec_penwell_public_power), ciò rallenta il rendering della mappa

  6. abilitare la semplificazione del rendering per layer non puntuali, impostarlo su Distanza 1.2 e selezionare Abilita semplificazione provider se disponibile

Amministrazione PostgreSQL

PostGreSQL è in esecuzione in un contenitore Docker, per accedere al contenitore è possibile seguire le istruzioni seguenti:

Controlla il nome del contenitore

$ docker ps | grep postgis
84ef6a8d23e6        g3wsuite/postgis:11.0-2.5       "/bin/sh -c /docker-…"   2 days ago          Up 2 days           0.0.0.0:5438->5432/tcp           g3wsuitedocker_postgis_1

Nell”esempio il nome del contenitore è g3wsuitedocker_postgis_1

Accedi al contenitore

$ docker exec -it g3wsuitedocker_postgis_1 bash

Diventa utente postgres

root@84ef6a8d23e6:/# su - postgres

Connettiti a PostGis

postgres@84ef6a8d23e6:~$ psql
psql (11.2 (Debian 11.2-1.pgdg90+1))
Type "help" for help.

postgres=#

Portainer usage

Portainer (https://www.portainer.io) is a docker-based web application used to edit and manage Docker applications in a simple and intuitive way.

Plese refer to the Add new stack section to learn how to deploy the docker-compose-consumer.yml stack with Portainer (>= v2.1.1).

Contributors