Raw installation

The following instructions are for a Ubuntu 22.04 LTS.

Install required packages

First step is install dev libraries packages for python module

sudo apt-get install -y \
    libxml2-dev \
    libxslt-dev \
    postgresql-server-dev-all \
    libgdal-dev \
    python3-dev

If you are running a ubuntu Server version is necessary to install also a XServer for the Qt libraries. Is possible install XVFB a virtual framebuffer X server for X Version 11 and run it.

sudo apt intall -y xvfb

sudo Xvfb :99 -screen 0 640x480x24 -nolisten tcp &
export DISPLAY=:99

I suggest you to create a systemd service to run it on bootstrap.

Install QGIS Server

wget -qO - https://qgis.org/downloads/qgis-2022.gpg.key | sudo  gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/qgis-archive.gpg --import 
sudo chmod a+r /etc/apt/trusted.gpg.d/qgis-archive.gpg
sudo bash -c "echo \"deb [arch=amd64] https://qgis.org/ubuntu-ltr jammy main\" >> /etc/apt/sources.list"
sudo apt update && sudo apt install -y python3-qgis qgis-server

Installation of node.js and Yarn

G3W-ADMIN use javacript package manager Yarn and Node.js

sudo curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt install -y yarn

Create virtualenv

Install the follow python package Virtualenv Virtualenvwrapper

The following instructions are for python 3.10

Install python pip and virtualenvwrapper

sudo apt-get install python3-pip && sudo pip3 install virtualenvwrapper

Create a directory where to create environments for your virtualenvs.

mkdir <path_to_virtualenvs_directory>

To activate virtuenvwrapper on system login, add follow lines to ‘bashrc’ config file of your user

nano ~/.bashrc
....
export WORKON_HOME=<path_to_virtualenvs_directory>
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh

Login again with your user to activate Virtualenvwrapper

sudo su <my_ubuntu_username>

Virtualenv creation

To create a virtualnenv is sufficient call mkvirtualenv follow by the identification name for virtualenv (to use QGIS API into a virtualenv only solution is to give access python system site-packages to it using –system-site-packages option)

mkvirtualenv --system-site-packages g3wsuite

This last command just make active your new virtualenv environment, for the next times is possible use the follow command to activate the virtualenv environment:

workon g3wsuite

Use of native venv Python3

For G3W-SUITE deploy clearly can be used the native Python3 venv module, virtualenvwrapper is a third part module that render the use and management of virtual environments very simple.

Install G3W-SUITE

Clone code from github

git clone https://github.com/g3w-suite/g3w-admin.git

Set local_config.py file

G3W-ADMIN is a Django application, and to work is necessary set a config.py file. To start copy local_settings.example.py and set the databse and other:

cd g3w-admin/g3w-admin/base/settings
cp local_settings_example.py local_settings.py

set database, media root and session cookies name:

...

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': '<db_name>',
        'USER': '<db_user>',
        'PASSWORD': '<db_user_password>',
        'HOST': '<db_host>',
        'PORT': '<db_port>',
    }
}

...

DATASOURCE_PATH = '<static_path_to_gis_data_source>'

...

MEDIA_ROOT = '<path_to_media_root>'

...

SESSION_COOKIE_NAME = '<unique_session_id>'

With paver commands

G3W-ADMIN has a series of paver CLI commands to administrate the suite. After prepared environment if sufficient invoke paver install task

paver install

Run G3W-SUITE

To run the application with paver

paver start

and for stop

paver stop

G3W-ADMIN is a django application so is possible run app by standard django manage.py commands

./manage.py runserver

Deploy G3W-SUITE

As other Django application, G3W-SUITE can be deployed by its wsgi capabilities. On the web if simple to find tutorial for deploy a Django application.

The simpler way is to use Apache2 as server WEB and its mod_wsgi module.

Alternative solutions are:

Manual installation steps

The preferred installation is by using the paver script as mentioned above, but in case you need to customize the installation process, here are the build and setup steps:

Build static js code

# Install yarn (requires root):
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | \
    tee /etc/apt/sources.list.d/yarn.list
apt-get update && sudo apt install -y yarn
# Back to unprivileged user, from the repository directory, run:
yarn --ignore-engines --ignore-scripts --prod
nodejs -e "try { require('fs').symlinkSync(require('path').resolve('node_modules/@bower_components'), 'g3w-admin/core/static/bower_components', 'junction') } catch (e) { }"

Make sure build components are available in static and collected later

cd g3w-admin/core/static
ln -s "../../../node_modules/@bower_components" bower_components

Install requirements

Possibly within a virtual env:

pip install -r requirements.txt
pip install -r requirements_huey.txt

Django setup

python manage.py collectstatic --noinput
python manage.py migrate --noinput

Install some fixtures for EPSG and other suite options:

for FIXTURE in 'BaseLayer.json' 'G3WGeneralDataSuite.json' 'G3WMapControls.json' 'G3WSpatialRefSys.json'; do
    python manage.py loaddata  core/fixtures/${FIXTURE}
done

Sync menu tree items (re-run this command in case you installed optional modules and they are not visible in the admin menu tree):

python manage.py sitetree_resync_apps

Continuous integration testing

CI tests are automatically run on GitHub by custom actions.

The Docker compose configuration used in the CI tests is available at docker-compose.latest.yml.

The testing image is built from the dependency image and it will run all install and build steps from the local repository.

The dependency image is built from the Dockerfile.deps.

G3W-SUITE supports the latest LTR QGIS version, so at now is the 3.22, therefore there are also dockerfiles and docker compose files for this version: