Docker

System vorbereiten #

Diese Anleitung wurde unter Debian erstellt. Verwenden Sie eine andere Distribution, können die jeweiligen Schritte abweichen.

Benutzer anlegen #

				
					groupadd -g 161 projectfacts && useradd -r -u 161 -g projectfacts projectfacts
				
			

Benötigte Standard Pakete #

				
					apt update && apt upgrade -y && apt install vim unzip htop libtcnative-1 bash-completion net-tools iptables-persistent -y
				
			

Docker Installation #

Abhängigkeiten installieren #

				
					apt update && apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common libxml-xpath-perl zip mariadb-server apache2 certbot
				
			

Docker über das Repository installieren #

				
					apt install docker.io docker-compose
				
			

Docker manuell Installieren #

Für die Docker Installation verwenden Sie folgende Anleitung: https://docs.docker.com/engine/install/debian/
Für die Docker-Compose Installation verwenden Sie folgende Anleitung: https://docs.docker.com/compose/install/linux/

MariaDB einrichten #

Datenbankbenutzer: projectfacts oder teamspace
Datenbankname: proejctfacts oder teamspace
Passwort: frei wählbar
Host Adresse: 172.17.0.%

Hinweis: Docker legt ein 172.17.0.0/16 Netzwerk an. Die Datenbank ist für den Container unter 172.17.0.1 erreichbar. Um die Datenbank einspielen zu können, benötigen Sie eine Datenbankvorlage. Hierfür melden Sie sich bei uns.

Anlegen des tmpfs #

Erstellen Sie den tmpfs Ordner

				
					mkdir -p /var/log/mysql/tmp
				
			

Fügen Sie in die »/etc/fstab« folgenden Inhalt hinzu, damit das »tmpfs« Reboot fest ist:

				
					# MariaDB Konfig anpassen (tmpfs mit 3GB ggf. verkleinern, falls nicht genug RAM verfügbar ist. Muss dann auch in der MySQL Konfig angepasst werden!)
tmpfs   /var/log/mysql/tmp      tmpfs   defaults,size=3G        0       0
				
			

Um das Verzeichnis zu Mounten führen Sie folgenden Befehl aus:

				
					mount -a
				
			

Prüfen Sie anschließend mit »df -h« ob das tmpfs Verzeichnis gemountet ist.

Anlegen der innodb_tmpdir #

Legen Sie den Ordner »/mnt/userfiles/tmp« an und führen Sie folgenden Befehl aus:

				
					mkdir -p /mnt/userfiles/tmp && chmod 1777 /mnt/userfiles/tmp
				
			

Eine genauere Erläuterung finden Sie hier: Update auf 2024.1

MariaDB Anpassung #

Imponieren Sie die aktuelle »Zeitzone« in die MariaDB mysql Datenbank:

				
					mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
				
			

Erstellen Sie eine Datei unter /etc/mysql/mariadb.conf.d/51-projectfacts.cnf. Fügen Sie folgenden Inhalt hinzu:

				
					[mysqld]
bind-address = 0.0.0.0
skip-name-resolve

# projectfacts Optimierungen
default-time-zone       = Europe/Berlin
lower_case_table_names  = 1
innodb_buffer_pool_size = 1G
max_heap_table_size     = 512M
tmp_table_size          = 512M
innodb_log_file_size    = 256M
group_concat_max_len    = 4096
character-set-server    = utf8mb4
collation-server        = utf8mb4_unicode_ci
tmpdir                  = /var/log/mysql/tmp
innodb_tmpdir           = /mnt/userfiles/tmp

sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

# Optimierung für MariaDB 10.4+
#optimizer_switch        = 'rowid_filter=off'
#query_cache_size        = 0
#query_cache_type        = 0
				
			

Hinweis: Die Zeitzone der Datenbank muss mit dem Betriebssystem übereinstimmen, auf dem der Tomcat läuft. Wenn die Datenbank zusammen mit dem Tomcat auf einem System installiert wurden, ist das i. d. R. gegeben. Unter Linux können Sie die Zeitzone mit cat /etc/timezone einsehen.

Starten Sie die MariaDB neu:

				
					systemctl restart mariadb
				
			

projectfacts/teamspace einrichten #

Ab der Tomcat Version 9.0.92 oder höher müssen Sie Ihr projectfacts/teamspace auf folgende Versionen aktualisieren. Ansonsten erhalten Sie eine Fehlermeldung.

  • Ab 2024.2.68
  • Ab 2024.1.72

Hinweis: In der Anleitung wird immer der projectfacts Name verwenden. Haben Sie teampsace können Sie den Namen ersetzen.

1. Legen Sie folgende Ordner an:

  • /srv/projectfacts
  • /srv/projectfacts/logs
  • /srv/projectfacts/logs/tomcat
  • /srv/projectfacts/webapp
  • /mnt/userfiles/<Kundenname>

