Deployment
Überblick
Hub als auch PlainUI werden als Docker Container ausgerollt welcher vom GitLab CI erstellt wird. Die Datenbank läuft separat und ist aktuell auf postgres mit der PostGIS Erweiterung eingeschränkt.
Die Konfiguration des Docker-Containers kann über Umgebungsvariablen gesteuert werden.
Alternativ kann aich wie gehabt die Konfiguration mit einer local_settings.py
Datein in /data/
gesteuert weden.
Egal welche der Methden gewählt wir, muss zumindest angegeben werden welche Funktionen auszurollen sind und wie die Datenbank zu erreichen ist.
Für die Umgebungsvariablen Konfiguration kann die docker-compose.yml
als Beispiel zu rate gezogen werden.
Beispiel einer local_settings.py
:
IS_API = False
IS_BACKOFFICE = False
IS_FRONTEND = True
ALLOWED_HOSTS = ['fully.qualified.domain.name']
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'HOST': '172.17.0.1',
'NAME': 'shinydb',
'USER': 'karlklammer',
'PASSWORD': 'shibboleth',
}
}
Tipps & Tricks
Backup
Allgemein: für ein normales Backup sollte einfach die Datenbank über Bordmittel gesichert werden (pg_dump
).
Django hat auch eine Funktion für den Export von Daten eingebaut, diese Variante ist allerdings nicht für den Produktiven Einsatz empfohlen.
Das Problem liegt hier in der Struktur der Daten bei der Wiederherstellung. Diese ist mit dumpdata
/loadata
nicht garaniert.
Grundsätzlich funktioniert es wie folgt:
- Docker Container mit "debug" Kommando starten
-
./manage.py dumpdata
mit natural keys und ohne Django-Interna laufen lassen
root@host:~# /usr/bin/docker run --rm -it -v /etc/hub/hub:/data registry.git.cccv.de/hub/hub:develop debug
Operations to perform:
Apply all migrations: admin, api, auth, contenttypes, core, sessions
Running migrations:
No migrations to apply.
root@048a781aaec1:~# ./manage.py dumpdata --natural-primary --natural-foreign -e admin -e auth.permission -e contenttypes.contenttype -e sessions.session -o /data/bak.json
[...........................................................................]
root@048a781aaec1:~# exit
root@host:~#
Die Datei kann dann lokal wieder per ./manage.py loaddata bak.json
eingespielt werden.