Skip to content
Snippets Groups Projects
Select Git revision
  • 9781c0c8f1c0ac8e6e60f969d4435695d85a8ab1
  • master default protected
  • v1.2
  • v1.1
  • v1.0
  • v0.1
6 results

tpsh_deploy

Vorbereitung der Server

Auf den Servern Master und Slave müssen die nachfolgend beschriebenen Vorbedingungen erfüllt sein. Zusätzlich sind die Angaben in Spezifikation_TPSH.md zu beachten.

Zertifikat-basierter ssh-Zugang

Für ssh-Zugang ohne Passworteingabe muss der öffentliche Schlüssel des Nutzers, der Ansible ausführt hinterlegt sein. Üblicherweise liegen diese Schlüssel in der Datei ~/.ssh/authorized_keys.

Nach den vorbereitenden Arbeiten muss der Zugang auf die Server per ssh ohne Rückfragen funktionieren.

Zertifikat-basierter Zugriff auf bitbucket.dataport.de

Auf dem Master- und Slave-Server sind gegebenenfalls Zertifikate zu erzeugen, die auf bitbucket.dataport.de dem Nutzer hinzugefügt werden, dessen Account für die Installation verwendet wird. Dies ist nötig, damit die Installation ohne Passwortabfragen durchlaufen werden kann.

Zur Erzeugung der Zertifikate müssen, während man als der Nutzer angemeldet ist, der die Installation durchführt, folgende Befehle eingegeben werden:

  • auf dem Master:
cd ~/.ssh
ssh-keygen -t rsa -C "tpsh_master"
head id_rsa.pub
  • auf dem Slave:
cd ~/.ssh
ssh-keygen -t rsa -C "tpsh_slave"
head id_rsa.pub

Die ausgegebenen Zeilen müssen in Bitbucket hinterlegt werden.

Zum Testen der Konfiguration kann ein Repository aus dem Bitbucket-Projekt geklont werden.

mkdir kannweg
cd kannweg
git clone ssh://git@ssh.bitbucket.dataport.de:7999/tpsh/ckanext-odsh.git
cd ..
rm -rf kannweg

Läuft der obige Code ohne Fehler durch, so hat der Zugriff auf Bitbucket über ssh funktioniert.

Installationen auf dem Datenbank-Server

Der Datenbankserver muss vor den Installationen auf dem Master- und Slave-Server eingerichtet werden. Auf dem Datenbankserver muss PostgresSQL 10.10 und PostGis-2.4 installiert sein.

Zur Einrichtung des Datenbankservers sind folgende Schritte durchzuführen.

Anlegen des CKAN-Datenbank-Nutzers

Es muss ein Datenbank-Nutzer in Postgres angelegt werden. Der Name des Datenbank-Nutzers muss in der hosts-Konfiguration (s.u.) in folgender Zeile eingefügt werden:

vault_DATABASE_USER: <Nutzer hier einfügen>

Das Passwort des Nutzers muss in folgender Zeile eingefügt werden:

vault_DATABASE_PASSWORD: <Passwort des DATABASE_USER>

Anlegen der CKAN-Datenbank

Es muss eine Datenbank für CKAN angelegt werden, auf die der soeben angelegte CKAN-Datenbank-Nutzer lesenden und schreibenden Zugriff hat. Der Name der Datenbank muss in der hosts-Konfiguration in folgender Zeile eingefügt werden:

vault_DEFAULT_DATABASE: <Name der CKAN-Datenbank>

Anpassungen der Datenbank für die CKAN-Extension spatial

Für die CKAN-Extension spatial sind die folgenden Befehle mit Ersetzugen als User postgres auszuführen:

psql -d {{ DEFAULT_DATABASE }} -f /data/postgresql/10/share/contrib/postgis-2.4/postgis.sql

Dabei sowie bei den folgenden Befehlen ist {{ DEFAULT_DATABASE }} zu ersetzen durch den Namen der CKAN-Datenbank (siehe oben) und {{ DATABASE_USER }} zu ersetzen durch den CKAN-Datenbank-Nutzer.

