Skip to content
Marian Steinbach edited this page Sep 18, 2013 · 8 revisions

ACHTUNG: Diese Seite ist Work in Progress. Hier wird die Installation der aktuellsten Software-Version (September 2013) beschrieben.

Überblick

Im Verlauf der Installation werden wir die folgenden Software-Komponenten installieren bzw. dafür sorgen, dass diese bereit stehen:

  • Python
  • MongoDB
  • ElasticSearch
  • nginx
  • Scrape-A-RIS
  • Offenes Köln
  • diverse kleinere Pakete

TODO: Hier fehlen Informationen zu Systemvoraussetzungen (Linux-Distribution, Pakete). Wir gehen von einem aktuellen Debian aus.

>>> sudo apt-get update
>>> sudo apt-get install libjpeg-dev

Scrape-A-RIS installieren

Der Scraper, mit dem Daten aus bestimmten Ratsinformationssystemen gelesen werden, ist im Repository Scrape-A-RIS zu finden. Dort gibt es auch eine Anleitung zur Instalation/Konfiguration, die Du zunächst befolgen solltest, bevor es hier weiter geht.

Offenes Köln von Github clonen

Du wechselst in das Verzeichnis, in dem die laufende Software liegen soll und führst diesen Befehl aus:

>>> git clone https://github.com/marians/offeneskoeln.git

Damit wird im aktuellen Verzeichnis das Unterverzeichnis "offeneskoeln" angelegt. Wir wechseln in das neu angelegte Verzeichnis.

>>> cd offeneskoeln

Python-Umgebung aufsetzen

Falls virtualenv für Python noch nicht installiert ist, installieren wir es erst mal:

>>> sudo pip install virtualenv

Nun legen wir eine virtuelle Umgebung mit dem Namen "venv" an und aktivieren diese.

>>> virtualenv --no-site-packages venv
>>> source venv/bin/activate

Weitere Python-Module installieren wir so:

>>> pip install -r requirements.txt

Hinweis: Wenn Du das System als Entwicklungsumgebung aufsetzt, solltest Du nicht die obigen beiden git-Kommandos verwenden. Clone stattdessen Deine eigenen Forks der beiden Repositories. (Ausführlicher: Erstelle Dir zunächst Forks der beiden Repositories auf github. Clone diese dann mit Lese- und Schreibrecht.)

Python-Scripte konfigurieren

Kopiere die mitgelieferte Konfigurationsdatei:

>>> cp config_dist.py config.py

Dann bearbeite die Datei config.py. Die meisten Konfigurationsoptionen sind in der Beispieldatei gut dokumentiert.

Wenn wir nun den (Entwicklungs-)Server über die Kommandozeile starten,

>>> python runserver.py

sollten wir einen Fehler von ElasticSearch sehen, dass der Index (z.B. "offeneskoeln-latest") noch nicht existiert. Also machen wir damit weiter.

Elasticsearch installieren

ElasticSearch ist eine Java-Software, d.h. es wird ein JDK benötigt. Ob das vorhanden ist, testen wir mit

>>> java -version

Falls eine Fehlermeldung erscheint, weil kein JDK installiert ist, installieren wir es so:

>>> sudo apt-get update
>>> sudo apt-get install openjdk-6-jdk

Dann erfolgt der Download und die Instalation des ElasticSearch-Debian-Pakets:

>>> wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.5.deb
>>> sudo dpkg -i elasticsearch-0.90.5.deb

ElasticSearch wird auf dem wohl bekannten Weg, über ein init-Script, gestartet.

>>> sudo /etc/init.d/elasticsearch restart

Import von Daten in ElasticSearch

>>> python ./scripts/elasticsearch_import.py

Python App-Server aufsetzen

Wir verwenden gunicorn als Webserver für alle Anfragen, die an die Python-Webanwendung gehen. gunicorn wird über pip in unsere Python-Umgebung installiert. Stelle daher sicher, dass die Python-Umgebung aktiviert ist und das Präfix "(venv)" in der Shell vor dem Prompt angezeigt wird.

>>> pip install gunicorn

Die mitgelieferte Konfigurationsdatei kopieren und dann anpassen:

cp gunicorn_conf-dist.py gunicorn_conf.py
nano gunicorn_conf.py

Achte auf die Konfigurationsoption "bind". Dies ist der Pfad zum Unix-Socket, den gunicorn anlegen wird und über den auf eingehende Anfragen "gelauscht" wird. Diesen Pfad benötigen wir später bei der Konfiguration von nginx. Den Namen der Socket-Datei kannst Du frei wählen, musst aber sicher stellen, dass er noch nicht in Benutzung ist.