2. Kopieren Sie die »deploy-war-docker.sh« und die »projectfacts-20XX.X.XX.war« in das Verzeichnis »/srv/projectfacts«

3. Führen Sie »chmod +x deploy-war-docker.sh« aus, um das Script ausführbar zu machen. Führen Sie »./deploy-war-docker.sh« aus, damit das Script die »projectfacts-20XX.X.XX.war« entpackt.
Hinweis: Prüfen Sie vorher die Pfade in der »deploy-war-docker.sh«.

4. Kopieren Sie die »userfiles.tar.gz2« in das »/mnt/userfiles/<Kundenname>« Verzeichnis und entpacken Sie mit »tar -xf userfiles.tar.gz2« die Userfiles.

Damit im Ordner »/srv/projectfacts/logs/tomcat« Logs geschrieben werden können, müssen Sie die Ordner Rechte anpassen:

				
					chown projectfacts:projectfacts /srv/projectfacts/logs/tomcat/
				
			

Dockerfile anlegen #

Legen Sie ein »Dockerfile« unter »/srv/projectfacts/Dockerfile« ab. Das Dockerfile wird benötigt, um das Image zu erstellen:

				
					FROM tomcat:9-jdk17-temurin-focal

RUN groupadd -g 161 projectfacts && \
    useradd -r -u 161 -g projectfacts projectfacts && \
    rm -r /usr/local/tomcat/webapps && mkdir /usr/local/tomcat/webapps && \
    chown -R projectfacts:projectfacts "/usr/local/tomcat"

USER projectfacts
				
			

Image erstellen #

Legen Sie ein »Dockerfile« unter »/srv/projectfacts/Dockerfile« ab. Das Dockerfile wird benötigt, um das Image zu erstellen:

				
					docker build -t projectfacts:jdk17 .
				
			

web.xml anpassen #

Passen Sie in der Datei »/srv/projectfacts/webapp/WEB-INF/web.xml« folgende Zeilen an:

Damit der Mailversand & -empfang funktioniert, darf in der »timer.mailfetcher« in der param-value keine 0 stehen. Hier wird in Sekunden gezählt. Soll der Mailversand & -empfang deaktiviert werden, kann hier eine 0 gesetzt werden.

				
					<context-param>
  <param-name>timer.mailfetcher</param-name>
  <param-value>30</param-value>
</context-param>
				
			

Ändern Sie in der »mail.positive_mail_list« den param-value Wert von .*5point.de in .* damit der Mailversand nicht mehr eingeschränkt wird.

				
					<context-param>
  <param-name>mail.positive_mail_list</param-name>
  <param-value>.*</param-value>
</context-param>
				
			

Passen Sie in der »server.url« unter param-value ihre Domain an.

				
					<context-param>
  <param-name>server.url</param-name>
  <param-value>https://projectfacts.mycompany.de</param-value>
</context-param>

<context-param>
  <param-name>webdav.url</param-name>
  <param-value>https://projectfacts.mycompany.de</param-value>
</context-param>
				
			

Unter »oauth2Gateway.url« geben Sie die URL an, für die OAuth 2.0 Umleitung. Haben Sie projectfacts lautet die URL »https://www.projectfacts.de« und wenn Sie teamspace haben lautet die URL »https://www.teamspace.de«.

				
					<context-param> 
    <param-name>oauth2Gateway.url</param-name>
    <param-value>https://www.projectfacts.de</param-value>
</context-param>
				
			

Um den PDF-Verarbeitungsdienst nutzen zu können, müssen Sie einen Server einrichten. Dies kann auf demselben Server gesehen, wo aus projectfacts/teamspace installiert wurde. Eine Anleitung finden Sie hier: PDF-Verarbeitungsdienst installieren

Verwenden Sie diesen Dienst nicht, müssen hier keine Anpassungen gemacht werden.

				
					<context-param> 
    <param-name>pdfConvertService.url</param-name>
    <param-value></param-value>
</context-param>
				
			

context.xml anpassen #

Öffnen Sie die Datei »/srv/projectfacts/META-INF/context.xml« und bearbeiten Sie folgende Zeilen:

username=“projectfacts
password=“projectfacts
url=“jdbc:mysql://localhost:3306/projectfacts?useUnicode=true&amp;useSSL=false&amp;serverTimezone=Europe/Berlin

Da hier Docker verwendet wird, muss unter localhost folgende IP-Adresse eingetragen werden: 172.17.0.1. Hierbei handelt es sich um das Docker Netzwerk. Der Tomcat greift über das Docker Netzwerk auf die MariaDB zu.

Weiter Informationen können Sie hier entnehmen: Update auf 2023.4