psql -d {{ DEFAULT_DATABASE }} -f /data/postgresql/10/share/contrib/postgis-2.4/spatial_ref_sys.sql
psql -d {{ DEFAULT_DATABASE }} -c "ALTER VIEW geometry_columns OWNER TO {{ DATABASE_USER }};"
psql -d {{ DEFAULT_DATABASE }} -c "ALTER TABLE spatial_ref_sys OWNER TO {{ DATABASE_USER }};"

Schritte für die Installation von Master und Slave

Voraussetzungen

Die folgenden Installationsschritte werden mit Ansible durchgeführt. Dazu muss Ansible auf dem Rechner von dem aus die Installation durchgeführt werden soll, installiert werden. Die Ansible-Playbooks wurden mit Ansible in der Version 2.8.5 unter Unbuntu 16.04 getestet.

Ansible nicht mit dem User root des Servers verwenden

Wird nicht der User root des Servers zur Anmeldung von Ansible benutzt, so muss bei den folgenden Aufrufen von ansible-playbook der Parameter --ask-become-pass hinzugefügt werden.

Anpassen der hosts-Dateien

Für jede Instanz des Transparenzportals (z.B. Test, Stage, Production) muss vor der Installation derselben eine spezifische Konfiguration stattfinden. Die hierfür benötigten Datein liegen im Ordner hosts. Darin befindet sich für jede Instanz ein Unterordner, der wiederum einen Unterordner group_vars und einen Unterordner host_vars enthält. Der Verzeichnisbaum sieht dann beispielweise so aus:

hosts
├── d_secure_cloud
│   ├── group_vars
│   │   ├── all
│   │   │   ├── vars.yaml
│   │   │   └── vault.yaml
│   │   └── master_and_slave
│   │       ├── vars.yaml
│   │       └── vault.yaml
│   ├── hosts.yaml
│   └── host_vars
│       ├── master
│       │   └── vars.yaml
│       └── slave
│           └── vars.yaml
├── production
│   ├── group_vars
│   │   ├── all
│   │   │   ├── vars.yaml      <----- zu ändern
│   │   │   └── vault.yaml     <----- zu ändern
│   │   └── master_and_slave
│   │       ├── vars.yaml      <----- zu ändern
│   │       └── vault.yaml     <----- zu ändern
│   ├── hosts.yaml
│   └── host_vars
│       ├── master
│       │   └── vars.yaml
│       └── slave
│           └── vars.yaml
├── stage
│   ├── group_vars
│   │   ├── all
│   │   │   ├── vars.yaml      <----- zu ändern
│   │   │   └── vault.yaml     <----- zu ändern
│   │   └── master_and_slave
│   │       ├── vars.yaml      <----- zu ändern
│   │       └── vault.yaml     <----- zu ändern
│   ├── hosts.yaml
│   └── host_vars
│       ├── master
│       │   └── vars.yaml
│       └── slave
│           └── vars.yaml

In folgendenden Dateien sind Änderungen vorzunehmen:

  • group_vars/all/vars.yaml
  • group_vars/all/vault.yaml
  • group_vars/master_and_slave/vars.yaml
  • group_vars/master_and_slave/vault.yaml

Dabei sind ausschließlich die Werte der folgenden Variablen zu ersetzen:

Variable Wert
folder_ckan Ordner in den CKAN installiert wird
folder_ckan_config Ordner in dem CKAN-Konfigurationsdateien abgelegt werden
folder_uploads Ordner für hochgeladene Dateien
folder_log Ordner für Log-Dateien
solr_data_folder Ordner für Solr-Konfiguration
URL_PUBLIC URL über die das Portal erreichbar ist (inkl. Schema), öffentiche IP Slave, falls unbekannt, (z.B. http://1.2.3.4)
vault_BEAKER_SECRET zufällig gewähltes Geheimnis (nur ASCII)
ansible_user User mit dem sich Ansible über ssh anmeldet
ssh_key_file Pfad zu privatem Schlüssel auf Server für bitbucket-Zugriff
IP_MASTER interne IP Master
IP_SLAVE interne IP Slave
IP_DATABASE_CKAN interne IP des Servers für die CKAN-Datenbank
vault_DEFAULT_DATABASE Name der CKAN-Datenbank (s.o.)
vault_DATABASE_USER Name der CKAN-Datenbank-Nutzers (s.o.)
vault_DATABASE_PASSWORD Passwort der CKAN-Datenbank-Nutzers (s.o.)
internet_proxy Proxy-Server für Internetzugriff
is_stage Flag, dass auf dem Stage-Server auf yes gesetzt werden muss, damit ein Banner "Testsystem" in der rechten oberen Ecke des Portals erscheint

Verschlüsseln der Dateien mit zu schützenden Informationen

Dateien mit dem Namen vault.yaml müssen nach dem Editieren verschlüsselt werden. Hierfür ist folgender Befehl zu nutzen:

ansible-vault encrypt <dateiname>

Dabei ist <dateiname> zu ersetzen durch den Pfad zur zu verschlüsselnden Datei. Für alle Dateien muss dasselbe Passwort verwendet werden.

Änderungen an bereits verschlüsselten Dateien

Sind bereits verschlüsselte Dateien zu ändern, so kann dies über folgenden Befehl ausgeführt werden:

ansible-vault edit <dateiname>

Der Autor empfiehlt das Plugin ansible-vault für Visual Studio Code.

Erzeugen des Users ckanuser

Falls der Linux-User ckanuser noch nicht existiert, so kann er vor der Installation über ein Ansible-Skript erzeugt werden. Bei der Installation von Produktivsystemen ist dies in der Regel nicht nötig, da der User im Vorwege angelegt wird.

Zum Anlegen des Usersckanuser muss auf einem beliebigen Rechner ein Hash-Wert für das Passwort für ckanuser erzeugt werden. Er lässt sich über folgendes Kommando erzeugen

mkpasswd --method=sha-512 password

Dabei ist password durch das zu verwendende Passwort zu ersetzen. Der Hash-Wert muss dann in die Datei create_ckan_user.yaml für die Variable ckanuser_pass_hash gesetzt werden. Das Ansible-Skript kann dann über folgenden Befehl ausgeführt werden:

ansible-playbook -i hosts/stage/hosts.yaml create_ckan_user.yaml --ask-vault-pass

Gesamte Installation über ein Skript

Alle folgenden Installationsschritte können auch über folgenden Befehl gebündelt ausgeführt werden:

ansible-playbook -i hosts/stage/hosts.yaml install_tpsh.yaml --ask-vault-pass

Ist dies nicht gewünscht, so sind die folgenden Befehle einzeln auszuführen. Soll die Installation auf einer anderen Instanz als auf der im Ordner stage definierten stattfinden, so ist stage durch den entsprechenden Ordner zu ersetzen. Dies gilt ebenso für alle folgenden Befehle.

Setzen von symlinks

Auf die in der hosts-Konfiguration angegebenen Verzeichnisse folder_ckan und folder_ckan_config müssen Symlinks erzeugt werden:

Link Ziel
/usr/lib/ckan folder_ckan
/etc/ckan folder_ckan_config

Die Erzeugung der Symlinks kann über folgenden Befehl ausgeführt werden:

ansible-playbook -i hosts/stage/hosts.yaml create_symlinks.yaml --ask-vault-pass

Installieren der Linux-Pakete für Master und Slave

Für die Installation der Linux-Pakete muss folgender Befehl auf dem Client-Rechner aufgerufen werden, auf dem Ansible läuft:

ansible-playbook -i hosts/stage/hosts.yaml install_apt_get_packages.yaml --ask-vault-pass

Installieren von Solr auf Master und Slave

Für die Installation und Konfiguration von Solr 7.7.2 muss folgender Befehl verwendet werden:

ansible-playbook -i hosts/stage/hosts.yaml install_and_configure_solr_7_7_2.yaml --ask-vault-pass

Installieren von CKAN auf Master und Slave

Installieren von CKAN

CKAN kann über folgenden Befehl installiert werden:

ansible-playbook -i hosts/stage/hosts.yaml install_ckan.yaml --ask-vault-pass

Konfigurieren von CKAN

Nach der Installation von CKAN müssen die CKAN-Konfigurationsdateien aus dem Template production.ini.template generiert werden und auf den Master- und Slave-Server kopiert werden.

Für das Befüllen der Templates müssen alle Variablen in der verwendeten Host-Datei (Standard: hosts) ausgefüllt sein.

Das Befüllen der Templates und das Kopieren auf die Server geschieht anschließend über folgenden Befehl:

ansible-playbook -i hosts/stage/hosts.yaml configure_ckan.yaml --ask-vault-pass

Installation von CKAN-Extensions

Die zu installierenden CKAN-Extensions stammen teils aus öffentlichen Repositories und teils aus Repositories, die im Dataport-eigenen Bitbucket liegen.

Installation der Extension ckan-harvest

Die Installation geschieht über folgenden Befehl:

ansible-playbook -i hosts/stage/hosts.yaml install_ckan_extension_harvest.yaml --ask-vault-pass

Installation der Extension ckanext-dcat

Die Installation geschieht über folgenden Befehl:

ansible-playbook -i hosts/stage/hosts.yaml install_ckan_extension_dcat.yaml --ask-vault-pass

Installation der Extension ckanext-spatial

Die Installation geschieht über folgenden Befehl:

ansible-playbook -i hosts/stage/hosts.yaml install_ckan_extension_spatial.yaml --ask-vault-pass

Klonen des Repositories odsh-tools

Das Klonen geschieht über folgenden Befehl:

ansible-playbook -i hosts/stage/hosts.yaml install_odsh_tools.yaml --ask-vault-pass

Installation der Extension ckanext-odsh

Die Installation geschieht über folgenden Befehl:

ansible-playbook -i hosts/stage/hosts.yaml install_ckan_extension_odsh.yaml --ask-vault-pass

Installation der Extension ckanext-report

Die Installation geschieht über folgenden Befehl:

ansible-playbook -i hosts/stage/hosts.yaml install_ckan_extension_report.yaml --ask-vault-pass

Installation der Extension ckanext-archiver

Die Installation geschieht über folgenden Befehl:

ansible-playbook -i hosts/stage/hosts.yaml install_ckan_extension_archiver.yaml --ask-vault-pass

Installation der Extension ckanext-qa

Die Installation geschieht über folgenden Befehl:

ansible-playbook -i hosts/stage/hosts.yaml install_ckan_extension_qa.yaml --ask-vault-pass

Installation der Extension ckanext-extractor

Die Installation geschieht über folgenden Befehl:

ansible-playbook -i hosts/stage/hosts.yaml install_ckan_extension_extractor.yaml --ask-vault-pass

Initialisierung der Datenbank

CKAN sowie die installierten CKAN-Extensions benötigen eine Initialisierung der Datenbank. Die Initialisierung kann über folgenden Befehl ausgeführt werden:

ansible-playbook -i hosts/stage/hosts.yaml initialize_database.yaml --ask-vault-pass

Konfigurieren des Apache2-Webservers auf Master und Slave

Die Konfiguration des Apache2-Webservers auf Master und Slave kann über folgenden Befehl ausgeführt werden:

ansible-playbook -i hosts/stage/hosts.yaml configure_apache.yaml --ask-vault-pass

Konfigurieren des Supervisors auf Master

Die Konfiguration des Supervisors kann über folgenden Befehl ausgeführt werden:

ansible-playbook -i hosts/stage/hosts.yaml configure_supervisor.yaml --ask-vault-pass

Abschließende Arbeiten

Nach erfolgter Installation müssen gegebenenfalls Services disabled werden, damit diese beim Booten nicht von systemd gestartet werden. Dies ist dann der Fall, wenn für die Verwaltung der Services ein anderer Dienst verwendet wird.

Zum disablen der Services steht ein Ansible-Playbook zur Verfügung. Vor dem Ausführen des Playbooks sollte überprüft werden, ob es alle relevanten Services enthält.

Es werden folgende Services disabled:

  • apache2
  • cron
  • redis-server
  • solr

Das Skript kann folgendermaßen ausgeführt werden:

ansible-playbook -i hosts/stage/hosts.yaml disable_services.yaml --ask-vault-pass

Hinweis

Die Services sind für den Betrieb essentiell und sollten nur disabled werden, wenn sie anschließend wieder über einen anderen Dienst enabled werden.