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>
spatial
Anpassungen der Datenbank für die CKAN-Extension 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.
root
des Servers verwenden
Ansible nicht mit dem User 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.
hosts
-Dateien
Anpassen der 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.
ckanuser
Erzeugen des Users 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.