Nun können wir testhalber gunicorn über die Kommandozeile starten, um zu sehen, ob die Konfiguration passt:

gunicorn -c ./gunicorn_conf.py webapp:app

Hier sollten wir nur im Fall eines Fehlers eine Ausgabe erhalten. Falls kein Fehler aufgetreten ist, kann gunicorn mit Ctrl+C kann beendet werden.

Wir wollen gunicorn im Server-Betrieb nicht über die Kommandozeile aufrufen, sondern im Hintergrund laufen lassen. Hierzu dient Supervisor. Falls noch nicht vorhanden, installieren und starten wir diesen zunächst mal:

>>> sudo apt-get install supervisord
>>> sudo /etc/init.d/supervisor restart

Nun fügen wir für unsere Webanwendung eine Konfigurationsdatei in das Verzeichnis /etc/supervisor/conf.d hinzu. Eine Vorlage wird mit Offenes Köln mitgeliefert. Diese kopieren wir an die richtige stelle und bearbeiten sie dann.

>>> sudo cp supervisor_conf-dist.txt /etc/supervisor/conf.d/offeneskoeln.conf
>>> sudo nano /etc/supervisor/conf.d/offeneskoeln.conf

Die erste Zeile [program:offeneskoeln] gibt dem Eintrag einen Namen, mit dem Supervisor die Anwendung identifizieren kann.

Die Konfigurationsangabe directory gibt das Arbeitsverzeichnis für diesen Eintrag an. Supervisor wechselt sozusagen in dieses Verzeichnis, bevor es den Job startet.

Der Eintrag command ist der gunicorn-Aufruf wie oben, allerdings mit absoluten Pfaden. Wenn die Zeile also so lautet

command=/home/ok/offeneskoeln/venv/bin/gunicorn -c /home/ok/offeneskoeln/gunicorn_conf.py webapp:app

muss /home/ok/offeneskoeln/venv/bin/gunicorn der Pfad zur ausführbaren gunicorn-Datei innerhalb der Python-Umgebung sein. Auch der Pfad zur Konfigurationsdatei wird absolut angegeben.

Achte hier sehr genau darauf, dass alle Pfade stimmen. Leider geben supervisord und gunicorn andernfalls nur wenig hilfreiche Fehlermeldungen.

Wenn die Konfigurationsdatei fertig angepasst ist, muss Supervisor neu gestartet werden.

>>> sudo /etc/init.d/supervisor stop
>>> sudo /etc/init.d/supervisor start

(Warum nicht einfach restart verwenden? Weil das, zumindest in Version 3.0a8-1 des Debian-Pakets, nicht funktioniert.)

nginx konfigurieren

Nach außen ist nginx für die Annhame von HTTP-Requests zuständig. Mit unserer Konfiguration sorgen wir dafür, dass Anfragen, die statische Dateien betreffen, direkt von nginx ausgeliefert werden. Andere Aufrufe werden an gunicorn weiter gereicht.

Auch für nginx ist eine Beispielkonfiguration im Repository enthalten, die an die richtige Stelle kopiert werden muss, bevor wir sie bearbeiten können.

>>> sudo cp nginx_conf-dist.txt /etc/nginx/sites-available/offeneskoeln.de
>>> sudo nano /etc/nginx/sites-available/offeneskoeln.de

Du wirst möglicherweise dne Pfad zur Socket-Datei von gunicorn (siehe oben) Deinen Gegebenheiten anpassen wollen. Auch die Optionen server_name, access_log, error_log und root solltest Du anfassen. Achte auch darauf, dass der Name, den Du unter upstream vergibst (Vorgabe: offeneskoeln_gunicorn) zum Eintrag weiter unten bei proxy_pass passt (Vorgabe entsprechend http://offeneskoeln_gunicorn).

Die Konfiguration wird (eine typische Debian-Gepflogenheit) aktiviert, indem im Verzeichnis /etc/nginx/sites-enabled ein symbolischer Link zur Konfigurationsdatei angelegt wird.

>>> sudo ln -s /etc/nginx/sites-available/offeneskoeln.de /etc/nginx/sites-enabled/offeneskoeln.de

Dann wird nginx neu gestartet.

>>> sudo /etc/init.d/nginx restart

Thumbnails generieren

>>> python scripts/generate_thumbs.py

TODO: OpenStreetMap Daten importieren

Clone this wiki locally