feat: add Kimai (#1390)
* feat: add Kimai * fix: address code review comments * fix: adjust hardcoded app port
This commit is contained in:
parent
9512252fb7
commit
756a752eee
|
@ -70,6 +70,7 @@ This is the official repository for the Tipi App Store. It contains all the apps
|
|||
- [Kapowarr](https://github.com/Casvt/Kapowarr) - Kapowarr is a software to build and manage a comic book library, fitting in the \*arr suite of software.
|
||||
- [Kasm Workspaces](https://github.com/kasmtech) - Kasm Workspaces is a docker container streaming platform for delivering browser-based access to desktops, applications, and web services
|
||||
- [Kavita](https://github.com/Kareadita/Kavita) - Kavita is a fast, feature rich, cross platform reading server
|
||||
- [Kimai](https://github.com/kimai/kimai) - Open source time-tracker
|
||||
- [Libreddit](https://github.com/spikecodes/libreddit) - Private front-end for Reddit
|
||||
- [LibrePhotos](https://github.com/LibrePhotos/librephotos) - Complete photo management service
|
||||
- [LibreTranslate](https://github.com/LibreTranslate/LibreTranslate) - Free and Open Source Machine Translation API. 100% self-hosted, offline capable and easy to setup
|
||||
|
|
45
apps/kimai/config.json
Normal file
45
apps/kimai/config.json
Normal file
|
@ -0,0 +1,45 @@
|
|||
{
|
||||
"name": "Kimai",
|
||||
"available": true,
|
||||
"port": 8003,
|
||||
"exposable": true,
|
||||
"id": "kimai",
|
||||
"description": "Kimai is a professional grade time-tracking application, free and open-source. It handles use-cases of freelancers as well as companies with dozens or hundreds of users.",
|
||||
"tipi_version": 1,
|
||||
"version": "fpm-2.1.0-prod",
|
||||
"categories": ["utilities"],
|
||||
"short_desc": "Open source time-tracker",
|
||||
"author": "Kevin Papst",
|
||||
"source": "https://github.com/kimai/kimai",
|
||||
"website": "https://www.kimai.org",
|
||||
"form_fields": [
|
||||
{
|
||||
"type": "random",
|
||||
"label": "KIMAI_DATABASE_ROOT_PASSWORD",
|
||||
"min": 32,
|
||||
"env_variable": "KIMAI_DATABASE_ROOT_PASSWORD"
|
||||
},
|
||||
{
|
||||
"type": "random",
|
||||
"label": "KIMAI_DATABASE_PASSWORD",
|
||||
"min": 32,
|
||||
"env_variable": "KIMAI_DATABASE_PASSWORD"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"label": "Admin email",
|
||||
"max": 254,
|
||||
"min": 3,
|
||||
"required": true,
|
||||
"env_variable": "KIMAI_ADMINMAIL"
|
||||
},
|
||||
{
|
||||
"type": "password",
|
||||
"label": "Admin password",
|
||||
"max": 128,
|
||||
"min": 10,
|
||||
"required": true,
|
||||
"env_variable": "KIMAI_ADMINPASS"
|
||||
}
|
||||
]
|
||||
}
|
86
apps/kimai/docker-compose.yml
Normal file
86
apps/kimai/docker-compose.yml
Normal file
|
@ -0,0 +1,86 @@
|
|||
# Adapted from https://github.com/tobybatch/kimai2/blob/799a534b8d93d18a2d10573457936a31052ce8e0/compose/docker-compose.fpm.prod.yml
|
||||
|
||||
version: "3.5"
|
||||
|
||||
services:
|
||||
nginx:
|
||||
container_name: kimai-proxy
|
||||
image: tobybatch/nginx-fpm-reverse-proxy:latest
|
||||
ports:
|
||||
- ${APP_PORT}:80
|
||||
volumes:
|
||||
- ${APP_DATA_DIR}/data/public:/opt/kimai/public:ro
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- kimai
|
||||
healthcheck:
|
||||
test: wget --spider http://kimai-proxy/health || exit 1
|
||||
interval: 20s
|
||||
start_period: 10s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
networks:
|
||||
- tipi_main_network
|
||||
labels:
|
||||
# Main
|
||||
traefik.enable: true
|
||||
traefik.http.middlewares.kimai-proxy-web-redirect.redirectscheme.scheme: https
|
||||
traefik.http.services.kimai-proxy.loadbalancer.server.port: 80
|
||||
# Web
|
||||
traefik.http.routers.kimai-proxy-insecure.rule: Host(`${APP_DOMAIN}`)
|
||||
traefik.http.routers.kimai-proxy-insecure.entrypoints: web
|
||||
traefik.http.routers.kimai-proxy-insecure.service: kimai-proxy
|
||||
traefik.http.routers.kimai-proxy-insecure.middlewares: kimai-proxy-web-redirect
|
||||
# Websecure
|
||||
traefik.http.routers.kimai-proxy.rule: Host(`${APP_DOMAIN}`)
|
||||
traefik.http.routers.kimai-proxy.entrypoints: websecure
|
||||
traefik.http.routers.kimai-proxy.service: kimai-proxy
|
||||
traefik.http.routers.kimai-proxy.tls.certresolver: myresolver
|
||||
# Local domain
|
||||
traefik.http.routers.kimai-proxy-local-insecure.rule: Host(`kimai.${LOCAL_DOMAIN}`)
|
||||
traefik.http.routers.kimai-proxy-local-insecure.entrypoints: web
|
||||
traefik.http.routers.kimai-proxy-local-insecure.service: kimai-proxy
|
||||
traefik.http.routers.kimai-proxy-local-insecure.middlewares: kimai-proxy-web-redirect
|
||||
# Local domain secure
|
||||
traefik.http.routers.kimai-proxy-local.rule: Host(`kimai-proxy.${LOCAL_DOMAIN}`)
|
||||
traefik.http.routers.kimai-proxy-local.entrypoints: websecure
|
||||
traefik.http.routers.kimai-proxy-local.service: kimai-proxy
|
||||
traefik.http.routers.kimai-proxy-local.tls: true
|
||||
|
||||
kimai:
|
||||
container_name: kimai
|
||||
image: kimai/kimai2:fpm-2.1.0-prod
|
||||
environment:
|
||||
- ADMINMAIL=${KIMAI_ADMINMAIL}
|
||||
- ADMINPASS=${KIMAI_ADMINPASS}
|
||||
- "DATABASE_URL=mysql://kimai:${KIMAI_DATABASE_PASSWORD}@kimai-sqldb/kimai?charset=utf8&serverVersion=5.7"
|
||||
- TRUSTED_HOSTS=kimai-proxy,localhost,127.0.0.1
|
||||
volumes:
|
||||
- ${APP_DATA_DIR}/data/public:/opt/kimai/public
|
||||
- ${APP_DATA_DIR}/data/var:/opt/kimai/var
|
||||
# - ./ldap.conf:/etc/openldap/ldap.conf:z
|
||||
# - ./ROOT-CA.pem:/etc/ssl/certs/ROOT-CA.pem:z
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- tipi_main_network
|
||||
|
||||
sqldb:
|
||||
container_name: kimai-sqldb
|
||||
image: mysql:5.7
|
||||
environment:
|
||||
- MYSQL_DATABASE=kimai
|
||||
- MYSQL_USER=kimai
|
||||
- MYSQL_PASSWORD=${KIMAI_DATABASE_PASSWORD}
|
||||
- MYSQL_ROOT_PASSWORD=${KIMAI_DATABASE_ROOT_PASSWORD}
|
||||
volumes:
|
||||
- ${APP_DATA_DIR}/data/mysql:/var/lib/mysql
|
||||
command: --default-storage-engine innodb
|
||||
restart: unless-stopped
|
||||
healthcheck:
|
||||
test: mysqladmin -p$$MYSQL_ROOT_PASSWORD ping -h localhost
|
||||
interval: 20s
|
||||
start_period: 10s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
networks:
|
||||
- tipi_main_network
|
8
apps/kimai/metadata/description.md
Normal file
8
apps/kimai/metadata/description.md
Normal file
|
@ -0,0 +1,8 @@
|
|||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/kimai/images/ceed673becba2526f1055552ca7c255374ca5bf8/repository-header.png" alt="Kimai logo">
|
||||
</p>
|
||||
|
||||
Kimai is a professional grade time-tracking application, free and open-source. It handles use-cases of freelancers as well as companies with dozens or hundreds of users. Kimai was build to track your project times and ships with many advanced features, including but not limited to:
|
||||
|
||||
JSON API, invoicing, data exports, multi-timer and punch-in punch-out mode, tagging, multi-user - multi-timezones - multi-language ([over 30 translations existing](https://hosted.weblate.org/projects/kimai/)!), authentication via SAML/LDAP/Database, two-factor authentication (2FA) with TOTP, customizable role and team permissions, responsive design, user/customer/project specific rates, advanced search & filtering, money and time budgets, advanced reporting, support for [plugins](https://www.kimai.org/store/) and so much more.
|
||||
|
BIN
apps/kimai/metadata/logo.jpg
Normal file
BIN
apps/kimai/metadata/logo.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 41 KiB |
Loading…
Reference in New Issue
Block a user