Kimai Zeiterfassung Installtion Installation via Docker Beschreibung Kimai via Docker mit https via Letsencrypt. Installation Vorbereitung Sollte Apparmor enabled sein, wie das bei hetzner der Fall ist dann noch eben die Apparmor Pakete installieren apt-get install apparmor apparmor-utils curl docker.io docker-compose Als erstes erstellen wir unsere Verzeichnisse mkdir -p /root/kimai/mariadb mkdir -p /root/kimai/data mkdir -p /root/kimai/plugins Nun erstellen wir im Verzeichnis /root/kimai eine neue Datei namens .env nano /root/kimai/.env Inhalt: # MySQL Credentials MYSQL_ROOT_PASSWORD=12345678 MYSQL_USER=kimai MYSQL_PASSWORD=1234567890 MYSQL_DATABASE=kimai # Volume directories MARIADB_VOLUME_DIR=/root/kimai/mariadb DATA_VOLUME_DIR=/root/kimai/data Docker-compose Datei erstellen nano /root/kimai/docker-compose.yml Inhalt ersion: '3.3' services: mariadb: image: mariadb:latest restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} volumes: - ${MARIADB_VOLUME_DIR}:/var/lib/mysql kimai: image: kimai/kimai2:apache restart: unless-stopped environment: - DATABASE_URL=mysql://${MYSQL_USER}:${MYSQL_PASSWORD}@mariadb/${MYSQL_DATABASE} volumes: - ${DATA_VOLUME_DIR}:/opt/kimai/var - ./plugins:/opt/kimai/var/plugins caddy: image: caddy:latest container_name: caddy-reverse-proxy ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - ./caddy_data:/data - ./caddy_config:/config restart: unless-stopped Nun Caddyfile erstellen nano /root/kimai/Caddyfile Inhalt zeit.example.tld { reverse_proxy http://kimai:8001 tls info@example.tld { #ca https://acme-staging-v02.api.letsencrypt.org/directory } } Nun sicher stellen das die ports 80 und 443 auch über die Domain auf den Server erreichbar sind. hier ein kleines Script das auf den port 80 lauscht um dies zu testen nano /root/kimai/testeweb.sh Inhalt #!/bin/bash # Funktion, die aufgerufen wird, wenn das Skript ein SIGINT-Signal (Ctrl+C) empfängt cleanup() { echo "Server wird beendet..." exit 0 } # Trap für das SIGINT-Signal einrichten trap cleanup SIGINT # Endlosschleife für den Server while true; do # Listen on port 80 { echo -ne "HTTP/1.1 200 OK\r\nContent-Length: $(echo -n "Hello, World!" | wc -c)\r\n\r\nHello, World!"; } | nc -l -p 80 -q 1 done Danach ausführbar machen chmod +x /root/kimai/testeweb.sh nun das Script starten, kann mit strg+c wieder abgebrochen werden. Nun kann getestet werden ob Firewall/Portforwarding richtig funktioniert, idem in einem Webbrowser die public ip aufegrufen wird. Es muss eine hello World Seite zurück gegben werden. Container Starten Ins kimai Verzeichnis gehen cd /root/kimai Nun den Conatiner starten docker-compose up -d Benutzer anlegen Die Rollen Role name Description User Normal user can track their working times, see basic reports and change their own preferences. Technical name: ROLE_USER Teamlead Manages teams with permissions for invoices and access to all team timesheets. Technical name: ROLE_TEAMLEAD Administrator Can manage all content and timesheet related data, but lack user administration and system privileges. Technical name: ROLE_ADMIN System-Admin Has permissions to manage everything in Kimai, from content to timesheets to users, plugins and system configurations. Technical name: ROLE_SUPER_ADMIN die container id mit docker ps herausfinden docker exec -ti \ /opt/kimai/bin/console kimai:user:create ROLE_SUPER_ADMIN Beispiel: docker exec -ti 32da986c57c2 \ /opt/kimai/bin/console kimai:user:create admin admin@example.com ROLE_SUPER_ADMIN Dann kann ein Kennwort vergeben werden. Muss mindestens 8 Zeichen haben Benutzer Passwort ändern die container id mit docker ps herausfinden docker exec -ti \ /opt/kimai/bin/console kimai:user:password Beispiel: docker exec -ti 32da986c57c2 \ /opt/kimai/bin/console kimai:user:password admin Dann kann ein neues Kennwort vergeben werden. Muss mindestens 8 Zeichen haben Mobile App Beschreibung: Für Kimai gibt es auch eine Mobile App. Aus dem AppStore die Mobile App installieren: iOS link zum Store Android Link zum Store Benutzer freischalten im Kimai Backend. Damit sich der Benutzer anmelden kann, muss in den Benutzereinstellungen ein APi Passwort (Nicht Token) hinterlegt werden. Beim Passwort kommt der Hinweis das diese methode veraltet ist, aber die Mobil App nutzt zur zeit nur Passwort. Dazu gehen wir Auf System -> Benutzer Dann den benutzer anklicken, für den wir das API Passwort erstellen wollen Dort dann oben auf bearbeiten klicken und API Zugang auswählen Nun das neue Kennwort setzten und speichern. Einloggen auf der Mobile App Create Workspace anklicken. Daten ausfüllen. Workspace Name, zum Beispiel Firmenname. Server URL : die Kimai Seite https://vorweg schreiben Die APP Funktioniert nur über https Email / Username : den Benutzernamen eintragen Password: Das API Kennwort Nun auf Create a new Workspace klicken. Und eingeloggt: Kimai Terminal Einleitung und Teile Liste Beschreibung: Ein KIMAi terminal Kostengüntig mit nem SONOFF Switch. Günstiger bekommt man es nicht zusammen. Teile Liste: SONOFF Switch (SONOFFT4EU1C, t4eu1c ) SonOff Tooch Store Link Wenn man kein SONOFF kaufen möchte kann man auch einfach den Microcontroller nutzen der WLAN schon drauf hat: AZDelivery-NodeMCU-ESP8266-ESP-12E-Development ich find den SONOFF aber Praktisch, alles schon drin in einem Gehäuse RFID Plate mit 5 Dongle : 5er Pack Rabatt (Sonst kostent einer schon 7 EURO ohne Dongle) RFID-Kit-Arduino-Raspberry-SPI-Schnittstelle OLDED Display (APKLVSR 3PCS 0,96 Zoll OLED Display I2C 128 x 64 Pixel I2C Display Modul, (Gelb und Blau)) : Link : APKLVSR-Display-kompatibel-Arduino-Raspberry UART Interface (Wird nur für SONOFF gebraucht, das NodeMCU hat einen USB Anschluss : UART-Wandler-Adapter-serielle-Schnittstelle-Converter-Anschlussleitung 100 Dongle zum Nachbestellen extrem Klasse Preis : Chips-125KHz-Transponder 100 Stück   Plugin Invoice Bundle Installation invoiceBundle Beschreibung: Ein Plugin mit dem Gleichzeitig Stundenzettel generiert und Rechnungen erstellt werden können. Mich Persönlich interessieren nur die Stundenzettel Da ich Kimai im Docker betreibe ist die Installation an dem Docker setup Angelehnt Vorrausetzungen: apt install unzip Installation bei Kimai Docker: In Das Verzeichnis Plugins die Zip Datei exhtrahieren. InvoiceBundle-2.2.0.zip Dazu per scp die Datei auf den Server kopieren, versionsnummer kann natürlich varieren scp InvoiceBundle-2.2.0.zip root@zeit.example.tld:/root/kimai Nun entpacken cd root/kimai unzip InvoiceBundle-2.2.0.zip ls Ausgabe: Nun haben Wir ein verzeichnis InvoiceBundle-2.2.0 ls caddy_config caddy_data Caddyfile certbot-etc certbot-log certbot-www data docker-compose.yml InvoiceBundle-2.2.0 InvoiceBundle-2.2.0.zip mariadb plugins Dieses umbenennen und verschieben mv InvoiceBundle-2.2.0 plugins/InvoiceBundle Nun muss im InvoiceBundle Verzeichnis der inhsalt so aussehen ls Ausgabe: ls CHANGELOG.md composer.json Controller DependencyInjection EventSubscriber Form Invoice InvoiceBundle.php LICENSE phpstan.neon README.md Resources Tests Nun nur noch den Cache leeren, dazu im kima Container einloggen docker-compose exec kimai /opt/kimai/bin/console kimai:reload --env=prod Ausgabe bei mir mit Fehler zu alt. : root@debian-kimai-4gb-nbg1-2:~/kimai# docker-compose exec kimai /opt/kimai/bin/console kimai:reload --env=prod In Kernel.php line 115: Bundle "InvoiceBundle" requires minimum Kimai version 22700, but yours is lower: 2.18.0 (21800). Please update Kimai or use a lower Plugin version. Also kimai aktualiseren docker pull kimai/kimai2:apache docker-compose up -d docker-compose exec kimai /opt/kimai/bin/console kimai:reload --env=prod docker-compose down docker-compose up -d docker-compose exec kimai /opt/kimai/bin/console assets:install docker-compose exec kimai /opt/kimai/bin/console kimai:reload --env=prod Nun Verzeichnis Berechtigungen setzten, Dazu in den Container einloggen docker-compose exec kimai /bin/bash Nun ausführen cd /opt/kimai/var chown -R :www-data . chmod -R g+r . chmod -R g+rw /opt/kimai/var/ Nun Einstellungen in Kimai: Unter System -> Einstellungen Nun runter scrollen bis Invoice Dort Rechungsnummerformat Sprache und template für den Stundenzettel Rechung einstellen Einrichtung Invoice Bundle Beschreibung: nach dem das Plugin installiert. Das format eingerichtet ist. geht nun weiter Eigene Firmenvorlage einrichten: Unter Rechnungen -> Rechungsvorlagen -> Auf erstellen klicken Rechnung / Stundenzettel erstellen: Nun Auf Rechnungen -> Rechnung erstellen klicken und Zeitraum Kunde Projekt auswählen. Will man alle projekte, das Projekt wieder entfernen. Exportier nein und auf suchen klicken Nun erscheint eine Liste mit den gefunden Einträgen. Durch klick auf Speichern werden alle Eintrage auf eien Rechung / Leistungsnachweis gepackt. Möchte man das getrennt haben. Einfach nach mehren Datumsbereichen suchen und mehrere Rechungen abspeichern. Über die Buttons Vorschau kann man sich die Rechnung anschauen und speichern dann absenden. Nun kann Unter Rechnungen -> rechnungshistorie dier Stundenzettel downgeloaded werden Fertig