Docker: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
| (24 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 20: | Zeile 20: | ||
* NGINX & Certbot (noch nicht als Docker-Container) | * NGINX & Certbot (noch nicht als Docker-Container) | ||
* UFW (Firewall) | * UFW (Firewall) | ||
* Git (gitea) noch nicht installiert | * [https://gitea.tisento.com Git (gitea)] noch nicht installiert | ||
== Neuinstallation == | |||
Kopie der "tisento.conf"-Datei in den Ordner: "/etc/ssh/sshd_config.d/". | |||
Hinzufügen des 9022-Ports zur UFW mit: | |||
sudo ufw allow 9022/tcp | |||
Einschalten der ufw mit | |||
sudo ufw enable | |||
=== Installation vom Docker (https://docs.docker.com/engine/install/ubuntu/): === | |||
Install using the <code>apt</code> repository | |||
Before you install Docker Engine for the first time on a new host machine, you need to set up the Docker <code>apt</code> repository. Afterward, you can install and update Docker from the repository. | |||
* Set up Docker's <code>apt</code> repository. | |||
# Add Docker's official GPG key: | |||
sudo apt-get update | |||
sudo apt-get install ca-certificates curl | |||
sudo install -m 0755 -d /etc/apt/keyrings | |||
sudo curl -fsSL <nowiki>https://download.docker.com/linux/ubuntu/gpg</nowiki> -o /etc/apt/keyrings/docker.ascsudo chmod a+r /etc/apt/keyrings/docker.asc | |||
# Add the repository to Apt sources: | |||
echo \ | |||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] <nowiki>https://download.docker.com/linux/ubuntu</nowiki> \ | |||
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \ | |||
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null | |||
sudo apt-get update | |||
* Install the Docker packages. | |||
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin | |||
* Verify that the installation is successful by running the <code>hello-world</code> image: | |||
sudo docker run hello-world | |||
=== Installation der Sonstigen Softare (s.u.) === | |||
via "sudo apt install ..." | |||
=== Kopie des Docker-Repos === | |||
Kopie des Repos in "/srv/tisento-docker". | |||
Dort muss als erstes "portainer gestartet und wiederhergestellt werden. | |||
Danach wird gitea gestartet und wiederhergestellt. (Damit die repos gezogen werden können) | |||
Danach nach und nach die anderen Services wiederherstellen. | |||
=== Einstellung UFW === | |||
sudo ufw allow 80/tcp | |||
sudo ufw allow 443/tcp | |||
== Sonstige Software (nicht vollständig, muss überarbeitet werden!) == | |||
* Docker (s.o.) | |||
* git | |||
* UFW (Firewall) | |||
* cron (Wiederkehrende Aufgaben, bspw. Backups) | |||
* ncdu (Speicherbelegung) | |||
* nmon (Monitoring) | |||
* cifs-utils (Mounting Laufwerke) | |||
* zip | |||
* sshpass (sftp transer) | |||
== Beschreibung der Docker-Dienste == | == Beschreibung der Docker-Dienste == | ||
Die meisten Dienste sind mit ihren Daten und Definitionen unter /var/html/dienst.tisento.com erreichbar. | |||
Dabei sind in dem Ordner /var/html/dienst.tisento.com/.docker die Definitionen der Docker-Container. | |||
In dem Ordner /var/html/dienst.tisento.com/backups sind die jeweiligen Backups der Daten. | |||
=== Cockpit-PROD === | === Cockpit-PROD ([https://cockpit.tisento.com cockpit.tisento.com]) === | ||
Cockpit-PROD besteht aus: | Cockpit-PROD besteht aus: | ||
| Zeile 32: | Zeile 102: | ||
* LXConnector (Direktverbindung zu Lexware F2) | * LXConnector (Direktverbindung zu Lexware F2) | ||
* Backup | * Backup | ||
Die Daten befinden sich unter /var/html/cockpit.tisento.com. | |||
==== Backup ==== | ==== Backup ==== | ||
Der Backup-Service erstellt jeden Tag ein Backup der MariaDB und des HTML-Verzeichnisses vom Apache-Dienst. | Der Backup-Service erstellt jeden Tag ein Backup der MariaDB und des HTML-Verzeichnisses vom Apache-Dienst. | ||
Diese Backups werden auf dem Server unter "/ | Diese Backups werden auf dem Server unter "/srv/tisento-docker/cockpit-prod/backups gespeichert. Das tägliche Backup wird nach 30 Tagen gelöscht, die monatlichen nach einem Jahr und die jährlichen Backups nie. | ||
EVTL. NOCH MONITOR HINZUFÜGEN DER BACKUP TÄGLICH PRÜFT! | EVTL. NOCH MONITOR HINZUFÜGEN DER BACKUP TÄGLICH PRÜFT! | ||
==== Wiederherstellung ==== | ==== Wiederherstellung ==== | ||
Mounting der Laufwerke via: | |||
sudo mount.cifs -v //172.22.0.245/cockpit/_Daten /srv/tisento-docker/cockpit-prod/html/_Daten/ --verbose -o user=us,password=pw,domain=TISENTOSAN2,vers=2.0,uid=33,gid=33 | |||
Die ID 33 muss ggfs. angepasst werden um | |||
id www-data | |||
damit die Rechte passen. | |||
Es müssen auch die Laufwerke _Cockpit_Daten und _Cockpit_Verwaltung gemounted werden. | |||
Weiter müssen ggfs. einige ".env"-Dateien angepasst werden. | |||
"html/api/connection/.env" | |||
".docker/backup/backup.env" | |||
Siehe die jeweiligen "*.env.example"-Dateien | |||
Danach muss das Backup der HTML-Dateien in das Verzeichnis /srv/tisento-docker/cockpit-prod/html kopiert werden. | |||
Danach müssen noch die SQL-Dateien eingespielt werden: | |||
Dazu die SQL-Datei in den Server laden ("root" => user, "test" ist das Passwort). | |||
Evtl. muss die erste Zeile gelöscht werden: | |||
tail -n +2 cockpit-dev_db.sql > cockpit-dev_db2.sql | |||
sudo docker exec -i cockpit-prod-db-1 mariadb -u root -ptest < cockpit-prod_db.sql | |||
Danach muss das Root-PW händisch geändert werden (bspw. im PMA) | |||
<blockquote>'''WICHTIG:''' | |||
'''Die Daten beim LX DW-Importer müssen auch geändert werden!'''</blockquote> | |||
=== Cockpit-TEST === | === Cockpit-TEST ([https://cockpit-test.tisento.com cockpit-test.tisento.com]) === | ||
Cockpit-PROD besteht aus: | Cockpit-PROD besteht aus: | ||
| Zeile 51: | Zeile 156: | ||
* LXConnector (Direktverbindung zu Lexware F902) | * LXConnector (Direktverbindung zu Lexware F902) | ||
* Backup | * Backup | ||
Die Daten befinden sich unter /var/html/cockpit-test.tisento.com. | |||
==== Backup ==== | ==== Backup ==== | ||
| Zeile 58: | Zeile 164: | ||
==== Wiederherstellung ==== | ==== Wiederherstellung ==== | ||
Siehe PROD (ohne Mounting) | |||
=== Cockpit-DEV === | === Cockpit-DEV ([https://cockpit-dev.tisento.com cockpit-dev.tisento.com]) === | ||
Cockpit-PROD besteht aus: | Cockpit-PROD besteht aus: | ||
| Zeile 68: | Zeile 174: | ||
* LXConnector (Direktverbindung zu Lexware F902) | * LXConnector (Direktverbindung zu Lexware F902) | ||
* Backup | * Backup | ||
Die Daten befinden sich unter /var/html/cockpit-dev.tisento.com. | |||
==== Backup ==== | ==== Backup ==== | ||
| Zeile 75: | Zeile 182: | ||
==== Wiederherstellung ==== | ==== Wiederherstellung ==== | ||
Siehe PROD (ohne Mounting) | |||
=== UpTime Kuma ( | === UpTime Kuma / Monitor ([https://monitor.tisento.com monitor.tisento.com]) === | ||
Dieses Tool ist für die Überwachung der diversen Docker-Container, als auch für diverse Systeme da (z.B. HEALTH, also CPU, RAM, HDD von diversen Servern). | Dieses Tool ist für die Überwachung der diversen Docker-Container, als auch für diverse Systeme da (z.B. HEALTH, also CPU, RAM, HDD von diversen Servern). | ||
Die Daten befinden sich unter /var/html/monitor.tisento.com. | |||
==== Backup ==== | ==== Backup ==== | ||
Es wird das /data -Verzeichnis gesichert | |||
==== Wiederherstellung ==== | ==== Wiederherstellung ==== | ||
Kopie des /data-Verzeichnisses zurück nach /srv/tisento-docker/monitor/app/data. Es muss evtl. die Datei backup_db.db in kuma.db umbenannt werden | |||
=== Portainer === | === Portainer ([https://portainer.tisento.com portainer.tisento.com]) === | ||
Dieses Tool ist für die Verwaltung der verschiedenen Docker-Container notwendig. | Dieses Tool ist für die Verwaltung der verschiedenen Docker-Container notwendig. | ||
Die Daten befinden sich unter /var/html/portainer.tisento.com. | |||
==== Backup ==== | ==== Backup ==== | ||
Es wird das data-Verzeichnis gesichert. | |||
==== Wiederherstellung ==== | ==== Wiederherstellung ==== | ||
Das data-Verzeichnis muss in /srv/tisento-docker/portainer/data gespeichert werden. | |||
=== FTP === | === FTP === | ||
Dieses Tool ist für die FTP-Verbindung zu den jeweiligen HTML-Verzeichnissen von [https://cockpit.tisento.com cockpit.tisento.com], [https://cockpit-test.tisento.com cockpit-test.tisento.com] und [https://cockpit-dev.tisento.com cockpit-dev.tisento.com] zuständig. | Dieses Tool ist für die FTP-Verbindung zu den jeweiligen HTML-Verzeichnissen von [https://cockpit.tisento.com cockpit.tisento.com], [https://cockpit-test.tisento.com cockpit-test.tisento.com] und [https://cockpit-dev.tisento.com cockpit-dev.tisento.com] zuständig. | ||
Die Daten befinden sich unter /var/html/ftp.tisento.com. | |||
==== Backup ==== | ==== Backup ==== | ||
Es wird die pureftpd.passwd Datei als backup gespeichert. Diese beinhaltet die FTP-Verzeichnisse und Server und Passwörter. | |||
==== Wiederherstellung ==== | ==== Wiederherstellung ==== | ||
Die pureftpd.passwd muss in das Verzeichnis /srv/tisento-docker/ftp/.docker/passwd/ lopiert werden. | |||
Es muss in dem docker-compose evtl. die Zeile "PUBLICHOST: "172.22.0.223"" angepasst werden. | |||
=== Ticketsystem / Otobo ([https://service.tisento.com service.tisento.com]) === | |||
Dieses Tool ist für die Erstellung und Verwaltung der Tickets zuständig. | |||
Die Daten befinden sich unter /var/html/TODO.tisento.com. | |||
==== Backup ==== | ==== Backup ==== | ||
| Zeile 112: | Zeile 229: | ||
==== Wiederherstellung ==== | ==== Wiederherstellung ==== | ||
TODO | TODO | ||
==== Fehlerbehebung ==== | |||
Wenn bspw. die Festplatte vom Docker-Server vollgelaufen ist, dann müssen die Dienste einmal neugestartet werden (Portainer -> Connect -> Stacks -> tisento_cloud, Container alle auswählen und "Restart"). | |||
Zusätzlich kann es sein, dass man die Caches mit folgenden Befehlen (im Daemon) löscht (Portainer -> Connect -> Stacks -> tisento_cloud -> tisento_cloud-daemon-1 -> ">_Console"): | |||
<code>bin/otobo.Console.pl Maint::Cache::Delete</code> | |||
<code>bin/otobo.Console.pl Maint::Config::Rebuild --cleanup</code> | |||
<code>bin/otobo.Console.pl Maint::Loader::CacheCleanup</code> | |||
Wenn es in dem DB-Container zu dem Fehler kommt (Prüfen Portainer -> Connect -> Stacks -> tisento_cloud -> tisento_cloud-db-1 -> "Logs"): | |||
2025-10-13 10:56:49 0 [ERROR] Could not open mysql.plugin table: "Unknown storage engine 'Aria'". Some plugins may be not loaded | |||
2025-10-13 10:56:49 0 [ERROR] Failed to initialize plugins. | |||
2025-10-13 10:56:49 0 [ERROR] Aborting | |||
Dann müssen in dem DB-Container die ARIA-Files gelöscht werden: | |||
Container stoppen (z.B. in Portainer), danach das Volume mounten (mit sudo vorher und direkt in der SSH Verbindung vom Server!): | |||
<code>docker run --rm -it -v tisento_cloud_mariadb_data:/var/lib/mysql alpine sh</code> | |||
und dann die Aria-Files in dem Ordner /var/lib/mysql löschen: | |||
<code>cd /var/lib/mysql</code> | |||
<code>rm aria_log.*</code> | |||
Danach Container starten und testen (Und Logs anschauen, s. oben!) | |||
=== NGINX (noch nicht als Docker-Container) === | === NGINX (noch nicht als Docker-Container) === | ||
nginx ist ein Reverse-Proxy, damit die verschiedenen Domains den richtigen Weg zu den Services finden. | |||
Die Daten befinden sich unter /srv/tisento-docker/SERVICENAME/..... | |||
==== Backup ==== | ==== Backup ==== | ||
Es werden die verzeichnisse certbot and nginx gebackupped | |||
==== Wiederherstellung ==== | ==== Wiederherstellung ==== | ||
Die beiden Verzeichnisse müssen in /srv/tisento-docker/nginx/nginx und srv/tisento-docker/nginx/certbot kopiert werden! | |||
=== UFW (Firewall) === | === UFW (Firewall) === | ||
==== Backup ==== | ==== Backup ==== | ||
Es wird einmal am Tag die Liste mit den Regeln abgespeichert. | |||
TODO | TODO | ||
==== Wiederherstellung ==== | ==== Wiederherstellung ==== | ||
Erstellen der einzelnen Richtlinien mit: | |||
sudo ufw allow 10021/tcp | |||
=== Git (gitea) ([https://gitea.tisento.com gitea.tisento.com]) === | |||
Die Daten befinden sich unter /srv/tisento-docker/gitea/data. | |||
==== Backup ==== | |||
Es wird das data-Verzeichnis gesichert. | |||
==== Wiederherstellung ==== | |||
Das data-Verzeichnis muss in /srv/tisento-docker/portainer/data gespeichert werden. | |||
=== | === Recovery (git & wiki) === | ||
==== Backup ==== | ==== Backup ==== | ||
In diesem Dienst wird von dem aktuellen Git-Repo ein Backup gemacht, weiter wird auch diese Wiki-Seite gesichert, damit die Daten hiermit wiederhergestellt werden können | |||
==== Wiederherstellung ==== | ==== Wiederherstellung ==== | ||
Die Daten müssen entpackt werden. Dann dem PDF folgen! | |||
== | == Backup // Wiederherstellung == | ||
Jeder Service hat ein eigenes Backup-System. | Jeder Service hat ein eigenes Backup-System. | ||
Diese Backups werden gemeinsam per FTP auf den Server XY übertragen. | Diese Backups werden gemeinsam per FTP auf den Server XY übertragen. (TODO) | ||
Dort läuft ein kleiner PHP-Cronjob, der diese Backups in ein anderes Verzeichnis überträgt. | Dort läuft ein kleiner PHP-Cronjob, der diese Backups in ein anderes Verzeichnis überträgt. (TODO) | ||
Diese Dateien werden für eine Wiederherstellung benötigt! | Diese Dateien werden für eine Wiederherstellung benötigt! | ||
=== Wiederherstellung === | |||
Für die Wiederherstellung werden die Backups vom Server benötigt. Weiter wird diese Anleitung benötigt. | |||
Weiter wird für ein vollständigen Backups ein neuer Server benötigt, dort müssen folgende Schritte in der Reihenfolge ausgeführt werden. | |||
Installation s.o. "Neuinstallation". | |||
Außerdem muss der DNS und weitere Weiterleitungen der entsprechenden Domains auf den neuen Server geändert werden! | |||
Es werden auch einige Passwörter gebraucht. Dieses sind in keepass.tisento.com und auch in der Passwort-Datei abgespeichert. Diese kann mit dem üblichen Passwort geöffnet werden (TODO)! | |||
Kopie des git-Repos in dem Verzeichnis /srv/tisento-docker/. | |||
Per SSH Beispielsweise mit dem CMD zum Server kopiert werden: | |||
sudo scp -P XXXX /srv/tisento-docker/nginx/backups/daily/backup_nginx_20250620_020000.tar.gz USER@IP:/tmp/nginx.tar.gz | |||
Entpacken der Dateien mit bspw.: | |||
tar -xvzf yourfile.tar.gz -C /path/to/your/special/folder | |||
Wiederherstellung nginx s.o. | |||
Wiederherstellung Portainer s.o. | |||
Wiederherstellung gitea s.o. | |||
Wiederherstellung der restlichen Docker-Services mithilfe der Docker-Compose-Dateien in gitea. Alternativ sind die Docker-Compose-Dateien auch in den Backup gespeichert und wurden im best-case zu "/srv/tisento-docker" zurückgespielt! | |||
Wiederherstellung der einzelnen Daten der Services mithilfe der obigen Erklärungen. | |||
== Test der Systeme == | |||
=== Cockpit-PROD ([https://cockpit.tisento.com cockpit.tisento.com]) === | |||
Erstellung einer Zeiterfassung. | |||
Erstellung eines Auftragsscheines => per FTP & V-Laufwerk prüfen, ob dieser erstellt wurde. | |||
=== Cockpit-TEST ([https://cockpit-test.tisento.com cockpit-test.tisento.com]) === | |||
Erstellung einer Zeiterfassung. | |||
Erstellung eines Auftragsscheines => per FTP prüfen, ob dieser erstellt wurde. | |||
=== Cockpit-DEV ([https://cockpit-dev.tisento.com cockpit-dev.tisento.com]) === | |||
Erstellung einer Zeiterfassung. | |||
Erstellung eines Auftragsscheines => per FTP prüfen, ob dieser erstellt wurde. | |||
=== UpTime Kuma / Monitor ([https://monitor.tisento.com monitor.tisento.com]) === | |||
Aufruf der Website, schauen, ob alle Monitore noch vorhanden sind. | |||
=== Portainer ([https://portainer.tisento.com portainer.tisento.com]) === | |||
Aufruf der Website und schauen, ob zu den Containern eine Verbindung herstgestellt wird. | |||
=== FTP === | |||
Hestellung der Verbindung zu Cockpit-Prod,-Test und -Dev. | |||
Testübertragung (bspw. Task) und test davon! | |||
Ansonsten einfach mal die index.html umbenennen! | |||
=== Ticketsystem / Otobo ([https://service.tisento.com service.tisento.com]) === | |||
Erstellung eines Test-Tickets via Mail an: support@tisento.com | |||
Prüfen, ob dieses Ticket in der GUI auftaucht. | |||
Antworten auf dieses Ticket und schauen, ob die Antwort in dem Mail-Client ankommt. | |||
=== NGINX === | |||
Aufrufen der diversen Websiten. | |||
=== UFW (Firewall) === | |||
=== Git (gitea) ([https://gitea.tisento.com gitea.tisento.com]) === | |||
Anmeldung mit dem AD-Nutzern | |||
== Neuen Docker-Dienst anlegen == | == Neuen Docker-Dienst anlegen == | ||
| Zeile 163: | Zeile 397: | ||
## nginx neuladen | ## nginx neuladen | ||
# Prüfen der Verbindung | # Prüfen der Verbindung | ||
== Datev-Relay Einstellungen == | |||
=== Netzwerk === | |||
Hinzufügen: | |||
sudo nano /etc/iproute2/rt_tables | |||
100 eth0table | |||
101 eth1table | |||
Erstellen: | |||
sudo nano /usr/local/sbin/custom-routes.sh | |||
ip route add 172.22.0.0/24 dev eth0 src 172.22.0.224 table eth0table | |||
ip route add default via 172.22.0.254 dev eth0 table eth0table | |||
ip route add 10.10.10.0/24 dev eth1 src 10.10.10.224 table eth1table | |||
ip route add default via 10.10.10.254 dev eth1 table eth1table | |||
ip rule add from 172.22.0.224/32 table eth0table | |||
ip rule add from 10.10.10.224/32 table eth1table | |||
Ändern der Rechte: | |||
sudo chmod +x /usr/local/sbin/custom-routes.sh | |||
Erstellen | |||
sudo nano /etc/systemd/system/custom-routes.service | |||
[Unit] | |||
Description=Add custom routes to tables | |||
After=network-online.target | |||
Wants=network-online.target | |||
[Service] | |||
Type=oneshot | |||
ExecStart=/usr/local/sbin/custom-routes.sh | |||
RemainAfterExit=yes | |||
[Install] | |||
WantedBy=multi-user.target | |||
und aktivieren: | |||
sudo systemctl enable custom-routes.service | |||
Anpassung der Netzwerkeinstellungen | |||
sudo nano /etc/netplan/50-cloud-init.yaml | |||
network: | |||
version: 2 | |||
ethernets: | |||
eth0: | |||
dhcp4: true | |||
adresses: [172.22.0.224/24] | |||
gateway4: 172.22.0.254 | |||
nameservers: | |||
addresses: [172.22.0.210,172.22.0.254] | |||
eth1: | |||
dhcp4: false | |||
addresses: [10.10.10.224/24] | |||
gateway4: 10.10.10.254 | |||
nameservers: | |||
addresses: [8.8.8.8, 9.9.9.9] | |||
Aktuelle Version vom 29. Oktober 2025, 10:28 Uhr
Zugriff
Der Docker-Server ist unter der 172.22.0.224 erreichbar.
Der neue Docker-Server wird unter 172.22.0.223 erreichbar sein.
Der Port, Nutzername und auch das Passwort sind im Passbolt gespeichert.
Zugriff Dienste
Nachfolgend eine Liste der Dienste die auf dem Docker laufen
- Cockpit-PROD
- Cockpit-TEST
- Cockpit-DEV
- UpTime Kuma (Monitor)
- Portainer (Docker Verwaltung)
- FTP
- Ticketsystem / Otobo
- NGINX & Certbot (noch nicht als Docker-Container)
- UFW (Firewall)
- Git (gitea) noch nicht installiert
Neuinstallation
Kopie der "tisento.conf"-Datei in den Ordner: "/etc/ssh/sshd_config.d/".
Hinzufügen des 9022-Ports zur UFW mit:
sudo ufw allow 9022/tcp
Einschalten der ufw mit
sudo ufw enable
Installation vom Docker (https://docs.docker.com/engine/install/ubuntu/):
Install using the apt repository
Before you install Docker Engine for the first time on a new host machine, you need to set up the Docker apt repository. Afterward, you can install and update Docker from the repository.
- Set up Docker's
aptrepository.
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.ascsudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
- Install the Docker packages.
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
- Verify that the installation is successful by running the
hello-worldimage:
sudo docker run hello-world
Installation der Sonstigen Softare (s.u.)
via "sudo apt install ..."
Kopie des Docker-Repos
Kopie des Repos in "/srv/tisento-docker".
Dort muss als erstes "portainer gestartet und wiederhergestellt werden.
Danach wird gitea gestartet und wiederhergestellt. (Damit die repos gezogen werden können)
Danach nach und nach die anderen Services wiederherstellen.
Einstellung UFW
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
Sonstige Software (nicht vollständig, muss überarbeitet werden!)
- Docker (s.o.)
- git
- UFW (Firewall)
- cron (Wiederkehrende Aufgaben, bspw. Backups)
- ncdu (Speicherbelegung)
- nmon (Monitoring)
- cifs-utils (Mounting Laufwerke)
- zip
- sshpass (sftp transer)
Beschreibung der Docker-Dienste
Die meisten Dienste sind mit ihren Daten und Definitionen unter /var/html/dienst.tisento.com erreichbar.
Dabei sind in dem Ordner /var/html/dienst.tisento.com/.docker die Definitionen der Docker-Container.
In dem Ordner /var/html/dienst.tisento.com/backups sind die jeweiligen Backups der Daten.
Cockpit-PROD (cockpit.tisento.com)
Cockpit-PROD besteht aus:
- Apache Dienste
- MariaDB
- PHPMyAdmin
- LXConnector (Direktverbindung zu Lexware F2)
- Backup
Die Daten befinden sich unter /var/html/cockpit.tisento.com.
Backup
Der Backup-Service erstellt jeden Tag ein Backup der MariaDB und des HTML-Verzeichnisses vom Apache-Dienst.
Diese Backups werden auf dem Server unter "/srv/tisento-docker/cockpit-prod/backups gespeichert. Das tägliche Backup wird nach 30 Tagen gelöscht, die monatlichen nach einem Jahr und die jährlichen Backups nie.
EVTL. NOCH MONITOR HINZUFÜGEN DER BACKUP TÄGLICH PRÜFT!
Wiederherstellung
Mounting der Laufwerke via:
sudo mount.cifs -v //172.22.0.245/cockpit/_Daten /srv/tisento-docker/cockpit-prod/html/_Daten/ --verbose -o user=us,password=pw,domain=TISENTOSAN2,vers=2.0,uid=33,gid=33
Die ID 33 muss ggfs. angepasst werden um
id www-data
damit die Rechte passen.
Es müssen auch die Laufwerke _Cockpit_Daten und _Cockpit_Verwaltung gemounted werden.
Weiter müssen ggfs. einige ".env"-Dateien angepasst werden.
"html/api/connection/.env"
".docker/backup/backup.env"
Siehe die jeweiligen "*.env.example"-Dateien
Danach muss das Backup der HTML-Dateien in das Verzeichnis /srv/tisento-docker/cockpit-prod/html kopiert werden.
Danach müssen noch die SQL-Dateien eingespielt werden:
Dazu die SQL-Datei in den Server laden ("root" => user, "test" ist das Passwort).
Evtl. muss die erste Zeile gelöscht werden:
tail -n +2 cockpit-dev_db.sql > cockpit-dev_db2.sql
sudo docker exec -i cockpit-prod-db-1 mariadb -u root -ptest < cockpit-prod_db.sql
Danach muss das Root-PW händisch geändert werden (bspw. im PMA)
WICHTIG: Die Daten beim LX DW-Importer müssen auch geändert werden!
Cockpit-TEST (cockpit-test.tisento.com)
Cockpit-PROD besteht aus:
- Apache Dienste
- MariaDB
- PHPMyAdmin
- LXConnector (Direktverbindung zu Lexware F902)
- Backup
Die Daten befinden sich unter /var/html/cockpit-test.tisento.com.
Backup
Der Backup-Service erstellt jeden Tag ein Backup der MariaDB und des HTML-Verzeichnisses vom Apache-Dienst.
Diese Backups werden auf dem Server unter "/var/www/cockpit-test.tisento.com/backups gespeichert.
Wiederherstellung
Siehe PROD (ohne Mounting)
Cockpit-DEV (cockpit-dev.tisento.com)
Cockpit-PROD besteht aus:
- Apache Dienste
- MariaDB
- PHPMyAdmin
- LXConnector (Direktverbindung zu Lexware F902)
- Backup
Die Daten befinden sich unter /var/html/cockpit-dev.tisento.com.
Backup
Der Backup-Service erstellt jeden Tag ein Backup der MariaDB und des HTML-Verzeichnisses vom Apache-Dienst.
Diese Backups werden auf dem Server unter "/var/www/cockpit-dev.tisento.com/backups gespeichert.
Wiederherstellung
Siehe PROD (ohne Mounting)
UpTime Kuma / Monitor (monitor.tisento.com)
Dieses Tool ist für die Überwachung der diversen Docker-Container, als auch für diverse Systeme da (z.B. HEALTH, also CPU, RAM, HDD von diversen Servern).
Die Daten befinden sich unter /var/html/monitor.tisento.com.
Backup
Es wird das /data -Verzeichnis gesichert
Wiederherstellung
Kopie des /data-Verzeichnisses zurück nach /srv/tisento-docker/monitor/app/data. Es muss evtl. die Datei backup_db.db in kuma.db umbenannt werden
Portainer (portainer.tisento.com)
Dieses Tool ist für die Verwaltung der verschiedenen Docker-Container notwendig.
Die Daten befinden sich unter /var/html/portainer.tisento.com.
Backup
Es wird das data-Verzeichnis gesichert.
Wiederherstellung
Das data-Verzeichnis muss in /srv/tisento-docker/portainer/data gespeichert werden.
FTP
Dieses Tool ist für die FTP-Verbindung zu den jeweiligen HTML-Verzeichnissen von cockpit.tisento.com, cockpit-test.tisento.com und cockpit-dev.tisento.com zuständig.
Die Daten befinden sich unter /var/html/ftp.tisento.com.
Backup
Es wird die pureftpd.passwd Datei als backup gespeichert. Diese beinhaltet die FTP-Verzeichnisse und Server und Passwörter.
Wiederherstellung
Die pureftpd.passwd muss in das Verzeichnis /srv/tisento-docker/ftp/.docker/passwd/ lopiert werden.
Es muss in dem docker-compose evtl. die Zeile "PUBLICHOST: "172.22.0.223"" angepasst werden.
Ticketsystem / Otobo (service.tisento.com)
Dieses Tool ist für die Erstellung und Verwaltung der Tickets zuständig.
Die Daten befinden sich unter /var/html/TODO.tisento.com.
Backup
TODO
Wiederherstellung
TODO
Fehlerbehebung
Wenn bspw. die Festplatte vom Docker-Server vollgelaufen ist, dann müssen die Dienste einmal neugestartet werden (Portainer -> Connect -> Stacks -> tisento_cloud, Container alle auswählen und "Restart").
Zusätzlich kann es sein, dass man die Caches mit folgenden Befehlen (im Daemon) löscht (Portainer -> Connect -> Stacks -> tisento_cloud -> tisento_cloud-daemon-1 -> ">_Console"):
bin/otobo.Console.pl Maint::Cache::Delete
bin/otobo.Console.pl Maint::Config::Rebuild --cleanup
bin/otobo.Console.pl Maint::Loader::CacheCleanup
Wenn es in dem DB-Container zu dem Fehler kommt (Prüfen Portainer -> Connect -> Stacks -> tisento_cloud -> tisento_cloud-db-1 -> "Logs"):
2025-10-13 10:56:49 0 [ERROR] Could not open mysql.plugin table: "Unknown storage engine 'Aria'". Some plugins may be not loaded 2025-10-13 10:56:49 0 [ERROR] Failed to initialize plugins. 2025-10-13 10:56:49 0 [ERROR] Aborting
Dann müssen in dem DB-Container die ARIA-Files gelöscht werden:
Container stoppen (z.B. in Portainer), danach das Volume mounten (mit sudo vorher und direkt in der SSH Verbindung vom Server!):
docker run --rm -it -v tisento_cloud_mariadb_data:/var/lib/mysql alpine sh
und dann die Aria-Files in dem Ordner /var/lib/mysql löschen:
cd /var/lib/mysql
rm aria_log.*
Danach Container starten und testen (Und Logs anschauen, s. oben!)
NGINX (noch nicht als Docker-Container)
nginx ist ein Reverse-Proxy, damit die verschiedenen Domains den richtigen Weg zu den Services finden.
Die Daten befinden sich unter /srv/tisento-docker/SERVICENAME/.....
Backup
Es werden die verzeichnisse certbot and nginx gebackupped
Wiederherstellung
Die beiden Verzeichnisse müssen in /srv/tisento-docker/nginx/nginx und srv/tisento-docker/nginx/certbot kopiert werden!
UFW (Firewall)
Backup
Es wird einmal am Tag die Liste mit den Regeln abgespeichert.
TODO
Wiederherstellung
Erstellen der einzelnen Richtlinien mit:
sudo ufw allow 10021/tcp
Git (gitea) (gitea.tisento.com)
Die Daten befinden sich unter /srv/tisento-docker/gitea/data.
Backup
Es wird das data-Verzeichnis gesichert.
Wiederherstellung
Das data-Verzeichnis muss in /srv/tisento-docker/portainer/data gespeichert werden.
Recovery (git & wiki)
Backup
In diesem Dienst wird von dem aktuellen Git-Repo ein Backup gemacht, weiter wird auch diese Wiki-Seite gesichert, damit die Daten hiermit wiederhergestellt werden können
Wiederherstellung
Die Daten müssen entpackt werden. Dann dem PDF folgen!
Backup // Wiederherstellung
Jeder Service hat ein eigenes Backup-System.
Diese Backups werden gemeinsam per FTP auf den Server XY übertragen. (TODO)
Dort läuft ein kleiner PHP-Cronjob, der diese Backups in ein anderes Verzeichnis überträgt. (TODO)
Diese Dateien werden für eine Wiederherstellung benötigt!
Wiederherstellung
Für die Wiederherstellung werden die Backups vom Server benötigt. Weiter wird diese Anleitung benötigt.
Weiter wird für ein vollständigen Backups ein neuer Server benötigt, dort müssen folgende Schritte in der Reihenfolge ausgeführt werden.
Installation s.o. "Neuinstallation".
Außerdem muss der DNS und weitere Weiterleitungen der entsprechenden Domains auf den neuen Server geändert werden!
Es werden auch einige Passwörter gebraucht. Dieses sind in keepass.tisento.com und auch in der Passwort-Datei abgespeichert. Diese kann mit dem üblichen Passwort geöffnet werden (TODO)!
Kopie des git-Repos in dem Verzeichnis /srv/tisento-docker/.
Per SSH Beispielsweise mit dem CMD zum Server kopiert werden:
sudo scp -P XXXX /srv/tisento-docker/nginx/backups/daily/backup_nginx_20250620_020000.tar.gz USER@IP:/tmp/nginx.tar.gz
Entpacken der Dateien mit bspw.:
tar -xvzf yourfile.tar.gz -C /path/to/your/special/folder
Wiederherstellung nginx s.o.
Wiederherstellung Portainer s.o.
Wiederherstellung gitea s.o.
Wiederherstellung der restlichen Docker-Services mithilfe der Docker-Compose-Dateien in gitea. Alternativ sind die Docker-Compose-Dateien auch in den Backup gespeichert und wurden im best-case zu "/srv/tisento-docker" zurückgespielt!
Wiederherstellung der einzelnen Daten der Services mithilfe der obigen Erklärungen.
Test der Systeme
Cockpit-PROD (cockpit.tisento.com)
Erstellung einer Zeiterfassung.
Erstellung eines Auftragsscheines => per FTP & V-Laufwerk prüfen, ob dieser erstellt wurde.
Cockpit-TEST (cockpit-test.tisento.com)
Erstellung einer Zeiterfassung.
Erstellung eines Auftragsscheines => per FTP prüfen, ob dieser erstellt wurde.
Cockpit-DEV (cockpit-dev.tisento.com)
Erstellung einer Zeiterfassung.
Erstellung eines Auftragsscheines => per FTP prüfen, ob dieser erstellt wurde.
UpTime Kuma / Monitor (monitor.tisento.com)
Aufruf der Website, schauen, ob alle Monitore noch vorhanden sind.
Portainer (portainer.tisento.com)
Aufruf der Website und schauen, ob zu den Containern eine Verbindung herstgestellt wird.
FTP
Hestellung der Verbindung zu Cockpit-Prod,-Test und -Dev.
Testübertragung (bspw. Task) und test davon!
Ansonsten einfach mal die index.html umbenennen!
Ticketsystem / Otobo (service.tisento.com)
Erstellung eines Test-Tickets via Mail an: support@tisento.com
Prüfen, ob dieses Ticket in der GUI auftaucht.
Antworten auf dieses Ticket und schauen, ob die Antwort in dem Mail-Client ankommt.
NGINX
Aufrufen der diversen Websiten.
UFW (Firewall)
Git (gitea) (gitea.tisento.com)
Anmeldung mit dem AD-Nutzern
Neuen Docker-Dienst anlegen
Hier wird davon ausgegangen, dass es sich um einen Dockerdienst handelt, der auf einem Port wie 80 oder 443 angesprochen werden soll. Wir gehen davon aus, dass das Portmapping "127.0.0.1:10443:443" ist, also der Container den Port 10443 auf das lokale Interface öffnet und mit dem Container-Port 10443 mappt. Weiter gehen wir davon aus, dass der Service über die Subdomain "sub.tisento.com" über HTTP und HTTPS erreichbar sein soll. HTTP wird auf HTTPS weitergeleitet.
- Erstellung der Sub-Domain sub.tisento.com
- Torsten diese Sub-Domain dem Server zuweisen lassen.
- Für das SSL-Zertifikat muss die Domain öffentlich erreichbar sein!
- Erstellung der Konfiguration im nginx Service
- Erstellung einer Datei sub.tisento.com.conf in dem Pfad /var/www/nginx.tisento.com/nginx/...
- Hinzufügen von dem Inhalt:
adasdsa
- Prüfung ob die Konfiguration korrekt ist (optional)
- nginx neu laden
- Hinzufügen eines Zertifikates mit dem Befehl:
- asdasd
- Hinzufügen der SSL Konfuguration zur Datei (sub.tisento.com.conf)
- Prüfen ob die Konfiguration korrekt ist (optional)
- nginx neuladen
- Prüfen der Verbindung
Datev-Relay Einstellungen
Netzwerk
Hinzufügen:
sudo nano /etc/iproute2/rt_tables 100 eth0table 101 eth1table
Erstellen:
sudo nano /usr/local/sbin/custom-routes.sh ip route add 172.22.0.0/24 dev eth0 src 172.22.0.224 table eth0table ip route add default via 172.22.0.254 dev eth0 table eth0table ip route add 10.10.10.0/24 dev eth1 src 10.10.10.224 table eth1table ip route add default via 10.10.10.254 dev eth1 table eth1table ip rule add from 172.22.0.224/32 table eth0table ip rule add from 10.10.10.224/32 table eth1table
Ändern der Rechte:
sudo chmod +x /usr/local/sbin/custom-routes.sh
Erstellen
sudo nano /etc/systemd/system/custom-routes.service [Unit] Description=Add custom routes to tables After=network-online.target Wants=network-online.target [Service] Type=oneshot ExecStart=/usr/local/sbin/custom-routes.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target
und aktivieren:
sudo systemctl enable custom-routes.service
Anpassung der Netzwerkeinstellungen
sudo nano /etc/netplan/50-cloud-init.yaml network:
version: 2
ethernets:
eth0:
dhcp4: true
adresses: [172.22.0.224/24]
gateway4: 172.22.0.254
nameservers:
addresses: [172.22.0.210,172.22.0.254]
eth1:
dhcp4: false
addresses: [10.10.10.224/24]
gateway4: 10.10.10.254
nameservers:
addresses: [8.8.8.8, 9.9.9.9]