Introduce kimai service

This commit is contained in:
Curt Spark 2024-06-29 00:12:38 +01:00
parent 3341c22150
commit 18a2687322
7 changed files with 185 additions and 0 deletions

View File

@ -11,49 +11,65 @@ ListenPort = {{ proxy_server_vpn_port }}
[Peer] [Peer]
PublicKey = {{ mail_service_pubkey }} PublicKey = {{ mail_service_pubkey }}
AllowedIPs = 10.0.0.2/32 AllowedIPs = 10.0.0.2/32
PersistentKeepalive = 25
# Git Service # Git Service
[Peer] [Peer]
PublicKey = {{ git_service_pubkey }} PublicKey = {{ git_service_pubkey }}
AllowedIPs = 10.0.0.3/32 AllowedIPs = 10.0.0.3/32
PersistentKeepalive = 25
# Invidious Service # Invidious Service
[Peer] [Peer]
PublicKey = {{ invidious_service_pubkey }} PublicKey = {{ invidious_service_pubkey }}
AllowedIPs = 10.0.0.3/32 AllowedIPs = 10.0.0.3/32
PersistentKeepalive = 25
# Searxng Service # Searxng Service
[Peer] [Peer]
PublicKey = {{ searxng_service_pubkey }} PublicKey = {{ searxng_service_pubkey }}
AllowedIPs = 10.0.0.4/32 AllowedIPs = 10.0.0.4/32
PersistentKeepalive = 25
# Nextcloud Service # Nextcloud Service
[Peer] [Peer]
PublicKey = {{ nextcloud_service_pubkey }} PublicKey = {{ nextcloud_service_pubkey }}
AllowedIPs = 10.0.0.5/32 AllowedIPs = 10.0.0.5/32
PersistentKeepalive = 25
# Chat Service # Chat Service
[Peer] [Peer]
PublicKey = {{ chat_service_pubkey }} PublicKey = {{ chat_service_pubkey }}
AllowedIPs = 10.0.0.6/32 AllowedIPs = 10.0.0.6/32
PersistentKeepalive = 25
# Minecraft Service # Minecraft Service
[Peer] [Peer]
PublicKey = {{ minecraft_service_pubkey }} PublicKey = {{ minecraft_service_pubkey }}
AllowedIPs = 10.0.0.7/32 AllowedIPs = 10.0.0.7/32
PersistentKeepalive = 25
# Kimai Service
[Peer]
PublicKey = {{ kimai_service_pubkey }}
AllowedIPs = 10.0.0.8/32
PersistentKeepalive = 25
# Connection to backend server for icinga2 # Connection to backend server for icinga2
[Peer] [Peer]
PublicKey = {{ icinga2_backend_pubkey }} PublicKey = {{ icinga2_backend_pubkey }}
AllowedIPs = 10.0.0.198/32 AllowedIPs = 10.0.0.198/32
PersistentKeepalive = 25
# Connection to backend server for cockpit # Connection to backend server for cockpit
[Peer] [Peer]
PublicKey = {{ cockpit_backend_pubkey }} PublicKey = {{ cockpit_backend_pubkey }}
AllowedIPs = 10.0.0.199/32 AllowedIPs = 10.0.0.199/32
PersistentKeepalive = 25
# User Key for Phone/Desktop/Laptop use # User Key for Phone/Desktop/Laptop use
[Peer] [Peer]
PublicKey = {{ user_pubkey }} PublicKey = {{ user_pubkey }}
AllowedIPs = 10.0.0.200/32 AllowedIPs = 10.0.0.200/32
PersistentKeepalive = 25

View File

@ -31,6 +31,7 @@ searxng_service_privkey: temp
nextcloud_service_privkey: temp nextcloud_service_privkey: temp
chat_service_privkey: temp chat_service_privkey: temp
minecraft_service_privkey: temp minecraft_service_privkey: temp
kimai_service_privkey: temp
icinga2_backend_privkey: temp icinga2_backend_privkey: temp
cockpit_backend_privkey: temp cockpit_backend_privkey: temp
user_privkey: temp user_privkey: temp
@ -43,6 +44,7 @@ searxng_service_pubkey: temp
nextcloud_service_pubkey: temp nextcloud_service_pubkey: temp
chat_service_pubkey: temp chat_service_pubkey: temp
minecraft_service_pubkey: temp minecraft_service_pubkey: temp
kimai_service_pubkey: temp
icinga2_backend_pubkey: temp icinga2_backend_pubkey: temp
cockpit_backend_pubkey: temp cockpit_backend_pubkey: temp
user_pubkey: temp user_pubkey: temp

View File

@ -0,0 +1,6 @@
[defaults]
inventory = ../../hosts
[privilege_escalation]
become_method=doas
become_ask_pass=True

View File

@ -0,0 +1,26 @@
- hosts: localhost
become: 'yes'
vars:
ansible_become_method: doas
tasks:
- name: Create necessary directories
ansible.builtin.file:
path: "{{ item }}"
owner: service_kimai
group: service_kimai
state: directory
loop:
- "{{ services_directory }}/service_kimai/kimai-data"
- "{{ services_directory }}/service_kimai/mysql-data"
- name: Copy docker compose config and other kimai files
ansible.builtin.template:
src: "{{ item }}"
dest: "{{ services_directory }}/service_kimai/{{ item }}"
owner: service_kimai
group: service_kimai
loop:
- docker-compose.yml
- name: Debug Finish message
debug:
msg: Ansible playbook has finished!

View File

@ -0,0 +1,82 @@
services:
# Gluetun is used to connect container to VPN
kimai-gluetun:
image: qmcgaw/gluetun
cap_add:
- NET_ADMIN
environment:
- VPN_SERVICE_PROVIDER=custom
- VPN_TYPE=wireguard
- VPN_ENDPOINT_IP={{ proxy_server_ip }}
- VPN_ENDPOINT_PORT={{ proxy_server_vpn_port }}
- WIREGUARD_PUBLIC_KEY={{ vpn_server_pubkey }}
- WIREGUARD_PRIVATE_KEY={{ kimai_service_privkey }}
- WIREGUARD_ADDRESSES=10.0.0.8/32
- FIREWALL_VPN_INPUT_PORTS=8001,3306
ports:
- "8001:8001"
# networks:
# kimai:
deploy:
resources:
limits:
cpus: '0.10'
memory: 512M
kimai:
image: kimai/kimai2:apache
network_mode: "service:kimai-gluetun"
environment:
- ADMINMAIL=admin@{{ domain_name }}
- ADMINPASS={{ service_kimai_admin_password }}
- "DATABASE_URL=mysql://kimaiuser:{{ service_kimai_mysql_password }}@127.0.0.1/kimai?charset=utf8mb4&serverVersion=8.3.0"
- TRUSTED_HOSTS=nginx,localhost,127.0.0.1
restart: always
volumes:
- ./kimai-data:/opt/kimai/var/data
deploy:
resources:
limits:
cpus: '0.25'
memory: 512M
depends_on:
- kimai-db
kimai-db:
image: mysql:8.4.0
network_mode: "service:kimai-gluetun"
environment:
- MYSQL_DATABASE=kimai
- MYSQL_USER=kimaiuser
- MYSQL_PASSWORD={{ service_kimai_mysql_password }}
- MYSQL_ROOT_PASSWORD={{ service_kimai_mysql_root_password }}
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
volumes:
- ./mysql-data:/var/lib/mysql
# networks:
# kimai:
# ipv4_address: 12.1.0.22
deploy:
resources:
limits:
cpus: '0.10'
memory: 512M
#networks:
# kimai:
# driver: bridge
# driver_opts:
# com.docker.network.bridge.name: kimai
# # com.docker.network.driver.enable_ip_masquerade: 0
# ipam:
# config:
# - subnet: 12.1.0.0/16
# # gateway: 11.5.0.1

View File

@ -0,0 +1,49 @@
# {{ ansible_managed }}
# Kimai Instance Proxy
server {
server_name kimai.{{ domain_name }} www.kimai.{{ domain_name }};
location / {
proxy_pass http://10.0.0.8:8001;
#proxy_set_header X-Forwarded-For $remote_addr;
#proxy_set_header Host $host; # so kimai knows domain
#proxy_http_version 1.1; # to keep alive
#proxy_set_header Connection ""; # to keep alive
include proxy_params;
}
client_max_body_size 512M;
listen [::]:443 ssl;
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/{{ domain_name }}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{{ domain_name }}/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
server {
if ($host = www.kimai.{{ domain_name }}) {
return 301 https://$host$request_uri;
}
if ($host = kimai.{{ domain_name }}) {
return 301 https://$host$request_uri;
}
listen 80;
listen [::]:80;
server_name kimai.{{ domain_name }} www.kimai.{{ domain_name }};
return 404;
}

View File

@ -0,0 +1,4 @@
# Example service secrets for kimai docker service, to be encrypted with ansible vault and called servicesecrets.enc
service_kimai_admin_password: ***
service_kimai_mysql_password: ***
service_kimai_mysql_root_password: ***