Installation via Docker
Beschreibung
Kimai via Docker mit https via Letsencrypt.
Installation
Vorbereitung
Als erstes erstellen wir unsere Verzeichnisse
mkdir -p /root/kimai/mariadb
mkdir -p /root/kimai/data
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
# Domain and email for Let's Encrypt
DOMAIN_NAME=ihredomain.de
LETSENCRYPT_EMAIL=ihre-email@beispiel.de
Docker-compose Datei erstellen
nano /root/kimai/docker-compose.yml
Inhalt
version: '3.8'
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:fpm-alpine-1.14-prod
restart: unless-stopped
environment:
- DATABASE_URL=mysql://${MYSQL_USER}:${MYSQL_PASSWORD}@mariadb/${MYSQL_DATABASE}
volumes:
- ${DATA_VOLUME_DIR}:/opt/kimai/var
webserver:
image: nginx:alpine
restart: unless-stopped
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ${DATA_VOLUME_DIR}:/opt/kimai/var
- ./certbot-www:/var/www/certbot
ports:
- "80:80"
- "443:443"
certbot:
image: certbot/certbot
restart: unless-stopped
volumes:
- ./certbot-etc:/etc/letsencrypt
- ./certbot-www:/var/www/certbot
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew --webroot --webroot-path=/var/www/certbot --email ${LETSENCRYPT_EMAIL} --agree-tos --no-eff-email --domain ${DOMAIN_NAME}; sleep 12h & wait $${!}; done;'"
volumes:
mariadb_data:
kimai_data:
certbot-etc:
certbot-www:
Nun das Init shell script erstellen was die cert Verzeichnisse und die nginx.conf erstellt.
nano /root/kimai/setup.sh
Inhalt
#!/bin/bash
# Laden der Umgebungsvariablen aus der .env-Datei
if [ -f .env ]; then
while IFS='=' read -r key value
do
if [[ ! $key =~ ^\# ]] && [[ -n $key ]]; then
export $(catkey=$value
fi
done < .env | xargs)
else
echo ".env-Datei nicht gefunden!"
exit 1
fi
# Überprüfen, ob DOMAIN_NAME gesetzt ist
if [ -z "$DOMAIN_NAME" ]; then
echo "DOMAIN_NAME ist in der .env-Datei nicht gesetzt!"
exit 1
fi
# Erstellen der benötigten Verzeichnisse
mkdir -p ./certbot-etc
mkdir -p ./certbot-www
# Erstellen einer Grundkonfiguration für nginx
cat << EOF > ./nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '\$remote_addr - \$remote_user [\$time_local] "\$request" '
'\$status \$body_bytes_sent "\$http_referer" '
'"\$http_user_agent" "\$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
# SSL Einstellungen
ssl_certificate /etc/letsencrypt/live/${DOMAIN_NAME}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/${DOMAIN_NAME}/privkey.pem;
# Weitere SSL-Konfigurationen hier hinzufügen
include /etc/nginx/conf.d/*.conf;
}
EOF
echo "Setup abgeschlossen. Bitte überprüfen und anpassen Sie die nginx.conf entsprechend."
Das script ausführbar machen
chmod +x /root/kimai/setup.sh
Docker installieren, env anpassen Webcheck und Container starten
apt install docker-compose
Nun die .env Datei wenn nicht schon geschenen, an die eigenen Bedüfnisse anpassen.
Dann das setup.sh script ausführen.
bevor das script ausgeführt wird, sicher stellen das die ports 80 und 443 auch über die Domain auf den Server ereichbar sind.
hier ein kleines script das auf den port 80 lauscht um dies zu testen
nano /root/kimai/testeweb.sh
Inhalt
#!/bin/bash
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
Starten, kann mit strg+c wieder abgebrochen werden. Nun kann getestet werden ob Firewall/Portforwarding richtig funktionierne
Container Starten
Ins kimai Verzeichnis gehen
cd /root/kimai
Nun
docker-compose up
ausführen, dort gibts dann die consolen ausgabe.
Wenn alles läuft und initialisiert ist den Container mit
docker-compose down
wieder stoppen und dann als Daemon mit
docker-compose up -d
wieder starten