From e9502ddaac82d33a4e4f316b34fd503a3b06ab65 Mon Sep 17 00:00:00 2001 From: Alexander Malzkuhn Date: Fri, 6 Jun 2025 13:13:12 +0200 Subject: [PATCH] Installationsanweisungen --- Dokumentation.md | 116 ++++++++++++++++++++++++++++++++++++++++------- login.jpg | Bin 0 -> 16049 bytes 2 files changed, 100 insertions(+), 16 deletions(-) create mode 100644 login.jpg diff --git a/Dokumentation.md b/Dokumentation.md index 7c423ec..9416771 100644 --- a/Dokumentation.md +++ b/Dokumentation.md @@ -2,26 +2,110 @@ # -- Die Dokumentation ist noch in Arbeit -- +## Systemanforderungen + +Zum Ausführen von Zeiterfassung wird eine Python-Installtion mit den Paketen nicegui, segno und python-dateutils +benötigt. Unter Linux kann das Programm auch als Docker Container ausgeführt werden. Hierfür wird docker und benötigt. +Die Verwendung von docker-compose wird empfohlen. ADas Programm stellt keine hohen Anforderungen an die Hardware. +Alle Systeme, die die oben genannten Programme ausführen können, reichen für den Betrieb des Systems aus. + ## Installation -- ### per Source Code -- ### mittels Docker + +Aktuell gibt es zwei Möglichkeiten das Programm auszuführen. Sie können den Quellcode herunterladen +und mittels Python Interpreter ausführen lassen. Dazu müssen Sie die notwendigen Pythonpakete installieren. +Alternativ können Sie ein Dockerimage erstellen oder herunterladen, dass alle notwendigen Programmbestandteile +enthält. + +### Quellcode ausführen + +Klonen Sie das Repository für den Quellcode in ein für sie passendes Verzeichnis. Dazu können Sie den folgenden +Befehl verwenden + + git clone https://gitea.am-td.de/alexander/zeiterfassung + +Zum Ausführen des Programms benötigen Sie eine Installation von Python 3.11 oder höher. Für das Ausführen werden +zusätzlich die Python-Pakete nicegui, segno und python-dateutils benötigt. Diese können Sie mittels pip installieren + + pip install nicegui segno python-dateutils + +oder nutzen Sie die requirements.txt aus dem Repository + + pip install -r requirements.txt + +### Installation mit Docker + +Wenn Sie nicht vorhaben, den Quellcode zu verändern, geht die Installation mittels [Docker](https://www.docker.com/) deutlich schneller und +einfacher. Sie können das Docker Image mittels + + docker pull gitea.am-td.de/alexander/zeiterfassung:beta-2025.0.1 + +herunterladen. ## Inbetriebnahme -- ### Programm starten -- ### Erster Administratorlogin +### Programm starten +#### Quellcode + +Führen Sie die Datei *main.py* aus dem Installationsverzeichnis aus. + +#### Docker + +Bei der Verwendung von docker-compose kopieren Sie die Datei +[docker-compose.yml](https://gitea.am-td.de/alexander/zeiterfassung/src/branch/release/docker-compose.yml) aus dem Repository +in ein Verzeichnis ihrer Wahl. Mit dem Befehl + + docker compose up + +starten wird das Image geladen und das Programm gestartet. Je nach Konfiguration Ihres Systems benötigen Sie +Administratorrechte, um den Docker Container zu starten. + +Mittels + + docker compose up -d + +wird der Container im Hintergrund ausgeführt. + +#### Beide Varianten + +In der Kommandozeile werden die Adressen +angezeigt, unter der die Weboberfläche erreicht werden kann. Sollten Sie die Portkonfiguration nicht verändert haben, +ist diese + + http://[IP-Adresse des Computers]:8090 + +### Erster Administratorlogin + +Rufen Sie in einem Webbrowser die oben genannten Adresse auf. Beim ersten Start wird eine Einstellungsdatei mit +Standardeinstellungen erzeugt. Der Standardlogin für die Administration ist + + Benutzer: admin + Passwort: admin + +![Loginmaske](login.jpg) + +### Standardbenutzer + +Beim Start, oder wenn alle Benutzerdaten gelöscht werden, wird automatisch ein Benutzerkonto mit folgenden Informationen +angelegt: + + Benutzer: default + Passwort: default ## Administration -- ### Einstellungen vornehmen -- ### Benutzer anlegen -- ### Backups erzeugen und einspielen -- ### Arbeitszeiteinträge ändern -- ### Abwesenheitszeiten eintragen -- ### Urlaubsanträge bearbeiten + +Wenn Sie die Administrationszugangsdaten im Loginbereich eingeben, werden Sie automatisch auf die Administrationseite +umgeleitet. + +### Einstellungen vornehmen +### Benutzer anlegen +### Backups erzeugen und einspielen +### Arbeitszeiteinträge ändern +### Abwesenheitszeiten eintragen +### Urlaubsanträge bearbeiten ## Benutzerfunktionen -- ### Ein- und Ausstempeln -- ### Urlaubsanträge -- ### Zeitübersichten -- ### Abwesenheitsübersichten -- ### Urlaubsanspruch -- ### Passwort ändern \ No newline at end of file +### Ein- und Ausstempeln +### Urlaubsanträge +### Zeitübersichten +### Abwesenheitsübersichten +### Urlaubsanspruch +### Passwort ändern \ No newline at end of file diff --git a/login.jpg b/login.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd1ce90bbc72328a0ee4212f8d6be3f1ce54656a GIT binary patch literal 16049 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 literal 0 HcmV?d00001