Hinweis: Die Zeitzone der Datenbank muss mit dem Betriebssystem übereinstimmen, auf dem der Tomcat läuft. Wenn die Datenbank zusammen mit dem Tomcat auf einem System installiert wurden, ist das i. d. R. gegeben. Unter Linux können Sie die Zeitzone mit cat /etc/timezone einsehen.

Schriftart hinzufügen (Jasper-Font) #

Legen Sie die »jasper-font-default-1.2.0.jar« in das »/srv/projectfacts/webapp/WEB-INF/lib/« Verzeichnis ab.

iptables anpassen #

Damit die MariaDB von außerhalb geschützt ist, werden iptables Regeln erstellt. Zusätzlich wird der Port 8080 des Tomcat Servers nur für localhost erlaubt.

SSH Zugriff erlaubten, ansonsten sperrt man sich vom Server aus:

				
					iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
				
			

Regel für 172.17.0.0/16:

				
					iptables -A INPUT -s 172.17.0.0/16 -p tcp -m tcp --dport 3306 -j ACCEPT
				
			

Regel für 127.0.0.1/32:

				
					iptables -A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 3306 -j ACCEPT
				
			

Zugriff von außen Blocken:

				
					iptables -A INPUT -p tcp -m tcp --dport 3306 -j DROP
				
			

iptables Regeln speichern:

				
					iptables-save > /etc/iptables/rules.v4
				
			

docker-compose.yml #

Legen sie unter »/srv/projectfacts« eine »docker-compose.yml« mit folgendem Inhalt an:

				
					version: '2.3'

services:
        tomcat:
                container_name: "projectfacts"
                image: projectfacts:jdk17
                logging:
                    options:
                        max-file: "5"
                        max-size: "10m"
                volumes:
                        - "/srv/projectfacts/webapp:/usr/local/tomcat/webapps/ROOT"
                        - "/srv/projectfacts/logs/tomcat:/usr/local/tomcat/logs"
                        - "/mnt/userfiles/<Kundenname>:/srv/projectfacts/userfiles"
                ports:
                        - "127.0.0.1:8080:8080"
                restart: unless-stopped
                cpus: 4
                stop_grace_period: 30s
                network_mode: bridge
                environment:
                        TZ: "Europe/Berlin"
                        CATALINA_OPTS: "-Djava.awt.headless=true -Xmx1024m -XX:ParallelGCThreads=2 -XX:ConcGCThreads=2"
				
			

Passen Sie unter den Volumes »/mnt/userfiles/<Kundenname>« den Pfad an.
Passen Sie ggf. die Zeile »TZ: „Europe/Berlin“« für die Zeitzone an.
In der Zeile »CATALINA_OPTS: „-Djava.awt.headless=true -Xmx1024m -XX:ParallelGCThreads=2 -XX:ConcGCThreads=2″« in Rot Makiert können Sie den Arbeitsspeicher anpassen.

Legen Sie unter »/srv/projectfacts/logs« ein Ordner Tomcat an. Setzen Sie die Rechte mit dem Befehl:

				
					chmod projectfacts:projectfacts /srv/projectfacts/logs/tomcat
				
			

Nützliche Docker befehle #

In einen Container wechseln:

				
					docker exec -it <Containername> /bin/bash
				
			

Logs des Containers ausgeben lassen:

				
					docker logs <Containername>
				
			

Container neu erstellen, falls sich die docker-compose.yml geändert hat, ohne den Container zu starten. Die docker-compose muss immer im Ordner projectfacts ausgeführt werden.

				
					docker-compose up --no-start
				
			

Docker Container löschen:

				
					docker-compose down
				
			

oder

				
					docker rm <Containername oder ID>
				
			

Container starten:

				
					docker-compose start
				
			

Container stoppen:

				
					docker-compose stop
				
			

Container neu starten:

				
					docker-compose restart
				
			

Docker Statistik anzeigen:

				
					docker-compose stats
				
			

Laufende Docker Container anzeigen:

				
					docker ps
				
			

Alle Docker Container anzeigen:

				
					docker ps -a
				
			

Docker Images anzeigen: 

				
					docker images
				
			

Docker Image löschen:

				
					docker rmi <Imagename oder ID>
				
			

Docker Container das erste Mal starten #

Um den Container das erste Mal zu starten, müssen Sie sich im Ordner »/srv/projectfacts« befinden. Anschließend führen Sie folgenden Befehl aus:

				
					docker-compose up -d
				
			

Apache oder Ngnix Webserver einrichten #

Um den Apache Webserver einzurichten, finden Sie hier eine Anleitung: Apache Konfiguration

Um den Ngnix Webserver einzurichten, finden Sie hier eine Anleitung: Ngnix Konfiguration