Kimai: Web­ba­sier­te Zeit­er­fas­sungs­an­wen­dung auf Debi­an 9 installieren

Frau - Computer - Tisch - Windows - Monitor - Kabel - Computer - PC Foto: Eine Frau, die einen Computer nutzt, Urheber: dts Nachrichtenagentur

Mit Kimai kann man eine web­ba­sier­te Zeit­er­fas­sungs­an­wen­dung ein­rich­ten. Wer sich Kimai unter Linux Debi­an 9 anschau­en möch­te, fin­det hier eine aus­führ­li­che Anlei­tung dazu.

Auf­grund strik­te­re Zeit­er­fas­sun­gen der Mit­ar­bei­ter dank neu­er Geset­ze ist es mitt­ler­wei­le not­wen­dig, dass man die Mit­ar­bei­ter und deren Arbeits­zei­ten akri­bisch erfasst. Mit Kimai (Kimai2) wird eine web­ba­sier­te Zeit­er­fas­sung ange­bo­ten, die sich durch­aus sehen las­sen kann.

Benö­tigt wird hier­bei auf jeden Fall ein Linux-Betriebs­sys­tem und wei­te­re Kom­po­nen­te, wie zum Bei­spiel Com­po­ser oder Docker. Ich selbst habe mich an die emp­foh­le­ne Instal­la­ti­ons­wei­se über Com­po­ser gehal­ten und erklä­re in die­sem Bei­trag, wie man es bei sich ein­fach und unkom­pli­ziert ein­rich­ten kann.

In unse­rem Fall gehen wir davon aus, dass man neben Debi­an 9 (Debi­an 4.9.189–3+deb9u2) auch Nginx als Web­ser­ver ver­wen­det. Da ich mich nicht mit Apa­che anfreun­den konn­te und auch nicht wer­de, ver­wen­de ich seit Anfang an Nginx.

Nach­dem man mit „apt-get update && apt-get upgrade && apt-get dist-upgrade” sicher­ge­stellt hat, dass man auf dem aktu­ells­ten Stand ist, muss zunächst Com­po­ser installieren.

Com­po­ser unter Debi­an 9 installieren:

  • apt-get install curl php-cli php-mbstring git unzip
  • cd ~
  • curl ‑sS https://getcomposer.org/installer ‑o composer-setup.php
  • sudo php composer-setup.php –install-dir=/usr/local/bin –file­na­me=com­po­ser

Hat man die oben genann­ten Befeh­le aus­ge­führt, kann mit dem Befehl „com­po­ser” über­prü­fen, ob es ord­nungs­ge­mäß instal­liert wur­de. Ist das der Fall, kann direkt los­le­gen und Kimai einrichten.

Kimai unter Debi­an 9 installieren:

Zunächst geht man über das Linux-Ter­mi­nal – bei­spiels­wei­se über PuT­TY oder KiT­TY – zu dem genann­ten Ord­ner, wo Kimai instal­liert wer­den soll. In mei­nem Fall ist das „/home/www/kimai.newsportal.koeln/”. Im Anschluss die unten genann­ten Befeh­le ausführen.

  • cd /home/www/
  • sudo ‑u www-data git clo­ne ‑b 1.6.2 –depth 1 https://github.com/kevinpapst/kimai2.git
  • mv kimai2 kimai.newsportal.koeln
  • cd kimai.newsportal.koeln/
  • sudo ‑u www-data com­po­ser install –no-dev –opti­mi­ze-auto­loa­der

Hat man zuerst die nöti­gen Datei­en über Git her­un­ter­ge­la­den und über Com­po­ser instal­liert, muss die neu erstell­te „.env”-Datei bear­bei­ten. In mei­nem Fall sieht sie so aus:

MAILER_FROM=kimai@newsportal.koeln
APP_ENV=prod
APP_SECRET=IRGENDWAS_HIER_EINTRAGEN
DATABASE_URL=mysql://db_user:db_passwort@127.0.0.1:3306/db_name
MAILER_URL=smtp://localhost:465?encryption=ssl&auth_mode=login&username=kimai@newsportal.koeln&password=HelloWorld
CORS_ALLOW_ORIGIN=^https?://localhost(:[0-9]+)?$

