In diesem Abschnitt wird erklärt, wie Sie Gover unter Ubuntu installieren können. Bitte beachten Sie, dass Sie mindestens Ubuntu 20.04 oder höher benötigen. Ältere Versionen von Ubuntu können funktionieren, wurden jedoch nicht getestet.
Wir empfehlen ein ein Grundlegendes Verständnis von Linux und Docker um diese Installation durchzuführen. Mehr Informatioen zu Docker finden Sie hier https://docs.docker.com/get-started/overview/.
Diese Anleitung können Sie Lokal auf Ihrem eigenen Ubuntu-Computer durchführen oder auf einem Server. Bitte beachten Sie, dass Sie sich für die Einrichtung auf einem Server zuerast via SSH mit diesem Verbinden müssen. Sie benötigen außerdem Root-Zugriff oder Root-Berechtigungen via sudo auf diesem Server.
Um einen reibungsfreien Ablauf zu garantieren sollte Ihr Server mindestens die folgenden Anforderungen erfüllen:
Docker ist eine der am weitesteten Verbreiteten Container-Platformen. Um Docker zu installieren, führen Sie bitte die folgenden Befehle im Terminal aus. Die einzelnen Schritte der Docker-Installation finden Sie auch auf der offiziellen Seite https://docs.docker.com/engine/install/ubuntu/. Dort werden die Schritte auch noch genauer erläutert.
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Um eine höhere Sicherheit zu gewährleisten, ist es sinnvoll einen separaten Benutzer für Gover anzulegen. Dieser sollte keine Berechtigungen für Root-Operationen bekommen und lediglich Docker-Container verwalten können.
Legen Sie dazu einen neuen Benutzer unter Ubuntu an und fügen Sie diesen zur Gruppe der Docker-Nutzer hinzu. Führen dazu Sie die folgenden Befehle aus. Sie werden anschließend aufgefordert ein neues Passwort für den Gover-Nutzer zu vergeben. Folgen Sie den Anweisungen auf dem Bildschirm und bestätigen Sie das neue Passwort.
sudo useradd --shell /bin/bash --home /home/gover --create-home gover
sudo usermod --append --groups docker gover
passwd gover
Sollten Sie Gover auf einem Server installieren, ist das hinterlegen von SSH-Schlüsseln zur Authentifizierung und das deaktivieren von Anmeldungen via Passwort empfehlenswert. Mehr dazu finden Sie unter https://www.ionos.de/digitalguide/server/konfiguration/ssh-key-unter-ubuntu/. Bitte beachten Sie, dass Sie sowohl für den Root-Nutzer als auch den neuen Gover-Nutzer jeweils einen separaten SSH-Schlüssel hinterlegen sollten. Sollten Sie für den Root-Nutzer keinen SSH-Schlüssel hinterlegt haben, werden Sie später nicht mehr in der Lage sein, sich auf dem System anzumelden und Systemänderungen durchzuführen.
Nachdem Sie den neuen Gover-Nutzer angelegt haben müssne Sie noch prüfen, ob alle Berechtigungen korrekt vergeben sind. Wechseln Sie dazu mit dem Befehl su - gover in den neuen Gover-Nutzer und prüfen Sie die folgenden Faktoren.
pwd aus. Sie sollten die Ausgabe /home/gover erhalten.groups aus. In der Ausgabe sollte docker als Gruppe geführt sein.docker version aus. Sie sollten keine Fehler angezeigt bekommen.Melden Sie sich mit dem neuen Gover-Nutzer an und legen Sie im Verzeichnis /home/gover eine neue Datei mit dem Namen docker-compose.yml an.
Kopieren Sie die folgende Konfiguration in die Datei und passen Sie die entsprechenden Variablen an.
# docker-compose.yml
version: '3.1'
services:
database:
image: postgres:14
restart: always
environment:
POSTGRES_USER: [IHR_DATENBANK_BENUTZERNAME]
POSTGRES_PASSWORD: [IHR_DATENBANK_PASSWORT]
POSTGRES_DB: gover
PGDATA: /var/lib/postgresql/data/pgdata
volumes:
- ./pg:/var/lib/postgresql/data
clamav:
image: clamav/clamav:1.1
restart: always
influx:
image: influxdb:2.7
restart: 'always'
environment:
DOCKER_INFLUXDB_INIT_MODE: setup
DOCKER_INFLUXDB_INIT_USERNAME: [IHR_INFLUX_BENUTZERNAME]
DOCKER_INFLUXDB_INIT_PASSWORD: [IHR_INFLUX_PASSWORT]
DOCKER_INFLUXDB_INIT_ORG: [IHRE_INFLUX_ORGANISATION]
DOCKER_INFLUXDB_INIT_BUCKET: [IHR_INFLUX_BUCKET]
DOCKER_INFLUXDB_INIT_ADMIN_TOKEN: [IHR_INFLUX_ADMIN_TOKEN]
ports:
- "127.0.0.1:8086:8086"
gover:
image: ghcr.io/aivot-digital/gover:3.0.0
depends_on:
- database
- clamav
- influx
restart: always
volumes:
- ./gv_data:/app/data
environment:
GOVER_DB_HOST: database
GOVER_DB_PORT: 5432
GOVER_DB_DATABASE: gover
GOVER_DB_USERNAME: [IHR_DATENBANK_BENUTZERNAME]
GOVER_DB_PASSWORD: [IHR_DATENBANK_PASSWORT]
GOVER_CLAM_HOST: clamav
GOVER_CLAM_PORT: 3310
GOVER_INFLUX_HOST: influx
GOVER_INFLUX_PORT: 8086
GOVER_INFLUX_ORG: [IHRE_INFLUX_ORGANISATION]
GOVER_INFLUX_BUCKET: [IHR_INFLUX_BUCKET]
GOVER_INFLUX_TOKEN: [IHR_INFLUX_ADMIN_TOKEN]
GOVER_SMTP_HOST: [IHR_EMAIL_HOST]
GOVER_SMTP_PORT: [IHR_EMAIL_PORT]
GOVER_SMTP_USERNAME: [IHR_EMAIL_BENUTZERNAME]
GOVER_SMTP_PASSWORD: [IHR_EMAIL_PASSWORT]
GOVER_LOG_LEVEL: WARN
GOVER_JWT_SECRET: [IHR_AUTHENTIFIZIERUNGSGEHEIMNIS]
GOVER_FROM_MAIL: '"[IHR_ABSENDER_NAME]" <[IHRE_ABSENDER_ADRESSE]>'
GOVER_REPORT_MAIL: [IHRE_TECHNISCHE_KONTAKTADRESSE]
GOVER_SENTRY_SERVER: ""
GOVER_SENTRY_WEB_APP: ""
GOVER_ENVIRONMENT: [NAME_IHRER_UMGEBUNG]
GOVER_HOSTNAME: "[ADRESSE_IHRES_SERVERS]"
GOVER_FILE_EXTENSIONS: pdf, png, jpg, jpeg, doc, docx, xls, xlsx, ppt, pptx, odt, fodt, ods, fods, odp, fodp, odg, fodg, odf
GOVER_CONTENT_TYPES: application/pdf, image/png, image/jpeg, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document, application/msexcel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/mspowerpoint, application/vnd.openxmlformats-officedocument.presentationml.presentation, application/vnd.oasis.opendocument.text, application/vnd.oasis.opendocument.spreadsheet, application/vnd.oasis.opendocument.presentation, application/vnd.oasis.opendocument.graphics, application/vnd.oasis.opendocument.formula
ports:
- "8080:8080/tcp"
Die einzelnen Variablen innerhalb dieser Konfiguration werden im folgenden Beschrieben. Bitte achten Sie darauf, dass Sie mindestens alle Variablen in den eckigen Klammern einrichten. Denken Sie daran, die Datei docker-compose.yml nach dem Ändern zu speichern. Sie können z.B. auf das Kommandozeilenwerkzeug nano setzen und nano docker-compose.yml aufrufen.
Diese Konfiguration erzeugt mittels Docker-Compose die folgende Service-Landschaft:
Postgresql wird genutzt um die Anwendugnsdaten abzuspeichern. Sie ist nicht von außen erreichbar und nur innerhalb des internen Docker-Netzes erreichbar. Als Docker-Image für diesen Service wird Version 14 des PostgreSQL-Images verwendet. PostgreSQL ist eine Open-Source Datenbankanwendung und kann ohne Lizenzkosten verwendet werden.
Mehr zu PostgreSQL finden Sie unter https://www.postgresql.org/.
Die Datenbank persistiert ihre Daten im Ordner /home/gover/pg um auch bei Neustarts des Datenbank-Services alle Daten zur Verfügung zu haben.
Ersetzen Sie im Service database in der Datei docker-compose.yml die folgenden Platzhalter mit Ihren eigenen Werten:
[IHR_DATENBANK_BENUTZERNAME]
[IHR_DATENBANK_PASSWORT]
Der Virenscanner wird genutzt um hochgeladene Dateien zu prüfen. Dieser ist nicht von außerhalb des Docker-Netzes erreichbar. Als Docker-Image für diesen Service wird Version 1.1 des ClamAV-Images verwendet. ClamAV ist ein Open-Source Anti-Virus-Programm der Firma Cisco und kann ohne Lizenzkosten verwendet werden.
Mehr zu ClamAV finden Sie unter https://www.clamav.net/.
Es ist keine Konfiguration Notwendig. Der Vierenscanner aktualisiert die verwendete Vierendatenbank automatisch einmal täglich.
Die InfluxDB wird als Datenbank für die Laufzeitmetriken der Gover-Anwendung genutztz. Sie speichert Informationen über CPU- und RAM-Nutzung und dient als Überwachungssystem für etwaige hardwarebezogene Probleme. Als Docker-Image für diesen Service wird Version 2.7 des InfluxDB-Images verwendet.
InfluxDB ist eine Open-Source Datenbank für Zeitreihendaten und kann ohne Lizenzkosten verwendet werden.
InfluxDB ist im lokalen System über den Port 8086 erreichbar.
Mehr zu InfluxDB finden Sie unter https://www.influxdata.com/.
Ersetzen Sie im Service influx in der Datei docker-compose.yml die folgenden Platzhalter mit Ihren eigenen Werten:
[IHR_INFLUX_BENUTZERNAME]
[IHR_INFLUX_PASSWORT]
[IHRE_INFLUX_ORGANISATION]
[IHR_INFLUX_BUCKET]
[IHR_INFLUX_ADMIN_TOKEN]
Die Anwendungsinstanz ist der Kern der Gover-Installation. Diese ist von außerhalb des Docker-Netzes über den Port 8080 erreichbar. Als Docker-Image für diesen Service wird Version 3.0.0 des Gover-Images verwendet.
Ersetzen Sie im Service gover in der Datei docker-compose.yml die folgenden Platzhalter mit Ihren eigenen Werten:
[IHR_DATENBANK_BENUTZERNAME]
[IHR_DATENBANK_PASSWORT]
[IHRE_INFLUX_ORGANISATION]
[IHR_INFLUX_BUCKET]
[IHR_INFLUX_ADMIN_TOKEN]
[IHR_EMAIL_HOST]
smtp.kommune-xyz.de.[IHR_EMAIL_PORT]
465.[IHR_EMAIL_BENUTZERNAME]
noreply@smtp.kommune-xyz.de.[IHR_EMAIL_PASSWORT]
[IHR_AUTHENTIFIZIERUNGSGEHEIMNIS]
'"[IHR_ABSENDER_NAME]" <[IHRE_ABSENDER_ADRESSE]>'
'"Kommune XYZ" <noreply@kommune-xyz.de>'[IHRE_TECHNISCHE_KONTAKTADRESSE]
[NAME_IHRER_UMGEBUNG]
Kommune XYZ[ADRESSE_IHRES_SERVERS]
http://localhost:8080/ oder http://gover.kommune-xyz.de//) enden muss.https).Sie haben noch weitere Möglichkeiten die Anwendungsinstanz zu konfigurieren.
Dies betrifft die folgenden Umgebungsvariablen des Services gover.
GOVER_LOG_LEVEL
INFO, WARN und ERRORGOVER_SENTRY_SERVER:
"".GOVER_SENTRY_WEB_APP:
"".GOVER_ENVIRONMENT
BUERGER und eine separate Instanz für Kita-Formulare mit dem Wert KITA. System-E-Mails werden dann entsprechend Markiert.GOVER_FILE_EXTENSIONS
pdf, docx, xlsx, jpg, png
GOVER_CONTENT_TYPES
application/pdf, image/jpg, image/png
Sollten Sie die Gover-Anwednung auf einem frei zugänglichen Server betreiben wollen, empfehlen wir den Einsatz eines Reverse-Proxies oder Load-Balancers.
Wenn Sie die Anwendung in der Cloud (z.B. bei Hetzner) betreiben, sollten Sie auf die verfügbaren Load-Balancer setzen.
Sollten Sie die Anwendung jedoch auf einem eigenen Server betreiben, empfehlen wir den Einsatz von Traefik.
Traefik ist ein Reverse-Proxy und Load-Balancer mit einem Fokus auf Cloud-Native Anwendungen.
Die Anwendung ist Open-Source und wird von der Firmat Traefik Labs entwickelt.
Mit Hilfe von Traefik kann über die Non-Profit Zertifizierungsstelle Let’s Encrypt ein SSL-Zertifikat automatisiert erzeugt und eingebunden werden.
Sorgen Sie dafür, dass sie eine Domain haben, die mittels A-DNS-Record auf die IP-Adresse Ihres Gover-Servers zeigt.
Nur so kann Traefik ein gültiges zertifikat erzeugen.
Öffnen Sie Ihre docker-compose.yml und führen Sie die folgenden Änderungen durch:
# docker-compose.yml
version: '3.1'
services:
traefik:
image: traefik:v2.9
restart: always
command:
- --providers.docker
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --entrypoints.web.http.redirections.entryPoint.to=websecure
- --entrypoints.web.http.redirections.entryPoint.scheme=https
- --entrypoints.web.http.redirections.entrypoint.permanent=true
- --certificatesresolvers.ssl_resolver.acme.email=[IHRE_TECHNISCHE_KONTAKTADRESSE]
- --certificatesresolvers.ssl_resolver.acme.storage=/var/traefik/acme.json
- --certificatesresolvers.ssl_resolver.acme.httpchallenge.entrypoint=web
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./traefik:/var/traefik
ports:
- "80:80"
- "443:443"
database:
# Keine Änderungen notwendig
clamav:
# Keine Änderungen notwendig
influx:
# Keine Änderungen notwendig
gover:
# Entfernen Sie die folgenden Zeilen:
ports:
- "8080:8080/tcp"
# Fügen Sie die folgenden Zeilen hinzu:
labels:
- "traefik.http.routers.gover.rule=Host(`[IHRE_DOMAIN]`)"
- "traefik.http.services.gover.loadbalancer.server.port=8080"
- "traefik.http.routers.gover.tls=true"
- "traefik.http.routers.gover.tls.certresolver=ssl_resolver"
Bitte achten Sie auch hier wieder darauf, dass Sie die Werte in den eckigen Klammern (inklusive der Klammern) erstzen.
Diese Konfiguration erzeugt mittels Docker-Compose die folgende Service-Landschaft:
Nachdem Sie die Datei docker-compose.yml erstellt haben, können Sie die Basiscontainer mit dem folgenden Befehl starten:
docker compose up -d database clamav influx
Warten Sie, bis alle Container erfolgreich gestartet und initialisiert sind und starten Sie dann Gover mit dem Befehlt docker compose up -d gover.
Mit dem Befehl docker ps können Sie den Status der Container einsehen.
Nach einigen Minuten sollten Sie die folgende Ausgabe erhalten:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b2fa7590dccb ghcr.io/aivot-digital/gover:3.0.0 "java -jar /app/gove…" 4 minutes ago Up 4 minutes app_gover_1
4c168b36f1f2 clamav/clamav:1.1 "/init" 4 minutes ago Up 4 minutes 3310/tcp, 7357/tcp app_clamav_1
0fc446c4dd23 postgres:14 "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 5432/tcp app_database_1
0fc446c4dd23 influxdb:2.7 "/entrypoint.sh infl…" 4 minutes ago Up 4 minutes 127.0.0.1:8086/tcp app_influx_1
e2e710789aee traefik:v2.9 "/entrypoint.sh --pr…" 4 minutes ago Up 1 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp app_traefik_1
Bitte beachten Sie: Falls Sie Traefik nicht eingerichtet haben, entfällt dieser Service und stattdessen ist bei dem Container mit dem Namen app_gover_1 der Port 8080 vermerkt.
Wenn alle Services den Status Up ... haben, können sich jetzt über die URL http://localhost:8000 oder, falls Sie Traefik eingerichtet haben, https://IHRE_DOMAIN mit der laufenden Gover-Instanz verbinden.