Installation

Client

Auf dem Client muss neben dem Webbrowser keine weitere Software installiert werden.

Server (Linux)

Diese Installationsanleitung basiert auf Ubuntu 14.04.

Ubuntu-Pakete

Das folgenden Kommando installiert alle benötigten Ubuntu-Pakete:

apt-get install -y --force-yes python-dev python-setuptools git-core wget \
    software-properties-common python-software-properties autoconf bc \
    build-essential checkinstall curl imagemagick git-core jpegoptim \
    libboost-filesystem-dev libboost-python-dev libboost-regex-dev \
    libboost-system-dev libboost-thread-dev libboost-program-options-dev \
    libevent-2.0-5 libevent-dev libgdal-dev libgeos-3.4.2 libjpeg-dev \
    libmagic-dev libmagickwand-dev libmysqlclient-dev libmapnik2.2 \
    libmapnik-dev libpcre3-dev libproj-dev libspatialindex-dev libspatialindex3 \
    libssl-dev libtool libxslt-dev linux-kernel-headers lsof pngcrush pngquant \
    libproj0 libproj-dev python-dev python-gdal python-numpy python-opengl \
    python-mapnik rabbitmq-server redis-server ruby-compass ruby-sass \
    supervisor unzip uuid-dev zip zlib1g-dev python-pip postgresql-client \
    python-scipy

Python-Pakete

Es ist die Installation in einem virtualenv empfohlen, um die Abhängigkeiten sauber zu managen:

virtualenv . --system-site-packages

Die Python-Abhängigkeiten können dann folgendermaßen installiert werden:

bin/pip install -r plexgis/python-req.txt

Django-Umgebung

PlexMap ist eine Django-Applikation und somit muss zuerst eine Django-Umgebung erzeugt werden:

django-admin startproject *projectname*

PlexMap-Pakete

Der PlexMap App-Server besteht aus den Paketen plexgis und geolab:

git clone -b 0.9 git.geoplex.de:/home/git/plexgis
git clone -b master git.geoplex.de:/home/git/geolab geolab-git

Die enthaltenden Ordner müssen zum Python-Pfad hinzugefügt werden. Dies kann entweder global oder in der manage.py geschehen:

import os.path
import sys

sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), 'geolab-git'))

Datenbank

Erstellen einer neuer Datenbank:

createdb -E UTF8 dbname

Wichtig: Falls die Datenbank auf anderem Wege erzeugt wurde, sicherstellen, dass die Kodierung UTF8 gewählt wurde. Das Encoding einer Datenbank kann folgendermaßen überschrieben werden (Nur anwenden, wenn noch keine Daten importiert wurden!):

update pg_database set encoding = pg_char_to_encoding('UTF8') where datname = 'dbname'

Aktivieren von PostGIS:

create extension postgis
create extension postgis_topology

Empfehlenswerte Einstellungen in der postgresql.conf:

checkpoint_segments = 96
checkpoint_timeout = 30min

Projektkonfiguration

Nun muss noch das Projekt konfiguriert werden. Hierzu gehören die Eintragung das Datenbankservers und der App plexgis in die projectname/settings.py und die Erstellung von der Hauptkonfigurationsdatei projectname/config.yaml (siehe Konfiguration).

Mit den folgenden Befehlen wird die Datenbank initial füllen:

python manage.py syncdb
python manage.py migrate

MapProxy

MapProxy muss als MultiMapProxy configuriert werden und die beiden Verzeichnisse data/mapproxy_cache und data/mapproxy_config in der config.yaml von PlexMap vermerkt werden. Zusätzlich muss hier noch die mapproxy_url gesetzt werden.

Hinweis: Wird PlexMap über mod_wsgi betrieben, muss insbesondere für MapProxy die Einstellungen WSGIDaemonProcess/WSGIProcessGroup eingerichtet werden, da es sonst zu Problemen bei mehreren Prozessen kommen kann (siehe hierzu auch die MapProxy-Doku).

Redis

PlexMap benötigt neben dem Datenbankserver noch einen Redis-Server. Dieser wird für das Caching, die interne asyncrone Kommunikation, und als WebSockets-Queue (ab PlexMap 2.0) verwendet. Die folgende Konfiguration muss in der settings.py vorgenommen werden, damit Redis als Cache eingesetzt wird:

CACHES = {
    'default': {
        'BACKEND': 'redis_cache.RedisCache',
        'LOCATION': 'localhost:6379',
        'KEY_PREFIX': 'xyz',
        'OPTIONS': {
            'DB': 0,
            'PARSER_CLASS': 'redis.connection.HiredisParser',
            'CONNECTION_POOL_CLASS': 'redis.BlockingConnectionPool',
            'CONNECTION_POOL_CLASS_KWARGS': {
                'max_connections': 50,
                'timeout': 10,
            }
        },
    },
}

Django-Celery

Um eine interaktive, parallele Ausführung von Import/Exportvorgängen u. ä. im Backend zu erhalten, muss der Celery Daemon, Worker und Celerycam laufen:

python manage.py celeryd -E -B
python manage.py celerycam

Wichtig sind hierfür folgende Konfigurationszeilen in der settings.py:

BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'
CELERY_SEND_EVENTS = True

Letzte Schritte

Abschließend muss die erste View erstellt werden, damit PlexMap überhaupt funktioniert. Dies kann mit folgendem Hilfskommando geschehen:

python manage.py populateview

Server (Windows)

This chapter contains some notes regarding the installation on Windows. It is still a bit unstructured and not yet complete.

Recommened directory layout

This is how it is basically structured:

C:\OSGeo4W64 <- Here all required software and Python packages go
C:\projectname\plexgis <- plexgis git
C:\projectname\projectname <- git of project
C:\projectname\collectedstatic <- static files
C:\projectname\logs <- nssm logfiles
C:\projectname\cache <- mapproxy cache
C:\projectname\manage.py

A usuable shell for calling Django commands is then started by running:

C:\OSGeo4W64\OSGeo4W.bat

with startup directory:

C:\projectname

Software stack

  • Installation -> Fortgeschritten

    curl expat freexl gdal gdal-python geos iconv libgeotiff libjpeg libjpeg12 libmysql libpq libspatialindex libtiff libxml2 msvcrt netcdf openjpeg openssl proj proj-datumgrid proj-hpgn pyspatialite python-core python-numpy python-shapely python-simplejson setup shell spatialite sqlite3 szip xerces-c-vc-10 zlib

  • ImageMagick, http://www.imagemagick.org/script/binary-releases.php#windows

  • pngquant, http://pngquant.org/

  • redis

  • In der OSGeo4Win Shell (Start ->→ OSGeo4W Shell) (recipe adapted from pip install instructions):

    curl http://python-distribute.org/distribute_setup.py | python
    curl --insecure https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
    
    (Maybe) create a batch file to run pip:
    copy con %osgeo4w_root%\bin\pip.bat
    %pythonhome%\Scripts\pip.exe %*[ctrl-Z]
    
  • Finally, use pip install to install the following additional Python packages:

    ipython django django-simple-captcha django_nose django-celery nose pyyaml jsonfield ws4py mapproxy PyOpenGL

  • Install the binaries of the following packges from http://www.lfd.uci.edu/~gohlke/pythonlibs/:

    greenlet gevent pillow lxml pycairo

  • You have to install one of the following to have polygon triangulation:

    PyOpenGL (GLU tesselator, recommened)
    cgal-bindings / CGAL (CGAL Delaunay Triangulation, GPL licensed)
    scipy / qhull (Warning: No constrained Delaunay (CDT) available)
    
  • For 64-bit Windows, this complete stack is available as a git bundle at geoplex:/home/git/OSGeo4W64

Database server

  • PostgreSQL Server und pgAdminIII installieren
  • PostGIS: PostgreSQL Stack Application Builder -> Install PostGIS 2.

Services checklist

The following services have to run for a fully working installation:

  • redis (should work after installation)

  • celery + worker:

    python manage.py celeryd -E
    
  • plexmap_celerycam:

    python manage.py celerycam
    
  • plexmap_multiuser:

    python manage.py runmultiuserserver
    
  • cherrypy (plexgis, mapproxy):

    python <projectname>\win\web.py
    

You can use NSSM to install the scripts as service:

_images/nssm_example_11.png _images/nssm_example_21.png