Bei „APP_SECRET” müsst ihr irgend­ei­ne zufäl­li­ge Zei­chen­rei­he ein­ge­ben. Ver­wen­det zum Bei­spiel ein Pass­wort­ge­ne­ra­tor mit Buch­sta­ben und Zah­len. Unter „DATABASE_URL” müsst ihr bei „db_user” euren Daten­bank­be­nut­zer ange­ben, sowie das dazu­ge­hö­ri­ge Pass­wort in „db_passwort”. Bei „db_name” gibt ihr logi­scher­wei­se an, wie die Daten­bank über­haupt heißt. Das müsst ihr vor­her logi­scher­wei­se dann noch ein­rich­ten – den pas­sen­den Daten­bank­zu­gang. Zum Schluss noch die Zugangs­da­ten eines E‑Mail-Post­fachs ange­ben, indem bei „user­na­me=” danach die E‑Mail-Adres­se ein­ge­ge­ben wird und bei „pass­word=” das ent­spre­chen­de Pass­wort dazu. Anschlie­ßend kann man fortfahren.

  • sudo ‑u www-data bin/console kimai:install ‑n
  • chown ‑R www-data:www-data *
  • sudo ‑u www-data bin/console kimai:create-user Rapha­el kimai@newsportal.koeln ROLE_SUPER_ADMIN

Damit habt ihr Kimai erfolg­reich instal­liert. Nun muss nur noch der Außen­zu­griff über den Web­ser­ver ein­ge­rich­tet werden.

Nginx unter Debi­an für Kimai einrichten:

Prin­zi­pi­ell könnt ihr mei­ne Nginx-Kon­fi­gu­ra­ti­on pro­blem­los über­neh­men – bis auf ein paar klei­ne Ände­run­gen wie Domain­na­me und ähn­li­che­res. Aber das funk­tio­niert nur, wenn man ein SSL-Zer­ti­fi­kat für die ent­spre­chen­de Domain vor­her erstellt bezie­hungs­wei­se ein­rich­tet. Außer­dem wird PHP-FPM vorausgesetzt.

server {
listen 80;
listen [::]:80;
server_name kimai.newsportal.koeln;
rewrite ^ https://$server_name$request_uri permanent;

add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "img-src https://kimai.newsportal.koeln/";
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name kimai.newsportal.koeln;

add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Content-Security-Policy "img-src https://kimai.newsportal.koeln/";

ssl on;

ssl_certificate /etc/letsencrypt/live/kimai.newsportal.koeln/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kimai.newsportal.koeln/privkey.pem;

ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;

ssl_dhparam /etc/nginx/ssl/dhparams.pem;

ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

resolver 8.8.8.8 8.8.4.4;
ssl_stapling on;
ssl_stapling_verify on;

add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload";

root /home/www/kimai.newsportal.koeln/public/;
access_log /var/log/nginx/access-kimai_newsportal_koeln.log;
error_log /var/log/nginx/error-kimai_newsportal_koeln.log;
index index.php;

location ~ /\.ht {
deny all;
}

location / {
try_files $uri /index.php$is_args$args;
}

location ~ ^/index\.php(/|$) {
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi.conf;
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/..:/tmp/";
internal;
}

location ~ \.php$ {
return 404;
} 
}

Zum Abschluss noch mit „ser­vice nginx rel­oad” die Nginx-Kon­fi­gu­ra­ti­on für Kimai laden las­sen und schon kann man – in mei­nem Fall – über kimai.newsportal.koeln die Benut­zer­ober­flä­che von Kimai abrufen.

In den wenigs­ten Fäl­len kann man eins-zu-eins ein­fach alles kopie­ren und aus­füh­ren bezie­hungs­wei­se abspei­chern. Ach­tet daher auf die kleins­ten Details, da die­se Anlei­tung sich aus­schließ­lich auf das News­por­tal Köln rich­tet. Eine Anpas­sung ist dem­nach logi­scher­wei­se von­nö­ten, sowie eini­ge Vor­aus­set­zung wie zum Bei­spiel der Nginx-Web­ser­ver oder PHP (7.4) FPM.

Anmer­kun­gen zum Bei­trag? Hin­weis an die Redak­ti­on sen­den.