commit de4ae83476224efd7dde9a661fdc012525306d98 Author: Michael Seidel Date: Sat Mar 28 10:48:09 2026 +0100 Initial backup import diff --git a/etc/fstab b/etc/fstab new file mode 100644 index 0000000..fa74272 --- /dev/null +++ b/etc/fstab @@ -0,0 +1,17 @@ +# /etc/fstab: static file system information. +# +# Use 'blkid' to print the universally unique identifier for a +# device; this may be used with UUID= as a more robust way to name devices +# that works even if disks are added and removed. See fstab(5). +# +# systemd generates mount units based on this file, see systemd.mount(5). +# Please run 'systemctl daemon-reload' after making changes here. +# +# +# / was on /dev/sda2 during installation +UUID=9c56b6fd-2a60-4480-b82f-240da2e66acc / ext4 errors=remount-ro 0 1 +# /boot/efi was on /dev/sda1 during installation +UUID=C863-7654 /boot/efi vfat umask=0077 0 1 +# swap was on /dev/sda3 during installation +UUID=da855cd2-3dc7-490d-a9c9-9c6b473b5e8b none swap sw 0 0 +/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 diff --git a/etc/hosts b/etc/hosts new file mode 100644 index 0000000..d863b49 --- /dev/null +++ b/etc/hosts @@ -0,0 +1,7 @@ +127.0.0.1 localhost +127.0.1.1 debian + +# The following lines are desirable for IPv6 capable hosts +::1 localhost ip6-localhost ip6-loopback +ff02::1 ip6-allnodes +ff02::2 ip6-allrouters diff --git a/etc/network/interfaces b/etc/network/interfaces new file mode 100644 index 0000000..33b2ae6 --- /dev/null +++ b/etc/network/interfaces @@ -0,0 +1,31 @@ +# This file describes the network interfaces available on your system +# and how to activate them. For more information, see interfaces(5). + +#/etc/network/interfaces + +source /etc/network/interfaces.d/* + +# The loopback network interface +auto lo +iface lo inet loopback + +# The primary network interface +auto ens18 +iface ens18 inet static + address 10.9.0.10 + netmask 255.255.255.0 + gateway 10.9.0.160 + + +# IP 2 +auto ens18:0 +iface ens18:0 inet static + address 10.9.0.11 + netmask 255.255.255.0 + +# IP 3 +auto ens18:1 +iface ens18:1 inet static + address 10.0.0.12 + netmask 255.255.255.0 + diff --git a/etc/samba/smb.conf b/etc/samba/smb.conf new file mode 100644 index 0000000..86923e4 --- /dev/null +++ b/etc/samba/smb.conf @@ -0,0 +1,45 @@ +[global] + workgroup = WORKGROUP + log file = /var/log/samba/log.%m + max log size = 1000 + logging = file + panic action = /usr/share/samba/panic-action %d + server role = standalone server + obey pam restrictions = yes + unix password sync = yes + passwd program = /usr/bin/passwd %u + passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . + pam password change = yes + map to guest = bad user + usershare allow guests = yes +[homes] + comment = Home Directories + browseable = no + read only = yes + create mask = 0700 + directory mask = 0700 + valid users = %S +[printers] + comment = All Printers + browseable = no + path = /var/tmp + printable = yes + guest ok = no + read only = yes + create mask = 0700 +[print$] + comment = Printer Drivers + path = /var/lib/samba/printers + browseable = yes + read only = yes + guest ok = no + +[micha] + path = /srv/nextcloud-data-local/nextcloud/data/097A228A-E85A-426F-9C54-8FED13177EC5/files + browseable = yes + read only = no + valid users = micha + force user = www-data + force group = www-data + create mask = 0660 + directory mask = 0770 diff --git a/etc/systemd/system/chronyd.service b/etc/systemd/system/chronyd.service new file mode 120000 index 0000000..2156f44 --- /dev/null +++ b/etc/systemd/system/chronyd.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/chrony.service \ No newline at end of file diff --git a/etc/systemd/system/cloud-config.target.wants/cloud-init-hotplugd.socket b/etc/systemd/system/cloud-config.target.wants/cloud-init-hotplugd.socket new file mode 120000 index 0000000..96dc6d6 --- /dev/null +++ b/etc/systemd/system/cloud-config.target.wants/cloud-init-hotplugd.socket @@ -0,0 +1 @@ +/usr/lib/systemd/system/cloud-init-hotplugd.socket \ No newline at end of file diff --git a/etc/systemd/system/cloud-init.target.wants/cloud-config.service b/etc/systemd/system/cloud-init.target.wants/cloud-config.service new file mode 120000 index 0000000..ebc50f0 --- /dev/null +++ b/etc/systemd/system/cloud-init.target.wants/cloud-config.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/cloud-config.service \ No newline at end of file diff --git a/etc/systemd/system/cloud-init.target.wants/cloud-final.service b/etc/systemd/system/cloud-init.target.wants/cloud-final.service new file mode 120000 index 0000000..80fa3c8 --- /dev/null +++ b/etc/systemd/system/cloud-init.target.wants/cloud-final.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/cloud-final.service \ No newline at end of file diff --git a/etc/systemd/system/cloud-init.target.wants/cloud-init-local.service b/etc/systemd/system/cloud-init.target.wants/cloud-init-local.service new file mode 120000 index 0000000..dd8e9f1 --- /dev/null +++ b/etc/systemd/system/cloud-init.target.wants/cloud-init-local.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/cloud-init-local.service \ No newline at end of file diff --git a/etc/systemd/system/cloud-init.target.wants/cloud-init-main.service b/etc/systemd/system/cloud-init.target.wants/cloud-init-main.service new file mode 120000 index 0000000..875ff73 --- /dev/null +++ b/etc/systemd/system/cloud-init.target.wants/cloud-init-main.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/cloud-init-main.service \ No newline at end of file diff --git a/etc/systemd/system/cloud-init.target.wants/cloud-init-network.service b/etc/systemd/system/cloud-init.target.wants/cloud-init-network.service new file mode 120000 index 0000000..ae77734 --- /dev/null +++ b/etc/systemd/system/cloud-init.target.wants/cloud-init-network.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/cloud-init-network.service \ No newline at end of file diff --git a/etc/systemd/system/dbus-org.freedesktop.timesync1.service b/etc/systemd/system/dbus-org.freedesktop.timesync1.service new file mode 120000 index 0000000..cd00411 --- /dev/null +++ b/etc/systemd/system/dbus-org.freedesktop.timesync1.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-timesyncd.service \ No newline at end of file diff --git a/etc/systemd/system/default.target.wants/wtmpdb-update-boot.service b/etc/systemd/system/default.target.wants/wtmpdb-update-boot.service new file mode 120000 index 0000000..6cf726e --- /dev/null +++ b/etc/systemd/system/default.target.wants/wtmpdb-update-boot.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/wtmpdb-update-boot.service \ No newline at end of file diff --git a/etc/systemd/system/getty.target.wants/getty@tty1.service b/etc/systemd/system/getty.target.wants/getty@tty1.service new file mode 120000 index 0000000..7bfe080 --- /dev/null +++ b/etc/systemd/system/getty.target.wants/getty@tty1.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/getty@.service \ No newline at end of file diff --git a/etc/systemd/system/hibernate.target.wants/grub-common.service b/etc/systemd/system/hibernate.target.wants/grub-common.service new file mode 120000 index 0000000..a655fbb --- /dev/null +++ b/etc/systemd/system/hibernate.target.wants/grub-common.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/grub-common.service \ No newline at end of file diff --git a/etc/systemd/system/hybrid-sleep.target.wants/grub-common.service b/etc/systemd/system/hybrid-sleep.target.wants/grub-common.service new file mode 120000 index 0000000..a655fbb --- /dev/null +++ b/etc/systemd/system/hybrid-sleep.target.wants/grub-common.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/grub-common.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/chrony.service b/etc/systemd/system/multi-user.target.wants/chrony.service new file mode 120000 index 0000000..2156f44 --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/chrony.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/chrony.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/console-setup.service b/etc/systemd/system/multi-user.target.wants/console-setup.service new file mode 120000 index 0000000..b7959d0 --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/console-setup.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/console-setup.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/containerd.service b/etc/systemd/system/multi-user.target.wants/containerd.service new file mode 120000 index 0000000..969ffbc --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/containerd.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/containerd.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/cron.service b/etc/systemd/system/multi-user.target.wants/cron.service new file mode 120000 index 0000000..06cfbda --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/cron.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/cron.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/docker.service b/etc/systemd/system/multi-user.target.wants/docker.service new file mode 120000 index 0000000..dd74917 --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/docker.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/docker.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/e2scrub_reap.service b/etc/systemd/system/multi-user.target.wants/e2scrub_reap.service new file mode 120000 index 0000000..5be3ee0 --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/e2scrub_reap.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/e2scrub_reap.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/fail2ban.service b/etc/systemd/system/multi-user.target.wants/fail2ban.service new file mode 120000 index 0000000..c1d3169 --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/fail2ban.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/fail2ban.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/grub-common.service b/etc/systemd/system/multi-user.target.wants/grub-common.service new file mode 120000 index 0000000..a655fbb --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/grub-common.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/grub-common.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/networking.service b/etc/systemd/system/multi-user.target.wants/networking.service new file mode 120000 index 0000000..dbf81ff --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/networking.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/networking.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/nmbd.service b/etc/systemd/system/multi-user.target.wants/nmbd.service new file mode 120000 index 0000000..58c0d85 --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/nmbd.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/nmbd.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/remote-fs.target b/etc/systemd/system/multi-user.target.wants/remote-fs.target new file mode 120000 index 0000000..2bc8b1c --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/remote-fs.target @@ -0,0 +1 @@ +/usr/lib/systemd/system/remote-fs.target \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/rsyslog.service b/etc/systemd/system/multi-user.target.wants/rsyslog.service new file mode 120000 index 0000000..f2d9aa9 --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/rsyslog.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/rsyslog.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/samba-ad-dc.service b/etc/systemd/system/multi-user.target.wants/samba-ad-dc.service new file mode 120000 index 0000000..335955f --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/samba-ad-dc.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/samba-ad-dc.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/smbd.service b/etc/systemd/system/multi-user.target.wants/smbd.service new file mode 120000 index 0000000..5de284e --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/smbd.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/smbd.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/ssh.service b/etc/systemd/system/multi-user.target.wants/ssh.service new file mode 120000 index 0000000..9535998 --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/ssh.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/ssh.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/start-containers.service b/etc/systemd/system/multi-user.target.wants/start-containers.service new file mode 120000 index 0000000..efdfaff --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/start-containers.service @@ -0,0 +1 @@ +/etc/systemd/system/start-containers.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/unattended-upgrades.service b/etc/systemd/system/multi-user.target.wants/unattended-upgrades.service new file mode 120000 index 0000000..8c8c89b --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/unattended-upgrades.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/unattended-upgrades.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/winbind.service b/etc/systemd/system/multi-user.target.wants/winbind.service new file mode 120000 index 0000000..7d8257c --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/winbind.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/winbind.service \ No newline at end of file diff --git a/etc/systemd/system/multi-user.target.wants/zfs.target b/etc/systemd/system/multi-user.target.wants/zfs.target new file mode 120000 index 0000000..1969637 --- /dev/null +++ b/etc/systemd/system/multi-user.target.wants/zfs.target @@ -0,0 +1 @@ +/usr/lib/systemd/system/zfs.target \ No newline at end of file diff --git a/etc/systemd/system/network-online.target.wants/networking.service b/etc/systemd/system/network-online.target.wants/networking.service new file mode 120000 index 0000000..dbf81ff --- /dev/null +++ b/etc/systemd/system/network-online.target.wants/networking.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/networking.service \ No newline at end of file diff --git a/etc/systemd/system/nmb.service b/etc/systemd/system/nmb.service new file mode 120000 index 0000000..58c0d85 --- /dev/null +++ b/etc/systemd/system/nmb.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/nmbd.service \ No newline at end of file diff --git a/etc/systemd/system/samba.service b/etc/systemd/system/samba.service new file mode 120000 index 0000000..335955f --- /dev/null +++ b/etc/systemd/system/samba.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/samba-ad-dc.service \ No newline at end of file diff --git a/etc/systemd/system/smb.service b/etc/systemd/system/smb.service new file mode 120000 index 0000000..5de284e --- /dev/null +++ b/etc/systemd/system/smb.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/smbd.service \ No newline at end of file diff --git a/etc/systemd/system/sockets.target.wants/docker.socket b/etc/systemd/system/sockets.target.wants/docker.socket new file mode 120000 index 0000000..746690c --- /dev/null +++ b/etc/systemd/system/sockets.target.wants/docker.socket @@ -0,0 +1 @@ +/usr/lib/systemd/system/docker.socket \ No newline at end of file diff --git a/etc/systemd/system/ssh.service.wants/sshd-keygen.service b/etc/systemd/system/ssh.service.wants/sshd-keygen.service new file mode 120000 index 0000000..feffd4f --- /dev/null +++ b/etc/systemd/system/ssh.service.wants/sshd-keygen.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/sshd-keygen.service \ No newline at end of file diff --git a/etc/systemd/system/ssh.socket.wants/sshd-keygen.service b/etc/systemd/system/ssh.socket.wants/sshd-keygen.service new file mode 120000 index 0000000..feffd4f --- /dev/null +++ b/etc/systemd/system/ssh.socket.wants/sshd-keygen.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/sshd-keygen.service \ No newline at end of file diff --git a/etc/systemd/system/sshd.service b/etc/systemd/system/sshd.service new file mode 120000 index 0000000..9535998 --- /dev/null +++ b/etc/systemd/system/sshd.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/ssh.service \ No newline at end of file diff --git a/etc/systemd/system/sshd.service.wants/sshd-keygen.service b/etc/systemd/system/sshd.service.wants/sshd-keygen.service new file mode 120000 index 0000000..feffd4f --- /dev/null +++ b/etc/systemd/system/sshd.service.wants/sshd-keygen.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/sshd-keygen.service \ No newline at end of file diff --git a/etc/systemd/system/sshd@.service.wants/sshd-keygen.service b/etc/systemd/system/sshd@.service.wants/sshd-keygen.service new file mode 120000 index 0000000..feffd4f --- /dev/null +++ b/etc/systemd/system/sshd@.service.wants/sshd-keygen.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/sshd-keygen.service \ No newline at end of file diff --git a/etc/systemd/system/start-containers.service b/etc/systemd/system/start-containers.service new file mode 100755 index 0000000..595ea51 --- /dev/null +++ b/etc/systemd/system/start-containers.service @@ -0,0 +1,14 @@ +#/etc/systemd/system/start-containers.service + +[Unit] +Description=Update and start containers after Docker starts +Wants=network-online.target +After=docker.service network-online.target + +[Service] +Type=oneshot +ExecStart=/root/docker/start.sh +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target diff --git a/etc/systemd/system/suspend-then-hibernate.target.wants/grub-common.service b/etc/systemd/system/suspend-then-hibernate.target.wants/grub-common.service new file mode 120000 index 0000000..a655fbb --- /dev/null +++ b/etc/systemd/system/suspend-then-hibernate.target.wants/grub-common.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/grub-common.service \ No newline at end of file diff --git a/etc/systemd/system/suspend.target.wants/grub-common.service b/etc/systemd/system/suspend.target.wants/grub-common.service new file mode 120000 index 0000000..a655fbb --- /dev/null +++ b/etc/systemd/system/suspend.target.wants/grub-common.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/grub-common.service \ No newline at end of file diff --git a/etc/systemd/system/sysinit.target.wants/apparmor.service b/etc/systemd/system/sysinit.target.wants/apparmor.service new file mode 120000 index 0000000..f9a498e --- /dev/null +++ b/etc/systemd/system/sysinit.target.wants/apparmor.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/apparmor.service \ No newline at end of file diff --git a/etc/systemd/system/sysinit.target.wants/keyboard-setup.service b/etc/systemd/system/sysinit.target.wants/keyboard-setup.service new file mode 120000 index 0000000..312d354 --- /dev/null +++ b/etc/systemd/system/sysinit.target.wants/keyboard-setup.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/keyboard-setup.service \ No newline at end of file diff --git a/etc/systemd/system/sysinit.target.wants/resolvconf.service b/etc/systemd/system/sysinit.target.wants/resolvconf.service new file mode 120000 index 0000000..4321852 --- /dev/null +++ b/etc/systemd/system/sysinit.target.wants/resolvconf.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/resolvconf.service \ No newline at end of file diff --git a/etc/systemd/system/sysinit.target.wants/systemd-pstore.service b/etc/systemd/system/sysinit.target.wants/systemd-pstore.service new file mode 120000 index 0000000..3e9b562 --- /dev/null +++ b/etc/systemd/system/sysinit.target.wants/systemd-pstore.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-pstore.service \ No newline at end of file diff --git a/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service b/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service new file mode 120000 index 0000000..cd00411 --- /dev/null +++ b/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-timesyncd.service \ No newline at end of file diff --git a/etc/systemd/system/syslog.service b/etc/systemd/system/syslog.service new file mode 120000 index 0000000..f2d9aa9 --- /dev/null +++ b/etc/systemd/system/syslog.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/rsyslog.service \ No newline at end of file diff --git a/etc/systemd/system/systemd-resolved.service.wants/resolvconf-pull-resolved.path b/etc/systemd/system/systemd-resolved.service.wants/resolvconf-pull-resolved.path new file mode 120000 index 0000000..e9b4a62 --- /dev/null +++ b/etc/systemd/system/systemd-resolved.service.wants/resolvconf-pull-resolved.path @@ -0,0 +1 @@ +/usr/lib/systemd/system/resolvconf-pull-resolved.path \ No newline at end of file diff --git a/etc/systemd/system/systemd-resolved.service.wants/resolvconf-pull-resolved.service b/etc/systemd/system/systemd-resolved.service.wants/resolvconf-pull-resolved.service new file mode 120000 index 0000000..d897fbb --- /dev/null +++ b/etc/systemd/system/systemd-resolved.service.wants/resolvconf-pull-resolved.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/resolvconf-pull-resolved.service \ No newline at end of file diff --git a/etc/systemd/system/timers.target.wants/apt-daily-upgrade.timer b/etc/systemd/system/timers.target.wants/apt-daily-upgrade.timer new file mode 120000 index 0000000..ae3ad57 --- /dev/null +++ b/etc/systemd/system/timers.target.wants/apt-daily-upgrade.timer @@ -0,0 +1 @@ +/lib/systemd/system/apt-daily-upgrade.timer \ No newline at end of file diff --git a/etc/systemd/system/timers.target.wants/apt-daily.timer b/etc/systemd/system/timers.target.wants/apt-daily.timer new file mode 120000 index 0000000..0612ca7 --- /dev/null +++ b/etc/systemd/system/timers.target.wants/apt-daily.timer @@ -0,0 +1 @@ +/lib/systemd/system/apt-daily.timer \ No newline at end of file diff --git a/etc/systemd/system/timers.target.wants/dpkg-db-backup.timer b/etc/systemd/system/timers.target.wants/dpkg-db-backup.timer new file mode 120000 index 0000000..12072e6 --- /dev/null +++ b/etc/systemd/system/timers.target.wants/dpkg-db-backup.timer @@ -0,0 +1 @@ +/lib/systemd/system/dpkg-db-backup.timer \ No newline at end of file diff --git a/etc/systemd/system/timers.target.wants/e2scrub_all.timer b/etc/systemd/system/timers.target.wants/e2scrub_all.timer new file mode 120000 index 0000000..30881ac --- /dev/null +++ b/etc/systemd/system/timers.target.wants/e2scrub_all.timer @@ -0,0 +1 @@ +/usr/lib/systemd/system/e2scrub_all.timer \ No newline at end of file diff --git a/etc/systemd/system/timers.target.wants/fstrim.timer b/etc/systemd/system/timers.target.wants/fstrim.timer new file mode 120000 index 0000000..2ed9fe6 --- /dev/null +++ b/etc/systemd/system/timers.target.wants/fstrim.timer @@ -0,0 +1 @@ +/lib/systemd/system/fstrim.timer \ No newline at end of file diff --git a/etc/systemd/system/timers.target.wants/logrotate.timer b/etc/systemd/system/timers.target.wants/logrotate.timer new file mode 120000 index 0000000..3bd6b36 --- /dev/null +++ b/etc/systemd/system/timers.target.wants/logrotate.timer @@ -0,0 +1 @@ +/usr/lib/systemd/system/logrotate.timer \ No newline at end of file diff --git a/etc/systemd/system/timers.target.wants/man-db.timer b/etc/systemd/system/timers.target.wants/man-db.timer new file mode 120000 index 0000000..d6b8a6e --- /dev/null +++ b/etc/systemd/system/timers.target.wants/man-db.timer @@ -0,0 +1 @@ +/usr/lib/systemd/system/man-db.timer \ No newline at end of file diff --git a/etc/systemd/system/zed.service b/etc/systemd/system/zed.service new file mode 120000 index 0000000..304d426 --- /dev/null +++ b/etc/systemd/system/zed.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/zfs-zed.service \ No newline at end of file diff --git a/etc/systemd/system/zfs-import.target.wants/zfs-import-cache.service b/etc/systemd/system/zfs-import.target.wants/zfs-import-cache.service new file mode 120000 index 0000000..4e5d50a --- /dev/null +++ b/etc/systemd/system/zfs-import.target.wants/zfs-import-cache.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/zfs-import-cache.service \ No newline at end of file diff --git a/etc/systemd/system/zfs-mount.service.wants/zfs-load-module.service b/etc/systemd/system/zfs-mount.service.wants/zfs-load-module.service new file mode 120000 index 0000000..ae92181 --- /dev/null +++ b/etc/systemd/system/zfs-mount.service.wants/zfs-load-module.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/zfs-load-module.service \ No newline at end of file diff --git a/etc/systemd/system/zfs-volumes.target.wants/zfs-volume-wait.service b/etc/systemd/system/zfs-volumes.target.wants/zfs-volume-wait.service new file mode 120000 index 0000000..2362893 --- /dev/null +++ b/etc/systemd/system/zfs-volumes.target.wants/zfs-volume-wait.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/zfs-volume-wait.service \ No newline at end of file diff --git a/etc/systemd/system/zfs.target.wants/zfs-import.target b/etc/systemd/system/zfs.target.wants/zfs-import.target new file mode 120000 index 0000000..849e85d --- /dev/null +++ b/etc/systemd/system/zfs.target.wants/zfs-import.target @@ -0,0 +1 @@ +/usr/lib/systemd/system/zfs-import.target \ No newline at end of file diff --git a/etc/systemd/system/zfs.target.wants/zfs-load-module.service b/etc/systemd/system/zfs.target.wants/zfs-load-module.service new file mode 120000 index 0000000..ae92181 --- /dev/null +++ b/etc/systemd/system/zfs.target.wants/zfs-load-module.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/zfs-load-module.service \ No newline at end of file diff --git a/etc/systemd/system/zfs.target.wants/zfs-mount.service b/etc/systemd/system/zfs.target.wants/zfs-mount.service new file mode 120000 index 0000000..0d15a72 --- /dev/null +++ b/etc/systemd/system/zfs.target.wants/zfs-mount.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/zfs-mount.service \ No newline at end of file diff --git a/etc/systemd/system/zfs.target.wants/zfs-share.service b/etc/systemd/system/zfs.target.wants/zfs-share.service new file mode 120000 index 0000000..a4e4b51 --- /dev/null +++ b/etc/systemd/system/zfs.target.wants/zfs-share.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/zfs-share.service \ No newline at end of file diff --git a/etc/systemd/system/zfs.target.wants/zfs-volumes.target b/etc/systemd/system/zfs.target.wants/zfs-volumes.target new file mode 120000 index 0000000..d225773 --- /dev/null +++ b/etc/systemd/system/zfs.target.wants/zfs-volumes.target @@ -0,0 +1 @@ +/usr/lib/systemd/system/zfs-volumes.target \ No newline at end of file diff --git a/etc/systemd/system/zfs.target.wants/zfs-zed.service b/etc/systemd/system/zfs.target.wants/zfs-zed.service new file mode 120000 index 0000000..304d426 --- /dev/null +++ b/etc/systemd/system/zfs.target.wants/zfs-zed.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/zfs-zed.service \ No newline at end of file diff --git a/root/docker/Webproxy/Data/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/1d335dddc645fdf5a3f24e2c5208e236/meta.json b/root/docker/Webproxy/Data/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/1d335dddc645fdf5a3f24e2c5208e236/meta.json new file mode 100644 index 0000000..f63819b --- /dev/null +++ b/root/docker/Webproxy/Data/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/1d335dddc645fdf5a3f24e2c5208e236/meta.json @@ -0,0 +1 @@ +{"creation_dt": "2026-03-01T09:32:06Z", "creation_host": "9ca7aa7ce7ab"} \ No newline at end of file diff --git a/root/docker/Webproxy/Data/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/1d335dddc645fdf5a3f24e2c5208e236/private_key.json b/root/docker/Webproxy/Data/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/1d335dddc645fdf5a3f24e2c5208e236/private_key.json new file mode 100644 index 0000000..7d1142f --- /dev/null +++ b/root/docker/Webproxy/Data/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/1d335dddc645fdf5a3f24e2c5208e236/private_key.json @@ -0,0 +1 @@ +{"n": "sERopFAfSHSwK4dpxrUW_H3QbKjsFPaDgg9ENG1b4eW6UjILnHZG0xDuxDwXyhNO0D-IWL2r3piFVhDl_oaPLceFmgWy0qGp0r3MrTetpS4EIBrLcDozXRm73wLPv21FD46GPA6Gu2DkuvVPemZa1KxT3IAfSG-j4tSNzryxJBTIYqIR2P8X99XCNLtLmqdBiKkNz1iyDhoGB3HKx8yQY3kRZOG90z7bYWxMaN5CQXGXPrZMcNHsLgCfuZhwbC2Wod8-B27lEZ3Pi3jCmqFqM7K0BriV9ifBVeflI8mXTfSCKe6kWAc7vFdKZIhC4hcKVOTfswVkZja8qk0DY6aFDw", "e": "AQAB", "d": "G8KmcxFgdQH_JDgF73PkP9bywk1Oz4KFKOf35vxUmHmrp9O4MyItMLrGCE-dVTIP9Tr-JGaCtif2701zys6Rw_rEpQHfOP0RkpSiuB2FqEMS4BXa6DPlsEahCzkXoA9QvB2bYDK-kFzN_gLkzhGqZ14rPdkJJsNLvE7o3BQZjKSEf81a8MmzTLM1GmOn9DnjfR63DuXQFXjXzdQ_gom7TP1PrzUxRcj5lT5OpuJKRhMcR6iT8aF7tMODr58azu2hWNnZbbbEyMoiG6ih7fHTB3HoNytCHTSBuXbt-_wV16KmxABfZr0NxFXpOC7c_i20I7ezwiMNybM4Er_aVYbB", "p": "2AX-qC5CdDcIYspGGy_vwC5qLD5ACExr3S-mEwO-AoR_yeU4JudqtsecBDQ5VsedfhTYjvghv-dsb6SVlAtEs-ep9yOPV4mdIbZaNN9f_joQeCrFXhp4wHRQChxdj4uFZknD0M4iuJt9NmRJbQV8yhmSdPTRwZflIDv89t-zke8", "q": "0OL7wSIz3wctIgquAF0MY_jCYeF3ayDX9laFkQ1gRw4AUILo5hmjsZsHE7EjcY5SeaZqrsk0hKNe2tPzpQDBn-AqDVL8q0zcRDW-T0E2PNRFGg8Mm4IATVpnZqZN8e1N0p09hE2ool0ZwWqMtJX4_UD30eKAmWDIcSIpYYQa3uE", "dp": "bjp43BZmwGhIdihip4LJYpYMhTDqeZGNRJsIshEpxp0Xm8zD304cbNHj8V04mOhYm7pFWoaQqhyLf1hLHvS1BNvEJaBWh0NoE4i59Nq6X73_I2InvcHiNcnkAZTBxPpbgntHWOemXe6xcKyxrtiq-XEdA2LdGVzJhK43gT1aoq8", "dq": "IFAclcHOuF-J0cxJInFCa2yd1TplmMLZ5Zd4zfl9vUAjOFEn6gBpXB4ZOCiczQIxK_RcaHFjmGkVUVCcThgR28N3fdwqje0z3bFaoTP7SemkTuWpE51GorCrciujvxrwgPYmAANrZMJ2K39qCL1yaOrV6zfYoOFh4G5ibF1dMsE", "qi": "Hel70qiVCLGOPQCnzq50bXRi6voLTW0Omhmc9BAY_iq9HTavEL27iDKj9pO3Ga5zAdbnrmVGahCu3P1BDB2nJoBRcfCGnrxd1cQgOaasWxseaoT178gz3rPg78CKr3iMwst_lAZiX3u5jWcbtBO9ZbJsvx8jdZgzvVBkNQmnlQw", "kty": "RSA"} \ No newline at end of file diff --git a/root/docker/Webproxy/Data/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/1d335dddc645fdf5a3f24e2c5208e236/regr.json b/root/docker/Webproxy/Data/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/1d335dddc645fdf5a3f24e2c5208e236/regr.json new file mode 100644 index 0000000..2919d0c --- /dev/null +++ b/root/docker/Webproxy/Data/certbot/conf/accounts/acme-v02.api.letsencrypt.org/directory/1d335dddc645fdf5a3f24e2c5208e236/regr.json @@ -0,0 +1 @@ +{"body": {}, "uri": "https://acme-v02.api.letsencrypt.org/acme/acct/3106776712"} \ No newline at end of file diff --git a/root/docker/Webproxy/Data/certbot/conf/renewal/service.focus-on-it.net.conf b/root/docker/Webproxy/Data/certbot/conf/renewal/service.focus-on-it.net.conf new file mode 100644 index 0000000..f66e411 --- /dev/null +++ b/root/docker/Webproxy/Data/certbot/conf/renewal/service.focus-on-it.net.conf @@ -0,0 +1,20 @@ +version = 5.3.1 +archive_dir = /etc/letsencrypt/archive/service.focus-on-it.net +cert = /etc/letsencrypt/live/service.focus-on-it.net/cert.pem +privkey = /etc/letsencrypt/live/service.focus-on-it.net/privkey.pem +chain = /etc/letsencrypt/live/service.focus-on-it.net/chain.pem +fullchain = /etc/letsencrypt/live/service.focus-on-it.net/fullchain.pem +[renewalparams] +account = 1d335dddc645fdf5a3f24e2c5208e236 +authenticator = webroot +webroot_path = /var/www/certbot, +server = https://acme-v02.api.letsencrypt.org/directory +key_type = ecdsa +[[webroot_map]] +service.focus-on-it.net = /var/www/certbot +dokuwiki.focus-on-it.net = /var/www/certbot +guacamole.focus-on-it.net = /var/www/certbot +drawio.focus-on-it.net = /var/www/certbot +nextcloud.focus-on-it.net = /var/www/certbot +[acme_renewal_info] +ari_retry_after = 2026-03-28T10:14:22 diff --git a/root/docker/Webproxy/Data/nginx/auth/.htpasswd b/root/docker/Webproxy/Data/nginx/auth/.htpasswd new file mode 100644 index 0000000..5155746 --- /dev/null +++ b/root/docker/Webproxy/Data/nginx/auth/.htpasswd @@ -0,0 +1,2 @@ +drawioUser:$2y$05$Ckt.CPSBzFPWkkRhCe3M7eYePnkPVfhfjDcjpw.1Knn7Amh0N.gxq + diff --git a/root/docker/Webproxy/Data/nginx/service.conf b/root/docker/Webproxy/Data/nginx/service.conf new file mode 100644 index 0000000..fbad445 --- /dev/null +++ b/root/docker/Webproxy/Data/nginx/service.conf @@ -0,0 +1,171 @@ + +#/root/docker/Webproxy/Data/nginx/service.conf + +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + +server { + listen 80; + server_name service.focus-on-it.net; + + location /.well-known/acme-challenge/ { root /var/www/certbot; } + location / { return 301 https://$host$request_uri; } +} + +server { + listen 443 ssl; + server_name service.focus-on-it.net; + + ssl_certificate /etc/letsencrypt/live/service.focus-on-it.net/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/service.focus-on-it.net/privkey.pem; + + location / { + return 200 "service endpoint\n"; + } +} + +server { + listen 80; + server_name dokuwiki.focus-on-it.net; + location /.well-known/acme-challenge/ { root /var/www/certbot; } + location / { return 301 https://$host$request_uri; } +} + +server { + listen 443 ssl; + server_name dokuwiki.focus-on-it.net; + resolver 127.0.0.11 valid=30s ipv6=off; + ssl_certificate /etc/letsencrypt/live/service.focus-on-it.net/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/service.focus-on-it.net/privkey.pem; + + location / { + set $dokuwiki_upstream dokuwiki:8080; + proxy_pass http://$dokuwiki_upstream; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Port 443; + } +} +server { + listen 80; + server_name guacamole.focus-on-it.net; + + location /.well-known/acme-challenge/ { root /var/www/certbot; } + location / { return 301 https://$host$request_uri; } +} + +server { + listen 443 ssl; + server_name guacamole.focus-on-it.net; + + ssl_certificate /etc/letsencrypt/live/service.focus-on-it.net/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/service.focus-on-it.net/privkey.pem; + + # optional sinnvoll + client_max_body_size 50m; + + # Guacamole läuft standardmäßig unter /guacamole/ + location / { + return 302 /guacamole/; + } + + location /guacamole/ { + proxy_pass http://guacamole:8080/guacamole/; + proxy_http_version 1.1; + + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Port 443; + + # WebSocket für Guacamole Tunnel + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + + proxy_buffering off; + } +} +server { + listen 80; + server_name drawio.focus-on-it.net; + + location /.well-known/acme-challenge/ { + root /var/www/certbot; + } + + location / { + return 301 https://$host$request_uri; + } +} + +server { + listen 443 ssl; + server_name drawio.focus-on-it.net; + + ssl_certificate /etc/letsencrypt/live/service.focus-on-it.net/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/service.focus-on-it.net/privkey.pem; + + client_max_body_size 50m; + + location / { + auth_basic "Restricted"; + auth_basic_user_file /etc/nginx/auth/.htpasswd; + proxy_pass http://drawio:8080; + + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Port 443; + + proxy_read_timeout 300; + proxy_send_timeout 300; + } +} +server { + listen 80; + server_name nextcloud.focus-on-it.net; + + location /.well-known/acme-challenge/ { + root /var/www/certbot; + } + + location / { + return 301 https://$host$request_uri; + } +} + +server { + listen 443 ssl; + server_name nextcloud.focus-on-it.net; + + resolver 127.0.0.11 valid=30s ipv6=off; + + ssl_certificate /etc/letsencrypt/live/service.focus-on-it.net/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/service.focus-on-it.net/privkey.pem; + + client_max_body_size 10G; + proxy_read_timeout 3600; + proxy_send_timeout 3600; + + location / { + set $nextcloud_upstream nextcloud-nginx:80; + proxy_pass http://$nextcloud_upstream; + + proxy_http_version 1.1; + proxy_request_buffering off; + + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto https; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Port 443; + } +} diff --git a/root/docker/Webproxy/certbot.sh b/root/docker/Webproxy/certbot.sh new file mode 100755 index 0000000..8b6eae3 --- /dev/null +++ b/root/docker/Webproxy/certbot.sh @@ -0,0 +1,10 @@ +# //root/docker/Webproxy/certbot.sh +docker compose run --rm --entrypoint certbot certbot certonly \ + --webroot -w /var/www/certbot \ + -d service.focus-on-it.net \ + -d dokuwiki.focus-on-it.net \ + -d guacamole.focus-on-it.net \ + -d drawio.focus-on-it.net \ + -d nextcloud.focus-on-it.net \ + --email Michael.Seidel@focus-on-it.de \ + --agree-tos --no-eff-email diff --git a/root/docker/Webproxy/docker-compose.yml b/root/docker/Webproxy/docker-compose.yml new file mode 100644 index 0000000..03ed1cd --- /dev/null +++ b/root/docker/Webproxy/docker-compose.yml @@ -0,0 +1,41 @@ +# /root/docker/Webproxy/docker-compose.yml + +services: + webproxy: + image: nginx:stable + container_name: Webproxy + ports: + - "80:80" + - "443:443" + environment: + - NGINX_ENTRYPOINT_DISABLE_IPV6=true + volumes: + - /root/docker/Webproxy/Data/nginx/service.conf:/etc/nginx/conf.d/default.conf:ro + - /root/docker/Webproxy/Data/certbot/webroot:/var/www/certbot:ro + - /root/docker/Webproxy/Data/certbot/conf:/etc/letsencrypt:ro + - /root/docker/Webproxy/Data/logs:/var/log/nginx + - /root/docker/Webproxy/Data/nginx/auth:/etc/nginx/auth:ro + networks: + - webproxy-net + restart: unless-stopped + + certbot: + image: certbot/certbot + container_name: Webproxy-certbot + volumes: + - /root/docker/Webproxy/Data/certbot/webroot:/var/www/certbot + - /root/docker/Webproxy/Data/certbot/conf:/etc/letsencrypt + networks: + - webproxy-net + restart: unless-stopped + entrypoint: /bin/sh -c + command: > + "trap exit TERM; + while :; do + certbot renew --webroot -w /var/www/certbot --quiet; + sleep 12h; + done" + +networks: + webproxy-net: + external: true diff --git a/root/docker/Webproxy/start.sh b/root/docker/Webproxy/start.sh new file mode 100755 index 0000000..dc3ce41 --- /dev/null +++ b/root/docker/Webproxy/start.sh @@ -0,0 +1,17 @@ +#!/bin/sh +#/root/docker/Webserver/start.sh + +set -euo pipefail +cd "$(dirname "$0")" + +# Stack sauber stoppen und entfernen (Container weg, Volumes bleiben!) +docker compose down + +# Images aktualisieren +docker compose pull + +# Neu erstellen und starten +docker compose up -d --force-recreate --remove-orphans + +# Optional: alte Images aufräumen +docker image prune -f diff --git a/root/docker/dokuwiki/data/conf/acl.auth.php b/root/docker/dokuwiki/data/conf/acl.auth.php new file mode 100644 index 0000000..ea1fda6 --- /dev/null +++ b/root/docker/dokuwiki/data/conf/acl.auth.php @@ -0,0 +1,17 @@ +# acl.auth.php +# +# Don't modify the lines above +# +# Access Control Lists +# +# Auto-generated by install script +# Date: Sat, 14 Feb 2026 13:16:27 +0000 +* @ALL 0 +* micha 16 +it-doku:* @foit 1 +it-doku:* @it 16 +knowledgebase:* @it 16 +rsit:* @rsit 16 +start @user 1 +user:username:* @ALL 1 +user:username:* @user 1 diff --git a/root/docker/dokuwiki/data/conf/license.php b/root/docker/dokuwiki/data/conf/license.php new file mode 120000 index 0000000..db18d59 --- /dev/null +++ b/root/docker/dokuwiki/data/conf/license.php @@ -0,0 +1 @@ +/var/www/html/conf.core/license.php \ No newline at end of file diff --git a/root/docker/dokuwiki/data/conf/local.php b/root/docker/dokuwiki/data/conf/local.php new file mode 100644 index 0000000..cb35c89 --- /dev/null +++ b/root/docker/dokuwiki/data/conf/local.php @@ -0,0 +1,24 @@ + +# Don't modify the lines above +# +# Userfile +# +# Auto-generated by install script +# Date: Sat, 14 Feb 2026 13:16:27 +0000 +# +# Format: +# login:passwordhash:Real Name:email:groups,comma,separated + +admin:$2y$10$jJlC0eW/qKfyZsXxwYlOTuNOpjKzdL32wIFArVbiknOWrjxfwho8e:Admin:Michael.Seidel@focus-on-it.de:admin,user +dany:$2y$10$id0jpOSPPzQU2Obx5ZMX8eCcqMH1PFQc7dW8XswjbjXzcGkFD/iBi:Daniela Seidel:Daniela.Seidel@focus-on-it.de:user,dany,foit +micha:$2y$10$8wh6APl35INN752EY3NTM.yy04SZWUzQhrkk040wMX8IFwMiMMrV6:Michael Seidel:Michael.Seidel@focus-on-it.de:user,it,rsit,foit +matthias:$2y$10$aSQqSxmUKm97IZPqUdEMzug9C1XlZGKcAhFytCO0vveJ9SMxoQahy:Matthias Ruckwied:matthias@ruckwied-it.de:rsit,user +testuser:$2y$10$RFWOkg5sm5W51pLpgOXLOO.h0PszrYOhFcTxrLkVMtvncCX2nQWWa:Testo:test@focus-on-it.de:user +testrsit:$2y$10$LmgM9kTY11ynNdNOH6g2qeADFO8GrNiRbFo8lK.lSreiQRi8P9SBy:RSITler:RSIt@focus-on-it.de:rsit,user diff --git a/root/docker/dokuwiki/data/conf/users.auth.php.bak b/root/docker/dokuwiki/data/conf/users.auth.php.bak new file mode 100644 index 0000000..b13290a --- /dev/null +++ b/root/docker/dokuwiki/data/conf/users.auth.php.bak @@ -0,0 +1,14 @@ +# users.auth.php +# +# Don't modify the lines above +# +# Userfile +# +# Auto-generated by install script +# Date: Sat, 14 Feb 2026 13:16:27 +0000 +# +# Format: +# login:passwordhash:Real Name:email:groups,comma,separated + +admin:$2y$10$zGnIfotQJ7QVVrsQtBzRy.vbbR3dOPJjNHpPqUjAUrh3nZ/E1SBRG:Admin:Michael.Seidel@focus-on-it.de:admin,user +micha:$2y$10$vfJ2kebl9bNf9kzfkxzgB.HuMQkyDMBPSOOXcItO6.MLg9wt4rXMO:Michael Seidel:Michael.Seidel@focus-on-it.de:user diff --git a/root/docker/dokuwiki/data/lib/plugins/diagramsnet/lib/images/manifest.json b/root/docker/dokuwiki/data/lib/plugins/diagramsnet/lib/images/manifest.json new file mode 100644 index 0000000..9f8d383 --- /dev/null +++ b/root/docker/dokuwiki/data/lib/plugins/diagramsnet/lib/images/manifest.json @@ -0,0 +1,22 @@ +{ + "name": "diagrams.net", + "short_name": "Diagrams", + "description": "diagrams.net is a completely free diagram editor", + "icons": [ + { + "src": "/images/android-chrome-196x196.png", + "sizes": "196x196", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/images/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#DF6C0C", + "background_color": "#DF6C0C", + "display": "fullscreen", + "start_url": "/index.html" +} \ No newline at end of file diff --git a/root/docker/dokuwiki/data/lib/plugins/diagramsnet/lib/math/.travis.yml b/root/docker/dokuwiki/data/lib/plugins/diagramsnet/lib/math/.travis.yml new file mode 100644 index 0000000..d4f8e32 --- /dev/null +++ b/root/docker/dokuwiki/data/lib/plugins/diagramsnet/lib/math/.travis.yml @@ -0,0 +1,17 @@ +language: node_js +node_js: +- stable +sudo: false +script: +- npm install +- npm test +branches: + only: + - "/^\\d+\\.\\d+/" +deploy: + provider: npm + email: manager@mathjax.org + api_key: + secure: VbG6GALVGUCeZKhaqpR1JD70ZWC20NyTSyue9htlmLMhrw02JR/5Bi7mZDZrnvAqo8gSO6MGE6lbbaBBI5u42iklNHFYg+RTeEF7CafoVBSC7QeNNdkpDJyeEQ+zEAWKv4/oOcqH9logQBJoW+iT9xHlyVIZxmEYG9ptWYzouWk= + on: + tags: true diff --git a/root/docker/dokuwiki/data/lib/plugins/diagramsnet/lib/package.json b/root/docker/dokuwiki/data/lib/plugins/diagramsnet/lib/package.json new file mode 100644 index 0000000..51c09b9 --- /dev/null +++ b/root/docker/dokuwiki/data/lib/plugins/diagramsnet/lib/package.json @@ -0,0 +1,39 @@ +{ + "name": "draw.io", + "version": "15.7.2", + "description": "diagrams.net desktop", + "main": "electron.js", + "scripts": { + "start": "electron ." + }, + "repository": { + "type": "git", + "url": "git+https://github.com/jgraph/drawio.git" + }, + "keywords": [ + "draw.io", + "diagram", + "flowchart", + "UML" + ], + "author": "JGraph", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/jgraph/drawio-desktop/issues" + }, + "homepage": "https://github.com/jgraph/drawio", + "dependencies": { + "@electron/remote": "^2.0.1", + "commander": "^8.2.0", + "compression": "^1.7.4", + "crc": "^3.8.0", + "electron-log": "^4.4.1", + "electron-progressbar": "^2.0.1", + "electron-store": "^8.0.0", + "electron-updater": "^4.3.9", + "pdf-lib": "^1.16.0" + }, + "devDependencies": { + "electron": "^13.6.1" + } +} diff --git a/root/docker/dokuwiki/data/lib/plugins/move/.github/workflows/dokuwiki.yml b/root/docker/dokuwiki/data/lib/plugins/move/.github/workflows/dokuwiki.yml new file mode 100644 index 0000000..608ef34 --- /dev/null +++ b/root/docker/dokuwiki/data/lib/plugins/move/.github/workflows/dokuwiki.yml @@ -0,0 +1,11 @@ +name: DokuWiki Default Tasks +on: + push: + pull_request: + schedule: + - cron: '1 18 5 * *' + + +jobs: + all: + uses: dokuwiki/github-action/.github/workflows/all.yml@main diff --git a/root/docker/dokuwiki/data/lib/plugins/move/.github/workflows/release.yml b/root/docker/dokuwiki/data/lib/plugins/move/.github/workflows/release.yml new file mode 100644 index 0000000..54f680b --- /dev/null +++ b/root/docker/dokuwiki/data/lib/plugins/move/.github/workflows/release.yml @@ -0,0 +1,24 @@ +# Create release on change to plugin.info.txt version line +# https://github.com/dokuwiki/dokuwiki/issues/3951 +# +# Requires DOKUWIKI_USER and DOKUWIKI_PASS secrets be set in GitHub Actions + +name: Release + +on: + push: + branches: + - master + paths: + - "*.info.txt" + +jobs: + release: + name: Release + # https://github.com/dokuwiki/dokuwiki/pull/3966 + uses: glensc/dokuwiki/.github/workflows/plugin-release.yml@39431875f734bddc35cc6b4a899bbfdec97e8aba + secrets: + DOKUWIKI_USER: ${{ secrets.DOKUWIKI_USER }} + DOKUWIKI_PASS: ${{ secrets.DOKUWIKI_PASS }} + +# vim:ts=2:sw=2:et diff --git a/root/docker/dokuwiki/data/lib/plugins/prosemirror/.github/auto-comment.yml b/root/docker/dokuwiki/data/lib/plugins/prosemirror/.github/auto-comment.yml new file mode 100644 index 0000000..f6a72e3 --- /dev/null +++ b/root/docker/dokuwiki/data/lib/plugins/prosemirror/.github/auto-comment.yml @@ -0,0 +1,9 @@ +# auto replies used by probot/auto-comment + +issuesOpened: > + Thank you for opening this issue. + + [CosmoCode](https://www.cosmocode.de) is a software company in Berlin providing services for wiki, app and web development. As such we can't guarantee quick responses for issues opened on our Open Source projects. + + If you require certain features or bugs fixed, you can always hire us. Feel free to contact us at dokuwiki@cosmocode.de for an offer. + diff --git a/root/docker/dokuwiki/data/lib/plugins/smtp/.travis.yml b/root/docker/dokuwiki/data/lib/plugins/smtp/.travis.yml new file mode 100644 index 0000000..86353a7 --- /dev/null +++ b/root/docker/dokuwiki/data/lib/plugins/smtp/.travis.yml @@ -0,0 +1,15 @@ +# Config file for travis-ci.org + +language: php +php: + - "7.3" + - "7.2" + - "7.1" + - "7.0" + - "5.6" +env: + - DOKUWIKI=master + - DOKUWIKI=stable +before_install: wget https://raw.github.com/splitbrain/dokuwiki-travis/master/travis.sh +install: sh travis.sh +script: cd _test && ./phpunit.phar --stderr --group plugin_smtp diff --git a/root/docker/dokuwiki/data/lib/plugins/smtp/subtree/txtthinking/Mailer/composer.json b/root/docker/dokuwiki/data/lib/plugins/smtp/subtree/txtthinking/Mailer/composer.json new file mode 100644 index 0000000..34390bb --- /dev/null +++ b/root/docker/dokuwiki/data/lib/plugins/smtp/subtree/txtthinking/Mailer/composer.json @@ -0,0 +1,39 @@ +{ + "name": "txthinking/mailer", + "type": "library", + "keywords": ["mail", "smtp"], + "description": "A very lightweight PHP SMTP mail sender", + "license": "MIT", + "homepage": "http://github.com/txthinking/Mailer", + "authors": [ + { + "name": "Cloud", + "email": "cloud@txthinking.com", + "homepage": "http://www.txthinking.com", + "role": "Thinker" + }, + { + "name": "Matt Sowers", + "email": "msowers@erblearn.org" + } + ], + "require": { + "php": ">=5.3.2", + "psr/log": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "erb/testing-tools": "dev-master", + "monolog/monolog": "~1.13" + }, + "autoload": { + "psr-4": { + "Tx\\": "src/" + } + }, + "autoload-dev": { + "classmap": [ + "tests/TestCase.php" + ] + } +} diff --git a/root/docker/dokuwiki/docker-compose.yml b/root/docker/dokuwiki/docker-compose.yml new file mode 100644 index 0000000..f8a5a15 --- /dev/null +++ b/root/docker/dokuwiki/docker-compose.yml @@ -0,0 +1,24 @@ +#/root/docker/dokuwiki/docker-compose.yml + +services: + dokuwiki: + image: dokuwiki/dokuwiki:stable + container_name: dokuwiki + restart: unless-stopped + volumes: + - ./data:/storage + networks: + - webproxy-net + labels: + - traefik.enable=true + - traefik.docker.network=webproxy-net + - traefik.http.routers.dokuwiki.rule=Host(`dokuwiki.focus-on-it.net`) + - traefik.http.routers.dokuwiki.entrypoints=websecure + - traefik.http.routers.dokuwiki.tls=true + - traefik.http.routers.dokuwiki.tls.certresolver=le + - traefik.http.services.dokuwiki.loadbalancer.server.port=8080 + +networks: + webproxy-net: + external: true + name: webproxy-net diff --git a/root/docker/dokuwiki/start.sh b/root/docker/dokuwiki/start.sh new file mode 100755 index 0000000..d2fcfa1 --- /dev/null +++ b/root/docker/dokuwiki/start.sh @@ -0,0 +1,17 @@ +#!/bin/sh +#/root/docker/dokuwiki/start.sh +set -euo pipefail +cd "$(dirname "$0")" + +# 1) Name freimachen – egal ob Container von docker run oder compose stammt +docker rm -f dokuwiki >/dev/null 2>&1 || true + +# 2) Falls Compose-Reste existieren, wegräumen (optional, aber sauber) +docker compose down >/dev/null 2>&1 || true + +# 3) Update + Recreate +docker compose pull +docker compose up -d --force-recreate --remove-orphans + +# 4) Cleanup +docker image prune -f diff --git a/root/docker/drawio/docker-compose.yml b/root/docker/drawio/docker-compose.yml new file mode 100644 index 0000000..4c3751a --- /dev/null +++ b/root/docker/drawio/docker-compose.yml @@ -0,0 +1,37 @@ +services: + drawio: + image: jgraph/drawio:latest + container_name: drawio + restart: unless-stopped + + environment: + TZ: Europe/Berlin + DRAWIO_SERVER_URL: "https://drawio.focus-on-it.net/" + DRAWIO_BASE_URL: "https://drawio.focus-on-it.net" + DRAWIO_DISABLE_XFRAME: "1" + + expose: + - "8080" + + networks: + - webproxy-net + + volumes: + - drawio-logs:/usr/local/tomcat/logs + + labels: + - traefik.enable=true + - traefik.docker.network=webproxy-net + - traefik.http.routers.drawio.rule=Host(`drawio.focus-on-it.net`) + - traefik.http.routers.drawio.entrypoints=websecure + - traefik.http.routers.drawio.tls=true + - traefik.http.routers.drawio.tls.certresolver=le + - traefik.http.routers.drawio.middlewares=drawio-auth@file + - traefik.http.services.drawio.loadbalancer.server.port=8080 + +networks: + webproxy-net: + external: true + +volumes: + drawio-logs: diff --git a/root/docker/drawio/start.sh b/root/docker/drawio/start.sh new file mode 100755 index 0000000..dc3ce41 --- /dev/null +++ b/root/docker/drawio/start.sh @@ -0,0 +1,17 @@ +#!/bin/sh +#/root/docker/Webserver/start.sh + +set -euo pipefail +cd "$(dirname "$0")" + +# Stack sauber stoppen und entfernen (Container weg, Volumes bleiben!) +docker compose down + +# Images aktualisieren +docker compose pull + +# Neu erstellen und starten +docker compose up -d --force-recreate --remove-orphans + +# Optional: alte Images aufräumen +docker image prune -f diff --git a/root/docker/guacamole/docker-compose.yml b/root/docker/guacamole/docker-compose.yml new file mode 100644 index 0000000..265583e --- /dev/null +++ b/root/docker/guacamole/docker-compose.yml @@ -0,0 +1,67 @@ +# /root/docker/guacamole/docker-compose.yml +services: + guacd: + image: guacamole/guacd:1.6.0 + container_name: guacd + restart: unless-stopped + networks: + - guac-internal + + postgres: + image: postgres:16 + container_name: guac-postgres + restart: unless-stopped + environment: + POSTGRES_DB: guacamole_db + POSTGRES_USER: guacamole + POSTGRES_PASSWORD: 'c~dXXUbkV2/f`UL^m#RAq8i=n!DL06#N' + volumes: + - ./data/postgres:/var/lib/postgresql/data + networks: + - guac-internal + + guacamole: + image: guacamole/guacamole:1.6.0 + container_name: guacamole + restart: unless-stopped + depends_on: + - guacd + - postgres + environment: + GUACD_HOSTNAME: guacd + POSTGRESQL_HOSTNAME: postgres + POSTGRESQL_DATABASE: guacamole_db + POSTGRESQL_USERNAME: guacamole + POSTGRESQL_PASSWORD: 'c~dXXUbkV2/f`UL^m#RAq8i=n!DL06#N' + volumes: + - ./data/guacamole:/etc/guacamole + expose: + - "8080" + networks: + - guac-internal + - webproxy-net + labels: + - traefik.enable=true + - traefik.docker.network=webproxy-net + + #Haupt-Router für Guacamole + - traefik.http.routers.guac.rule=Host(`guacamole.focus-on-it.net`) + - traefik.http.routers.guac.entrypoints=websecure + - traefik.http.routers.guac.tls=true + - traefik.http.routers.guac.tls.certresolver=le + - traefik.http.services.guac.loadbalancer.server.port=8080 + + # Redirect / -> /guacamole/ + - traefik.http.routers.guac-root.rule=Host(`guacamole.focus-on-it.net`) && Path(`/`) + - traefik.http.routers.guac-root.entrypoints=websecure + - traefik.http.routers.guac-root.tls=true + - traefik.http.routers.guac-root.tls.certresolver=le + - traefik.http.routers.guac-root.middlewares=guac-root-redirect + - traefik.http.middlewares.guac-root-redirect.redirectregex.regex=^https://guacamole\.focus-on-it\.net/$ + - traefik.http.middlewares.guac-root-redirect.redirectregex.replacement=https://guacamole.focus-on-it.net/guacamole/ + - traefik.http.middlewares.guac-root-redirect.redirectregex.permanent=false +networks: + guac-internal: + driver: bridge + webproxy-net: + external: true diff --git a/root/docker/guacamole/start.sh b/root/docker/guacamole/start.sh new file mode 100755 index 0000000..2379b25 --- /dev/null +++ b/root/docker/guacamole/start.sh @@ -0,0 +1,6 @@ +#!/bin/sh +#/root/docker/guacamole/start.sh + +docker compose down +docker compose pull +docker compose up -d --force-recreate --remove-orphans diff --git a/root/docker/nextcloud/Dockerfile b/root/docker/nextcloud/Dockerfile new file mode 100644 index 0000000..8695946 --- /dev/null +++ b/root/docker/nextcloud/Dockerfile @@ -0,0 +1,19 @@ +FROM nextcloud:fpm + +USER root + +COPY certs/focus-on-it-ca.crt /usr/local/share/ca-certificates/focus-on-it-ca.crt +RUN update-ca-certificates + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + smbclient \ + ldap-utils \ + libldap2-dev \ + libssl-dev \ + wait-for-it \ + && docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ \ + && docker-php-ext-install ldap \ + && rm -rf /var/lib/apt/lists/* + +# KEIN USER www-data hier \ No newline at end of file diff --git a/root/docker/nextcloud/data/nginx/conf.d/nextcloud.conf b/root/docker/nextcloud/data/nginx/conf.d/nextcloud.conf new file mode 100644 index 0000000..75381a5 --- /dev/null +++ b/root/docker/nextcloud/data/nginx/conf.d/nextcloud.conf @@ -0,0 +1,81 @@ +server { + listen 80; + server_name _; + + root /var/www/html; + index index.php index.html /index.php$request_uri; + + client_max_body_size 10G; + client_body_timeout 300s; + fastcgi_buffers 64 4K; + + gzip off; + + add_header Referrer-Policy "no-referrer" always; + add_header X-Content-Type-Options "nosniff" always; + add_header X-Frame-Options "SAMEORIGIN" always; + add_header X-Permitted-Cross-Domain-Policies "none" always; + add_header X-Robots-Tag "noindex, nofollow" always; + add_header X-XSS-Protection "1; mode=block" always; + + location = /robots.txt { + allow all; + log_not_found off; + access_log off; + } + + location = /.well-known/carddav { + return 301 /remote.php/dav; + } + + location = /.well-known/caldav { + return 301 /remote.php/dav; + } + + location /.well-known/acme-challenge { try_files $uri $uri/ =404; } + location /.well-known/pki-validation { try_files $uri $uri/ =404; } + + location / { + try_files $uri $uri/ /index.php$request_uri; + } + + location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ { + deny all; + } + + location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { + deny all; + } + + location ~ \.php(?:$|/) { + rewrite ^/(?!index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|.+/richdocumentscode/proxy) /index.php$request_uri; + + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + set $path_info $fastcgi_path_info; + + try_files $fastcgi_script_name =404; + + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PATH_INFO $path_info; + fastcgi_param HTTPS on; + fastcgi_param modHeadersAvailable true; + fastcgi_param front_controller_active true; + fastcgi_pass nextcloud-app:9000; + fastcgi_intercept_errors on; + fastcgi_request_buffering off; + fastcgi_read_timeout 3600; + } + + location ~ \.(?:css|js|svg|gif|png|jpg|ico|wasm|tflite|map|ogg|flac)$ { + try_files $uri /index.php$request_uri; + expires 6M; + access_log off; + } + + location ~ \.(?:mp4|webm|avif|bmp|html|ttf|woff2?)$ { + try_files $uri /index.php$request_uri; + expires 6M; + access_log off; + } +} diff --git a/root/docker/nextcloud/data/nginx/nginx.conf b/root/docker/nextcloud/data/nginx/nginx.conf new file mode 100644 index 0000000..e7e7174 --- /dev/null +++ b/root/docker/nextcloud/data/nginx/nginx.conf @@ -0,0 +1,22 @@ +user nginx; +worker_processes auto; + +events { + worker_connections 1024; +} + +http { + include /etc/nginx/mime.types; + types { + text/javascript mjs; + } + default_type application/octet-stream; + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + client_max_body_size 10G; + + include /etc/nginx/conf.d/*.conf; +} diff --git a/root/docker/nextcloud/docker-compose.yml b/root/docker/nextcloud/docker-compose.yml new file mode 100644 index 0000000..2541dfc --- /dev/null +++ b/root/docker/nextcloud/docker-compose.yml @@ -0,0 +1,97 @@ +services: + nextcloud-db: + image: mariadb:11 + container_name: nextcloud-db + restart: unless-stopped + command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW + environment: + MYSQL_ROOT_PASSWORD: aMdZqdgztQbadb3yes05 + MYSQL_DATABASE: nextcloud + MYSQL_USER: nextcloud + MYSQL_PASSWORD: ZDFnJGCBo0PHvq58KItT + TZ: Europe/Berlin + volumes: + - /root/docker/nextcloud/data/db:/var/lib/mysql + networks: + - nextcloud-internal + + nextcloud-redis: + image: redis:7-alpine + container_name: nextcloud-redis + restart: unless-stopped + command: redis-server --appendonly yes + volumes: + - /root/docker/nextcloud/data/redis:/data + networks: + - nextcloud-internal + + nextcloud-app: + build: . + container_name: nextcloud-app + restart: unless-stopped + depends_on: + - nextcloud-db + - nextcloud-redis + command: > + /bin/sh -c " + wait-for-it nextcloud-db:3306 --timeout=60 && + wait-for-it nextcloud-redis:6379 --timeout=60 && + exec php-fpm + " + environment: + MYSQL_HOST: nextcloud-db + MYSQL_DATABASE: nextcloud + MYSQL_USER: nextcloud + MYSQL_PASSWORD: ZDFnJGCBo0PHvq58KItT + REDIS_HOST: nextcloud-redis + TZ: Europe/Berlin + volumes: + - /srv/nextcloud-data-local/nextcloud:/var/www/html + networks: + - nextcloud-internal + nextcloud-cron: + build: . + container_name: nextcloud-cron + restart: unless-stopped + depends_on: + - nextcloud-app + entrypoint: /cron.sh + environment: + MYSQL_HOST: nextcloud-db + MYSQL_DATABASE: nextcloud + MYSQL_USER: nextcloud + MYSQL_PASSWORD: ZDFnJGCBo0PHvq58KItT + REDIS_HOST: nextcloud-redis + TZ: Europe/Berlin + volumes: + - /srv/nextcloud-data-local/nextcloud:/var/www/html + networks: + - nextcloud-internal + + nextcloud-nginx: + image: nginx:alpine + container_name: nextcloud-nginx + restart: unless-stopped + depends_on: + - nextcloud-app + volumes: + - /srv/nextcloud-data-local/nextcloud:/var/www/html:ro + - /root/docker/nextcloud/data/nginx/nginx.conf:/etc/nginx/nginx.conf:ro + - /root/docker/nextcloud/data/nginx/conf.d:/etc/nginx/conf.d:ro + networks: + - nextcloud-internal + - webproxy-net + labels: + - traefik.enable=true + - traefik.docker.network=webproxy-net + - traefik.http.routers.nextcloud.rule=Host(`nextcloud.focus-on-it.net`) + - traefik.http.routers.nextcloud.entrypoints=websecure + - traefik.http.routers.nextcloud.tls=true + - traefik.http.routers.nextcloud.tls.certresolver=le + - traefik.http.routers.nextcloud.middlewares=nextcloud-headers@file + - traefik.http.services.nextcloud.loadbalancer.server.port=80 +networks: + nextcloud-internal: + driver: bridge + webproxy-net: + external: true diff --git a/root/docker/nextcloud/start.sh b/root/docker/nextcloud/start.sh new file mode 100755 index 0000000..d986bec --- /dev/null +++ b/root/docker/nextcloud/start.sh @@ -0,0 +1,17 @@ +#!/bin/sh +#/root/docker/Webserver/start.sh + +set -euo pipefail +cd "$(dirname "$0")" + +# Stack sauber stoppen und entfernen (Container weg, Volumes bleiben!) +docker compose down + +# Images aktualisieren +docker compose pull + +# Neu erstellen und starten +docker compose up -d --build --force-recreate --remove-orphans + +# Optional: alte Images aufräumen +docker image prune -f diff --git a/root/docker/start.sh b/root/docker/start.sh new file mode 100755 index 0000000..dabb186 --- /dev/null +++ b/root/docker/start.sh @@ -0,0 +1,18 @@ +#!/bin/bash +#/root/docker/start.sh + +set -euo pipefail + +cd /root/docker + +(cd dokuwiki && ./start.sh) +(cd guacamole && ./start.sh) +(cd nextcloud && ./start.sh) + + +# optional: kleine Pause (nach deinen nginx-resolver Änderungen nicht mehr zwingend, +# aber schadet nicht, falls noch weitere upstreams dazukommen) +sleep 2 + +#(cd Webproxy && ./start.sh) +(cd traefik && ./start.sh) diff --git a/root/docker/traefik/data/dynamic/dynamic/.htpasswd b/root/docker/traefik/data/dynamic/dynamic/.htpasswd new file mode 100644 index 0000000..c00fb8d --- /dev/null +++ b/root/docker/traefik/data/dynamic/dynamic/.htpasswd @@ -0,0 +1,2 @@ +admin:$apr1$kwoSW3.P$q.4mOtE14xAdBLR5tA4sA/ + diff --git a/root/docker/traefik/data/dynamic/dynamic/middlewares.yml b/root/docker/traefik/data/dynamic/dynamic/middlewares.yml new file mode 100644 index 0000000..f10ac1b --- /dev/null +++ b/root/docker/traefik/data/dynamic/dynamic/middlewares.yml @@ -0,0 +1,15 @@ +http: + middlewares: + drawio-auth: + basicAuth: + usersFile: /etc/traefik/dynamic/.htpasswd + + dashboard-auth: + basicAuth: + usersFile: /etc/traefik/dynamic/.htpasswd + + lan-only: + ipWhiteList: + sourceRange: + - "192.168.0.0/16" + - "10.0.0.0/8" diff --git a/root/docker/traefik/data/dynamic/dynamic/nextcloud.yml b/root/docker/traefik/data/dynamic/dynamic/nextcloud.yml new file mode 100644 index 0000000..a856d78 --- /dev/null +++ b/root/docker/traefik/data/dynamic/dynamic/nextcloud.yml @@ -0,0 +1,6 @@ +http: + middlewares: + nextcloud-headers: + headers: + customRequestHeaders: + X-Forwarded-Proto: https diff --git a/root/docker/traefik/data/dynamic/middlewares.yml b/root/docker/traefik/data/dynamic/middlewares.yml new file mode 100644 index 0000000..f10ac1b --- /dev/null +++ b/root/docker/traefik/data/dynamic/middlewares.yml @@ -0,0 +1,15 @@ +http: + middlewares: + drawio-auth: + basicAuth: + usersFile: /etc/traefik/dynamic/.htpasswd + + dashboard-auth: + basicAuth: + usersFile: /etc/traefik/dynamic/.htpasswd + + lan-only: + ipWhiteList: + sourceRange: + - "192.168.0.0/16" + - "10.0.0.0/8" diff --git a/root/docker/traefik/data/dynamic/nextcloud.yml b/root/docker/traefik/data/dynamic/nextcloud.yml new file mode 100644 index 0000000..a856d78 --- /dev/null +++ b/root/docker/traefik/data/dynamic/nextcloud.yml @@ -0,0 +1,6 @@ +http: + middlewares: + nextcloud-headers: + headers: + customRequestHeaders: + X-Forwarded-Proto: https diff --git a/root/docker/traefik/data/letsencrypt/acme.json b/root/docker/traefik/data/letsencrypt/acme.json new file mode 100644 index 0000000..2b981f2 --- /dev/null +++ b/root/docker/traefik/data/letsencrypt/acme.json @@ -0,0 +1,57 @@ +{ + "le": { + "Account": { + "Email": "Michael.Seidel@focus-on-it.de", + "Registration": { + "body": { + "status": "valid" + }, + "uri": "https://acme-v02.api.letsencrypt.org/acme/acct/3186644481" + }, + "PrivateKey": "MIIJKQIBAAKCAgEAusMImnwgOdPwPTDJi1plZk3xAroxEtC7p6wZI3oQ4BYmfNemEewD29bgxA2E918d1i/IQHMPrLrIN/0AHClqZsrzp2vyWxlFGeSbTOevpnH/z+S3L1kgtsx9qtmy8ebfnzyx1WgR+1hNkaAM/hmS6eOZYBhwEAsRge26plwJByZ2cFf8bWRnTHf9l/iy8/Hw4+h6cAr63RN8wa9dzGrSJX1u9HleCqvXS3OYZCIYY9d9/o9T5TI1nP06tX4ZvJ1QIEqUZUaMT5dx0QvI97TmS+54DnwD/+7wkGyjbRyszkFuxbVp9GxQ6QnwXhgBsLoZ6smiEjQAxjt+PLMk9psVikY3CbS4Hm7/V8DrmJ7H2h5YN/VOse55lnSqstcOfhdh8CjUNFrEO6e6bPqtSI+Je1F+pHMmPnELqwNH4j+A/QuwKehrevaPb3527SusCidvDKJSqaB8Kl2aygxuoE3deOfeHcskvEKACswhDosrd8H32PSZb5dZipuLxjBd86ncP0zvIVmEkvBIawri71I4l9ycO3q8vldDvzbxpPNdmLw3yiaV+w/Mx1k0yylV+015llGGONsLjmLsO1K6eqZiPKMtnremr4dr8GAkYrg4t25xtT10BKb6paGvaTU/RU/iuf63eetw9XXSAVGpWa8360tj+aUY6M5seN0B4pta86UCAwEAAQKCAgAY4VIkWHxnj8k9saHr72U6SZBdu2W9urKBLh9kN0cHv1OtxoHQeedysk/btmxcEx8TsWZlVZ7FNVXmhY0t80OCQa/PgkU1ZyqqPicFSgk/rIi2jqLryx0dVSU5rUpWSRpJ6alMQ5K/r/4XdCG++TO19nTwlRjavkq9CylWL8UhH3ngUgxmG13alVKinAZlErpzdj1Xb1MHwCia2eyuRp3L0kfFiGSjmcxy+AmZb2Rd6q+Vic0Up8l2KlMXqh6uHqv1vVHDIzCeis+mGIKTo1UZ0QFL9rAGuLNyHhLwfoUz7goeiyI8JnDp9sG/m0WgYE6DFY0CjUx8HCFfX0NBmhv2h0Ml25koygJ/vIMRyN9rxGGnXWOyomFE6ohOGDufoV6wc6VzGBRXFWGr14059PU8DGqbwqIY+buQ0ZjJFlwzd8iFKiWHErV5L6kgoeEzxx0Xkrsj7qaWZtU0q3NpH6oXZSrKEp0ostNCYXhjq9+7AKjtWc3mpMfRPjrVd89/GUlLsoSsnSyA5eGe4fFrucFwHJQk+OciuB+qIdbxi7JQVOt+AaWHmLIUSh/uMdyZiRUZoRnS/aiNZIjp+OlXjHVaUST/eIgX27Wd5tExsebQdohrqD4hjjl64AxeuGyV0GOHTdjYLV1l4AI2d499h9MMFX9F/VQdKzbKJ6rj17K72QKCAQEA4tfyPe29UPXKuOy7SzB1lo8jHwGjgfk1ljmsUUr6WNe85gdIkzeGQktFuvRic+gT7ZyoVNBk+I6zbLDoOxa2Ukn6GaQowp64C4YnGq8mBUbpV/mgbeEJMZigmrWFywVUzSt/bB0p9tQDUwYGocEufXwWsbpMnGJr4AWjCw1eyf6i+DAA0PHmDYOtZ053GCWSs+7DP1k5JjMHN6ha3FOVS8eLDD3p9trgB2KK6WkrVnTmLPv7slMysKVAUUgnZE/NOTMtkvAY0FNrj3EXkGWoXYAbD9tzUHXTjtA9otjsR+Osr53MH7YrJ+pQjTDCnWEyHZAZqKOkL63iPoweUxIVGQKCAQEA0sQ9kU+8zvpKAkp2NDfwdYj6H7LWoxnpm+HYGQ/daPwL+YkwM2HG4y4RPmpabci9GapA/OuQCiCpPGww4ZCzMzshInqb9j8F7KkAF/xlOFXJQ3NxT3F4JGsW3ygME0ilfj8kmAnqVZV9TX8SfTp+2yXAM7C29Dy0+4uomzm6XHp7YuQGRegftJf8+q2oySE82tm265gTZOFMUhah3hnAQadScZyMNmLUO4mn5oeEMyNs9B+9bzkI5Zanj7S9bEiODiBWOatEN5sg+/nvuHQGJkk3lEs+wBzFEZiuLxIx6rsHBex8dp0wukK4Y/IHx7u8R0pT1UCC2l8ML3Yray64bQKCAQEAsjyHBA3W4NQf0yl/CFctLX2OVQCOnsNXTZBHSyCkkEYDEKLMbZAFF/XY9kqrSPMjJWIgCXQswfguFsrxzevMmd+yeY84z6Kybauc8iSItUDAe/WSDoPxG10XZDgYxiqMNSFmX2aS4HQ5oHRtpY8KnmJv2nnNVFso8766GycIQaKoHmZpXcOTxS6fgzpt7TUojeSe2RmcA924YA0SR2gNOJuzL40+Vk4oFOVizH9sI+R6LwJXBAjHHXDaloMhIHprf/QsbPXmKVpCe1Sa9URLBBxyJwWBF8lczyvkIh5bmSjVOK++AXS7eANuA2I6qDoEjKH65zyc9zGjQQ4Lja35kQKCAQEAg/Y8eiPLmmfZOK/4bF9t3ZlCyeAGRR5vRptT2vU08ouEz9sWY8VfalQolcSvE7ewtkYD5Jd0mvKyI1O2EzSvDm+CIn1T8wyon/F8TohHs8r6dZHtKwlnaJ3oNxZy4QwGGhJczhi/MJClYIUkRWX/kSSEv5hwJGFyC2D40x+E0GwbnuIYD2LznvXeffGHEU8PNBNGVSHlWq85QthKxq2m0zR5CQs0OsUMDq70ggDtQ7t1dy/8QowaRu1Zwj8uroKK9stGUVsrHgmx0DI/5mQ2iXgkJWQrSMt6k7bdsDkbKdWp4wqbLwTiQmyN2H3sYyDnFFe0P3vhsen6ziiVrMkWzQKCAQBtoioCpzSIJ6gAzQ012GGg049Nayw89VN3dPsE9fefWEyJqSlrc95ct+PKy6XhChwGzzruB1om0oinkmPF/im81nj3kE7zL4UtZX8DRGaQEHzm6h48jZgYkbN6Gdd5wShImFTgPFbtJ9G/3yJKUHNgieL4XoQ3N0piYWJlXI25z6VcH+Pjo6cdf5kLQKb2BWg0HUOIOcXGe6jyqTHOihWyVSTjDLI5Zfpn4/8QmIu9uofcqJdVe2kYbum971cYCQGH4GzPT6PlRkGMPFdRFVNtclc/2+6/iq2ZAHDU1sx+AR4t39SaU8h7dWcN4UvlYaaqzGeXS18S8B1Ml3vzgjE+", + "KeyType": "4096" + }, + "Certificates": [ + { + "domain": { + "main": "dokuwiki.focus-on-it.net" + }, + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUdDakNDQlBLZ0F3SUJBZ0lTQlg3Y1BkbjlLWXFxUmtCbjVSMkNTZW1rTUEwR0NTcUdTSWIzRFFFQkN3VUEKTURNeEN6QUpCZ05WQkFZVEFsVlRNUll3RkFZRFZRUUtFdzFNWlhRbmN5QkZibU55ZVhCME1Rd3dDZ1lEVlFRRApFd05TTVRJd0hoY05Nall3TXpJNE1EUXlPVFE1V2hjTk1qWXdOakkyTURReU9UUTRXakFqTVNFd0h3WURWUVFECkV4aGtiMnQxZDJscmFTNW1iMk4xY3kxdmJpMXBkQzV1WlhRd2dnSWlNQTBHQ1NxR1NJYjNEUUVCQVFVQUE0SUMKRHdBd2dnSUtBb0lDQVFEaXVTVzFvcTlZbWhjK0RVQTJzZXM3MlQvVHVrRHUycmlqRDdGbnVlbndFd2VKWTI5Swo3NkxnTkhiSE5YT2RDWUhpdmV3aU1SOUhkYVg3Wm9mQjZhd2xVa0F3a3hOVnlkRytSQnRTL3Y3clFRRUZMMyt0CjZSTWxuRW9WZlFqWmhVZEhjeUxUbFpCTkZjVVNvRjBFemlid1JGOTJzckpkRFNVRTZiZVZJWWZNVHpNOTk0NysKL3FZMHhmTGhUaWl2WXlwVDV6ZmZnMlJrcktYN3dxVTE3NWV3QmtsU1N5Mm1SK3BWTGlJMzVyUHJNclBVWDJubgo3ZHljaGFSUVI3eGhBOEZuOFpWOEtTRGgxRkxzSmgwQmZ6bUlXa3daV3RtQVlTR3FrL0srWFR5Uk5iZEFrZTFpCnNkbm1Hb1VYRENhQlpuWGNkQlJtcXNwT0ZWOEdjUGY2SlBXVGpITXdMVlUvSWFpQllJTVJYb0oxTGtBdEN6WXEKUzBDWGFKWXlqK1FNWUNCOVZSRk13Sko4UC9ORUpiSkFFcmhXWnJWaEZHdklIN2xHQlB2WUFkOFpMckU5MXBXRQppbjdEVkJJWWtHR3RPNXd4RCs0TmVQdnhVS3NPTGRnUmgxSFhoR2Vxd3EyUENWa0p1TkkyYzBRNEpTS3kvR1BtCi81RjVSNVF1Vi85RzhjbXUxZzJDMkpPbWtTN3BnUXBkMkNrMUpSM0duNnRuQXdsWWkzeFZUM1FldmJlKy82N2cKRDBNWXZnRGV0U01BQUNSek1UNFk2NUkycDdTOGMwMUM5bEMva1VaQU1lWXZ5Yzg5T2FmcU5QODFscVhXZm12NgptOEVheHhBTlZ4SExBbndUcTdhdVF4eS95RmdyTmZRdVJyY29ENzhmamF2RWZialFtUXV5eHdCdXZRSURBUUFCCm80SUNKakNDQWlJd0RnWURWUjBQQVFIL0JBUURBZ1dnTUJNR0ExVWRKUVFNTUFvR0NDc0dBUVVGQndNQk1Bd0cKQTFVZEV3RUIvd1FDTUFBd0hRWURWUjBPQkJZRUZDdW9sdkgwcjFFVDZVSG1wL2srcmtEZHlVQVNNQjhHQTFVZApJd1FZTUJhQUZBQzFLZkl0am04eDZKdE1yWGcrK3R6cEROSFNNRE1HQ0NzR0FRVUZCd0VCQkNjd0pUQWpCZ2dyCkJnRUZCUWN3QW9ZWGFIUjBjRG92TDNJeE1pNXBMbXhsYm1OeUxtOXlaeTh3SXdZRFZSMFJCQnd3R29JWVpHOXIKZFhkcGEya3VabTlqZFhNdGIyNHRhWFF1Ym1WME1CTUdBMVVkSUFRTU1Bb3dDQVlHWjRFTUFRSUJNQzRHQTFVZApId1FuTUNVd0k2QWhvQitHSFdoMGRIQTZMeTl5TVRJdVl5NXNaVzVqY2k1dmNtY3ZNemN1WTNKc01JSUJEQVlLCkt3WUJCQUhXZVFJRUFnU0IvUVNCK2dENEFIWUF5emozRllsOGhLRkVYMXZCM2Z2SmJ2S2FXYzFIQ21rRmhiREwKRk1NVVdPY0FBQUdkTXVvbzVRQUFCQU1BUnpCRkFpRUF5WndEQ2JPNXdtY25MRldoMDB2eFIxb1dvZHlMZFFPSQoxVHdWMjR1RmNwNENJQVNLVlRQL25xQ1NERDNacXVLLzUwZzZRRW1rcGwzcVRRemxQUHIreTJUcEFINEFiUDVRCkdVT29YcWtXdkZMUk0rVGN5Ujd4UVJ4OUpZUWcwWE9BbmhnWTZ6b0FBQUdkTXVvcHRnQUlBQUFGQUFTbTVBa0UKQXdCSE1FVUNJUUNBcllVOE05US9aemFrR3BFTDZ3QzA3NVhrTHVjZXdCdU8vSGRsZ3loaVh3SWdCcjMydG1jQQpoNWh0YXRSUnp0RlhqMlNJY1pFcWxyZzhGZEJQWE51ajBNY3dEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBQVd1CmFjb2pkK0JabURSUUZiSldHODRrblo4eWVBSFd0bGE5bjEyZTVKOTRFZmJDNmxWSEdIVEpjbzZyeC85VzlydWMKQmRxaDZ5b0JNNTg5cnpzMTF3TUhjMDMvZXJvdDJ0WCtJUXd6UEhTYWJiNzdFZHpDVzlCL0FFQ2pUL3RNSUFOYgpMbDJmZEgxQVZOdUVPUW5MTFU3dU15V2E5b2JPUGh2d2J3cmR1aXZQZEZkM0REL2pITFdUWjh6SEpadG1ydndiClBrcVFrWVpFYWZVRldlcmx3MDhGUnVXOUtJYk5PcU1vamovVXp2N3BkbnAza1lHM1kraW9DWk5MZGZmL3lVTmQKa2hwdC9lcWF5VUNtaU4ySWNQU3FMWFcrSE1aT3lqWGMyakRMY1UwbGltWklSYVRpQi9tWnJOTUZ1emlIZlZBbgo5b251NlRkaWozM1k0MmR0UUNvPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCgotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRkJqQ0NBdTZnQXdJQkFnSVJBTUlTTWt0d3FiU1JjZHhBOStLRkpqd3dEUVlKS29aSWh2Y05BUUVMQlFBdwpUekVMTUFrR0ExVUVCaE1DVlZNeEtUQW5CZ05WQkFvVElFbHVkR1Z5Ym1WMElGTmxZM1Z5YVhSNUlGSmxjMlZoCmNtTm9JRWR5YjNWd01SVXdFd1lEVlFRREV3eEpVMUpISUZKdmIzUWdXREV3SGhjTk1qUXdNekV6TURBd01EQXcKV2hjTk1qY3dNekV5TWpNMU9UVTVXakF6TVFzd0NRWURWUVFHRXdKVlV6RVdNQlFHQTFVRUNoTU5UR1YwSjNNZwpSVzVqY25sd2RERU1NQW9HQTFVRUF4TURVakV5TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCCkNnS0NBUUVBMnBnb2RLMitsUDQ3NEI3aTVVdDFxeXdTZisybkF6SitOcGZzNkRHUHBST05DNWt1SHMwQlVUMU0KNVNodUNWVXhxcVVpWFhMMExRZkNUVUE4M3dFanVYZzM5UnBsTWpUbWhuR2RCTytFQ0Z1OUFocVo2NllCQUpwegprRzJQb2dlZzBKZlQya1ZoZ1RVOUZQbkV3RjlxM0F1V0dyQ2Y0eXJxdlNyV21NZWJjYXM3ZEE4ODI3Smd2bHBMClRoanAyeXB6WElsaFpaNys3VHlteTA1djVKNzVBRWF6L3hsTkttT3pqbWJHR0lWd3gxQmxienQwNVVpRER3aFkKWFMwam5WNmovdWpiQUtIUzlPTVpUZkx1ZXZZbm51WE5uQzJpOG4rY0Y2M3ZFemM1MGJUSUxFSFdoc0RwN0NINApXUnQvdVRwOG4xd0JuV0lFd2lpOUNxMDh5aERzR3dJREFRQUJvNEg0TUlIMU1BNEdBMVVkRHdFQi93UUVBd0lCCmhqQWRCZ05WSFNVRUZqQVVCZ2dyQmdFRkJRY0RBZ1lJS3dZQkJRVUhBd0V3RWdZRFZSMFRBUUgvQkFnd0JnRUIKL3dJQkFEQWRCZ05WSFE0RUZnUVVBTFVwOGkyT2J6SG9tMHl0ZUQ3NjNPa00wZEl3SHdZRFZSMGpCQmd3Rm9BVQplYlJaNW51MjVlUUJjNEFJaU1nYVdQYnBtMjR3TWdZSUt3WUJCUVVIQVFFRUpqQWtNQ0lHQ0NzR0FRVUZCekFDCmhoWm9kSFJ3T2k4dmVERXVhUzVzWlc1amNpNXZjbWN2TUJNR0ExVWRJQVFNTUFvd0NBWUdaNEVNQVFJQk1DY0cKQTFVZEh3UWdNQjR3SEtBYW9CaUdGbWgwZEhBNkx5OTRNUzVqTG14bGJtTnlMbTl5Wnk4d0RRWUpLb1pJaHZjTgpBUUVMQlFBRGdnSUJBSTkxMEFuUGFuWklaVEtTM3JWRXlJVjI5QldFakFLL2R1dXo4ZUw1Ym9Tb1ZwSGhra3YzCjRlb0FlRWlQZFpMajVFWjdHMkFySUsrZ3poVGxSUTFxNEZLR3BQUGFGQlNwcVYveGJVYjVVbEFYUU9ua0huM20KRlZqK3FZdjg3L1dlWStCbTRzTjNPeDhCaHlhVTdVQVEzTGVaN04xWDAxeHhRZTR3SUFBRTNKVkxVQ2lIbVpMKwpxb0NVdGdZSUZQZ2NnMzUwUU1VSVdneFBYTkdFbmNUOTIxbmU3bmx1STAyVjhwTFVtQ2xxWE9zQ3dVTHcrUFZPClpDQjdxT014eE1Cb0NVZUwyTGw0b01wT1NyNXBKQ3BMTjN0UkEyczZQMUtMczlUU3JWaE9rKzdMWDI4Tk1VbEkKdXNRL254TEpJRDBSaEFlRnRQanlPQ09zY1FCQTUzK05SalNDYWs3UDRBNWpYN3BwbWtjSkVDTCtTMGkza1hWVQp5NU1lNUJiclU4OTczalpOdi9heDYrWks2VE04aldtaW1MNm9mNk9yWDdaVTZFMldxYXp6c0ZyTEczbzJreVNiCnpsaFNnSjgxQ2w0dHYzU2JZaVlYbkpFeEtRdnpmODNEWW90b3gzZjBmd3Y3eGxuMUEyWkxwbENiME8rbC9BSzAKWUUwRFMyRlB4U0FIaTBpd01mVzJuTkhKclhjWTNMTEhENzdnUmdqZTRFdmV1YmkyeHhhK05tay9obWhMZElFVAppVkRGYW5vQ3JNVklwUTU5WFdIa3pkRm1vSFhIQlY3b2liVmpHU083VUxTUTdNSjFOejUxcGh1REpTZ0FJVTdBCjB6ckxuT3JBai9kZnJsRVdSaEN2QWdidXdMWlgxQTJzak5qWG9QT0hic1BpeStsTzFLRjgvWFk3Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K", + "key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBNHJrbHRhS3ZXSm9YUGcxQU5ySHJPOWsvMDdwQTd0cTRvdyt4WjducDhCTUhpV052ClN1K2k0RFIyeHpWem5RbUI0cjNzSWpFZlIzV2wrMmFId2Vtc0pWSkFNSk1UVmNuUnZrUWJVdjcrNjBFQkJTOS8KcmVrVEpaeEtGWDBJMllWSFIzTWkwNVdRVFJYRkVxQmRCTTRtOEVSZmRyS3lYUTBsQk9tM2xTR0h6RTh6UGZlTwovdjZtTk1YeTRVNG9yMk1xVStjMzM0TmtaS3lsKzhLbE5lK1hzQVpKVWtzdHBrZnFWUzRpTithejZ6S3oxRjlwCjUrM2NuSVdrVUVlOFlRUEJaL0dWZkNrZzRkUlM3Q1lkQVg4NWlGcE1HVnJaZ0dFaHFwUHl2bDA4a1RXM1FKSHQKWXJIWjVocUZGd3dtZ1daMTNIUVVacXJLVGhWZkJuRDMraVQxazR4ek1DMVZQeUdvZ1dDREVWNkNkUzVBTFFzMgpLa3RBbDJpV01vL2tER0FnZlZVUlRNQ1NmRC96UkNXeVFCSzRWbWExWVJScnlCKzVSZ1Q3MkFIZkdTNnhQZGFWCmhJcCt3MVFTR0pCaHJUdWNNUS91RFhqNzhWQ3JEaTNZRVlkUjE0Um5xc0t0andsWkNialNObk5FT0NVaXN2eGoKNXYrUmVVZVVMbGYvUnZISnJ0WU5ndGlUcHBFdTZZRUtYZGdwTlNVZHhwK3Jad01KV0l0OFZVOTBIcjIzdnYrdQo0QTlER0w0QTNyVWpBQUFrY3pFK0dPdVNOcWUwdkhOTlF2WlF2NUZHUURIbUw4blBQVG1uNmpUL05aYWwxbjVyCitwdkJHc2NRRFZjUnl3SjhFNnUycmtNY3Y4aFlLelgwTGthM0tBKy9INDJyeEgyNDBKa0xzc2NBYnIwQ0F3RUEKQVFLQ0FnQVVuaGtwaWh5UGZsM0lPUXpDbkkzamdLZGZBZlJITkZFdmxPMEJYWVVDWGJ5aytBdW1JU0lxNk9KMwpUYXRRbDgxOXVOODVJY1h5S2ViNDlITTZoVjB2L0ttVk1UN0VJYWtHK0NzUzhsanN2Rm5USnFWaUE0ekg4ZzFECnBIM3lSLzQ2SjJSK29MNkJZQTR1bWpJelRtcjRsUU1vYUdvemI0OVRBY3o5elJHTUdSUzBHU2ZpRlBhNDNGcHcKdGpxWmJuZHFMMS9qbmM5Nm56K3Q1QjdCaDZMLzhTWm9TeWxnMG0vakpLR2NlMGlYeGlIWDJZQm9STGQzN1doSwptNmRzSEJzUnNJU3pTSXN5dGl2L1NSMEFwcGp0QnljZDlDYk0xNmhuMm5IcjhVOGhkbVRPaEthMWY2NXMwRE1UCnJEbHhNWWZjenhxTzFvKzBwNWxmWE5VVUpKbkhVQlg4bG1FTG5RVGkrdHl1UXYrMmhlS3lMUkZCdEltalk5R1oKUit0Y1BSNXQ1aUFQRTF1YlpGblpmRGZ5T09xamRhM3BaWk9iWFY1T0JXYVJZZGpNZjdldDAvcmthRC8yODUrUApXa2U4dk5sQlhBc0c0UzVMN3JYUTU5VCtnc1BkV21ReGJWOVVQcFlibi9Fa3VyeFhZMTVtSG9TSFpOM2Qxd0s2ClBYendXd1hSM2dzZ2ZBZ285dzVFWllhczR5Ny9YRFFOQUYrT2lWbUxkaTQrV1VTejFMQ3VaNXdTS1lkdUwvVGQKRTRqTjEyaWFGOGlWV3JRZ29kaXN6VFFxZFJRcHF1ZnlGWFRzSHF1eTZPemVJYzJNaVV0M2pRNHRjMkE5b3JndwpZNzQ0NUZwQlRnNURveUNSYThudEE5QVBxYXV4S1JXY21vWGtXZkROVXZydkVYK0JpUUtDQVFFQTVzRFpvOHJ1CmR5Y1d2SzFWdzJFSnBrcVROeVh0UldjRTlweVlJbXFnNERDT1ZqZ2kvbUZsQXNQZzV2bWZmbjFScWZpSFpLMUgKRUhlV0dpd3EyWGxvU05ZRXFXYkxaWm43TDlLaE01MGtoZXd3cFJPYnRqRzVRV1RqbmRKOWZOZWpNZ1dVMEhJQwpCeEZnK2VNbXBRbWZqdzRBMjRtaXlpb3VRMmNVVVcvcnJRVUZYQmtKSFJNZWR5cXdMdXZTcGFtVjdjeWdGVzNFCjF6QUFucERya2FMMW5BeDY2YjJJSmFzRXV6NnpBZkpqRUZVMjN0VENVN3FPOGZ2WTFKNTlFaTNzQlJKaktKOCsKN2lrWi80WHhLL0VBcmNDREsrZklWc2Exa0FzUnVISG41bHVPWGU4SzVjNHVqUDZvWVRPVlZoYzdiVCtQVkVlTApKM21LNi9RbDN0RWJKUUtDQVFFQSs0ZHJNWTFvZmhHYTdwZENyakZkdDRXK2I2Q1F5eWlxYlRVZm8vZVh5WDE2CnpPVEdGZUdpbGhTYUJTem9rOE9XZ3lRTHlIYnBaZDRpSlpIUjdraEdDVXdURHRqUmc4N1AvNkRneW9Zdk1DeHAKVE4xdTNQN2E4YTJqc3hhRkhSMUcvRVI1NWpjNmxRMVpnM1pNTWN1TmNQSGU1czIwdVBhQm16N1NDNm4yaDgxcgpOV0M3TUZKK3RPeFBsSXU5RmFqSUVYZUZtaTlyVisyS1VzR3o0WWdpR2k4QkcwMXFoM0wwdGxtMEFyOVROTmNnCjVuS2NUcVh1WktSOWIzK01TZm9OT09pSUpxV3ZaczhVc1RsSXVGQnE3cUZRS2doSy9OYUhFS1dZMWxKSWtPSDIKQThGRnhVVXQrdW5MUTUyTzNpa04yL01NMGRFZXJnMEw3c2ZDZnZ3OXVRS0NBUUFvcjBud1FpQm5hOEhyaEZoQgp1WU05Q1pzSk55dXRkK3Q5RzhFTEdHZkMvMnlwTVA2aWdVT1JDRDVJR3kwTzNVT2Z4MHovNkRsR1l2OVpILzV5CkY2RFdicjJsckpVaUZkTWU3SEUxcTNnOEVKZkhFeno2RTZ4SkptT25lT3hkTFp2OWZ0UnRLQnpKYUR3RDh4UG0KTjFzbG10OTExYitaQzNUYXQzcnluTndkeG12YWdDT0dOOC9BVFF1QlNsejZqbnI3MFg5TUorMXp6MmZjalVxcgpnK0x3SDVjd1RSV0xKcXNQNUk4bFFicExyK3Fid1VGK0I3K2FWTUEzUkxaaWxTd3UvTDMwOUpiZzRPaFBrQ3NrCmh6cUthQTM0bU1aTzNudzJxR3o0YTBUcTdhdWRUajlLbzE2N3gwNml6TGlBMUZuSytsRG9HREVseFoxRDJ1a3UKYndudEFvSUJBRUZ5Nmp5Wm5BLzV5c084ampnL1ZqQnoxNnE2TUJMOUFPT3J5QkRsVXhTMTF1ZEx2Qk5qZytmagpjblJZVENodTQxSTZaZXFDcnBhNEoxQjVVaFBic0lXb3l1aTVHRU5nNUJTVEt3cm53WTJhY01mMGNtMkV6em5GCndldk90MUp0Rk5SOWlPNlRmbVhjZEdkVnQ5dlpLSE8wTEJrSWU3Y0pSWTQ4MlhENWg5R3NiUElWdW4rSFo3cnkKSm43em9YN3FUU3ptV2RoVjhHdVB2c2RyNmIrTXFic0FjaHhGbDZ1cENPNE9CMTRUcExZQ0tHaHVlQ2VxMjQ1SwprdTBaVmtyRml2MDgzSGlaOGpzaE5UUXNRTFRkRUFZSjZZOFdXMVRSQ1pJV1ZOK254NFFUbCsxQU5FUnhqTlpXClVYTEZvN0JCSkg4UURrem1Ta0psMks0SVFwN0NTZGtDZ2dFQkFLSGt5MUMwL0VOUnJPNzdQN09yWWNtMVpGQ1AKZ05QUFJqQUhWT1dNVWRrejlRNUh5cWdmRHBMS0ZSTkVlNHB6MFFYb0hyUVRTSlNHZDRydlczaWZQZU03T01QagoxK1FMeWVyMzlod2RubzhYMDNjeVFWdnpNUVQzQ2NmVkJreUk2R09nRHNjZFEvTkVUcmhKUFBhT3Q2RldZMTY2CkRXQlZnUlprY1c2eFV3QWVldDZQSlhpQVhRYk9tSExaODhZVlJpMGJhT3BPU0RhMHJac1Q2a0NhR0ZXbU1YY24KaWU0WCtkRVljTWtMdWNvb0pyUlRuaU9tYy92WGUzOEtxc3lGTUcxVm9adG4rRHNzYkpFeEJaM2wrQWFXNmpoMApVUTNnT1VyRlRMUzY4MUtmTkpnKzdSOERDdDVMMXhLQ1BQS09Gc2U1R2FkQnBhQnRsWFVCYkorSm11VT0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", + "Store": "default" + }, + { + "domain": { + "main": "guacamole.focus-on-it.net" + }, + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUdEakNDQlBhZ0F3SUJBZ0lTQmJDTnlnaG5JR0YwVUFCOGJablFwL2w4TUEwR0NTcUdTSWIzRFFFQkN3VUEKTURNeEN6QUpCZ05WQkFZVEFsVlRNUll3RkFZRFZRUUtFdzFNWlhRbmN5QkZibU55ZVhCME1Rd3dDZ1lEVlFRRApFd05TTVRJd0hoY05Nall3TXpJNE1EUXpOakl4V2hjTk1qWXdOakkyTURRek5qSXdXakFrTVNJd0lBWURWUVFECkV4bG5kV0ZqWVcxdmJHVXVabTlqZFhNdGIyNHRhWFF1Ym1WME1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0MKQWc4QU1JSUNDZ0tDQWdFQXVrK3BPS29iSjAyVEQ5Tjk3SDlZUlFGbkZpNDcyTVhrQWRNMlVhTUlJOEI0T3JYQQo0WmZaaDJ1N1hGMEZyWlBiQWVvRk9XUnhiQlFUYTQ0dXl6cTlqNmJ3RDVGUXVaSzRnb1JhRC91clVJRG1pQ1hyCjJzcWNYaU95Zm1kYTV0RW92ZzhHVlRvR0ppNG9JQVRtSTE2QitXcG52V0YwMjgzaWpBa2dyTTdYZmRweWk0TG8KeDQzUFJ1MUszTlpmelVsbXRDSHdwbGUzVTlJK3l4RWhKM2Q2TVJRVENuOHZGZS82aU5ubVo4V3psZ0orRWxndgpKa2ZHMlEvcnNUMWgvMldkQkFURlYwSkhHVGxzUUVhZjlqT0Y1eER5YXp6WGkvR3dyWmZnWkJJeEVReGd3djl2CkZFUmpsUTdLMWd1TGlUOTVBczdtb041Q1RETEZYcjVUWFZSd3FrNFNqdTNZMDRHbFhOY1F4NUZjejVLaFRacVMKTHJrT1RGZEd2ZVI0V2Znck5YTzJ0eDlpUHJaMG1VMEF5OVNyUVdnQXJBcTZXOFRNMkpNMlF5ay9nMithUXkyZgpWQTU4YkFaUUJiQjlSK3NiMG1mN1hHYmhnSzBqc3ZnUG5hRWQzQzJ4S051alk3TXV3V2JHdlpNMVRYWThZQ0s0CkQ5ZUxaQ3IveWdHd1FVUEpNeTVWdU1TUG1EOEFYSGFLeXZlRGRmYnJqMmdWSFhTT0tmNTYvdXhLTyt2RUhPQzgKSUpqeU5IMWFJVEFRcWt5RFVjTTk1eURXbTZwTWpKMVdEenljUm9pUys0d2FiYy83UG00emQwTkR5bWF0aEtMbworWm5iZ3RFKzN3OTFoSHlLMnJmMXlFR3J1eHoxaG5nMEZWVnJCQnZhd083cjlmNVZpbXVidUVwVFJsVUNBd0VBCkFhT0NBaWt3Z2dJbE1BNEdBMVVkRHdFQi93UUVBd0lGb0RBVEJnTlZIU1VFRERBS0JnZ3JCZ0VGQlFjREFUQU0KQmdOVkhSTUJBZjhFQWpBQU1CMEdBMVVkRGdRV0JCU1lDS0FFc2FVQmRGclBmNWlKM09YWVVtNS9JREFmQmdOVgpIU01FR0RBV2dCUUF0U255TFk1dk1laWJUSzE0UHZyYzZRelIwakF6QmdnckJnRUZCUWNCQVFRbk1DVXdJd1lJCkt3WUJCUVVITUFLR0YyaDBkSEE2THk5eU1USXVhUzVzWlc1amNpNXZjbWN2TUNRR0ExVWRFUVFkTUJ1Q0dXZDEKWVdOaGJXOXNaUzVtYjJOMWN5MXZiaTFwZEM1dVpYUXdFd1lEVlIwZ0JBd3dDakFJQmdabmdRd0JBZ0V3THdZRApWUjBmQkNnd0pqQWtvQ0tnSUlZZWFIUjBjRG92TDNJeE1pNWpMbXhsYm1OeUxtOXlaeTh4TWpVdVkzSnNNSUlCCkRRWUtLd1lCQkFIV2VRSUVBZ1NCL2dTQit3RDVBSGNBRm9NdHEvQ3BKUThQOERxbFJmL0l2OGdqMElkTDlnUXAKSi9qbkh6TVQ5Zm9BQUFHZE12QWtiZ0FBQkFNQVNEQkdBaUVBb1hKVUxFZnBoZldzUFRSaVhrVmhJaEdNSis5NAprcGUrVGNFenV3ekRpdGtDSVFDcDBqRis0dDM1RG5HSFNXbEFxVU51ZWZvYWlkbWlBbC9PWC9rNTE4cGQ2Z0IrCkFLZ215K01LeGpVU1JsTS80R1h4VHhuWmJoa0lFOFFkMlcxNUFMTVNQRlVuQUFBQm5UTHdKbEVBQ0FBQUJRQUUKaUlIbUJBTUFSekJGQWlFQWdreTBXWDcyQnI4QmI4ZzJXcVZwT25iTFR4dHY0SVJKZEtKbjBJemdjSUVDSUdXUgp2RDh2WmZPVDJkK0F0WG9kaWl0RkN3UG9Bd3hySTRiRk9rMTNIUWY5TUEwR0NTcUdTSWIzRFFFQkN3VUFBNElCCkFRQVBFdkpac3lCSmlYWGJGa0VXcTJ5S2htNzVhbUVEWHRSSWVlQXJObHpHU0xtTUs4bXkyQnZ3SWpqR2pBUzkKcWdNeFN6dHNIaEp3S2RUVmpHMVNCcWdLaC9NSHYySHVpZ1lvQzhOS1BsS0Q0dWVyRzFLcU1KZ21MZmtCV210SAovZExwaXpDMUNpeGZYQTExeWd6WjFlWFVPaFBneUZ4bDR4dXU5dUJXOWJXYThDL0ExVjVSTW1KZG5xZUhrbHNlClZMWFh4ekxXaGFoTkRSaWlPYWhLL3Y3am5DNFVjZzlUczBBSCt5N0JPWE02WGpaUHVPL3g1M09YcndHeEdlYWMKQ2QzNWZwWndubzJnNUhydE5XYlJlaDRZZmozQ2Fad3c1ZVNONDBJR3FKWEI4eXF0WEtoTVF3OTRESEN4V0M2UApYSHNHcHdpU2VVVVc1UWVIbEFnTXp1V1oKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZCakNDQXU2Z0F3SUJBZ0lSQU1JU01rdHdxYlNSY2R4QTkrS0ZKand3RFFZSktvWklodmNOQVFFTEJRQXcKVHpFTE1Ba0dBMVVFQmhNQ1ZWTXhLVEFuQmdOVkJBb1RJRWx1ZEdWeWJtVjBJRk5sWTNWeWFYUjVJRkpsYzJWaApjbU5vSUVkeWIzVndNUlV3RXdZRFZRUURFd3hKVTFKSElGSnZiM1FnV0RFd0hoY05NalF3TXpFek1EQXdNREF3CldoY05NamN3TXpFeU1qTTFPVFU1V2pBek1Rc3dDUVlEVlFRR0V3SlZVekVXTUJRR0ExVUVDaE1OVEdWMEozTWcKUlc1amNubHdkREVNTUFvR0ExVUVBeE1EVWpFeU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQgpDZ0tDQVFFQTJwZ29kSzIrbFA0NzRCN2k1VXQxcXl3U2YrMm5BekorTnBmczZER1BwUk9OQzVrdUhzMEJVVDFNCjVTaHVDVlV4cXFVaVhYTDBMUWZDVFVBODN3RWp1WGczOVJwbE1qVG1obkdkQk8rRUNGdTlBaHFaNjZZQkFKcHoKa0cyUG9nZWcwSmZUMmtWaGdUVTlGUG5Fd0Y5cTNBdVdHckNmNHlycXZTcldtTWViY2FzN2RBODgyN0pndmxwTApUaGpwMnlwelhJbGhaWjcrN1R5bXkwNXY1Sjc1QUVhei94bE5LbU96am1iR0dJVnd4MUJsYnp0MDVVaUREd2hZClhTMGpuVjZqL3VqYkFLSFM5T01aVGZMdWV2WW5udVhObkMyaThuK2NGNjN2RXpjNTBiVElMRUhXaHNEcDdDSDQKV1J0L3VUcDhuMXdCbldJRXdpaTlDcTA4eWhEc0d3SURBUUFCbzRINE1JSDFNQTRHQTFVZER3RUIvd1FFQXdJQgpoakFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQWdZSUt3WUJCUVVIQXdFd0VnWURWUjBUQVFIL0JBZ3dCZ0VCCi93SUJBREFkQmdOVkhRNEVGZ1FVQUxVcDhpMk9iekhvbTB5dGVENzYzT2tNMGRJd0h3WURWUjBqQkJnd0ZvQVUKZWJSWjVudTI1ZVFCYzRBSWlNZ2FXUGJwbTI0d01nWUlLd1lCQlFVSEFRRUVKakFrTUNJR0NDc0dBUVVGQnpBQwpoaFpvZEhSd09pOHZlREV1YVM1c1pXNWpjaTV2Y21jdk1CTUdBMVVkSUFRTU1Bb3dDQVlHWjRFTUFRSUJNQ2NHCkExVWRId1FnTUI0d0hLQWFvQmlHRm1oMGRIQTZMeTk0TVM1akxteGxibU55TG05eVp5OHdEUVlKS29aSWh2Y04KQVFFTEJRQURnZ0lCQUk5MTBBblBhblpJWlRLUzNyVkV5SVYyOUJXRWpBSy9kdXV6OGVMNWJvU29WcEhoa2t2Mwo0ZW9BZUVpUGRaTGo1RVo3RzJBcklLK2d6aFRsUlExcTRGS0dwUFBhRkJTcHFWL3hiVWI1VWxBWFFPbmtIbjNtCkZWaitxWXY4Ny9XZVkrQm00c04zT3g4Qmh5YVU3VUFRM0xlWjdOMVgwMXh4UWU0d0lBQUUzSlZMVUNpSG1aTCsKcW9DVXRnWUlGUGdjZzM1MFFNVUlXZ3hQWE5HRW5jVDkyMW5lN25sdUkwMlY4cExVbUNscVhPc0N3VUx3K1BWTwpaQ0I3cU9NeHhNQm9DVWVMMkxsNG9NcE9TcjVwSkNwTE4zdFJBMnM2UDFLTHM5VFNyVmhPays3TFgyOE5NVWxJCnVzUS9ueExKSUQwUmhBZUZ0UGp5T0NPc2NRQkE1MytOUmpTQ2FrN1A0QTVqWDdwcG1rY0pFQ0wrUzBpM2tYVlUKeTVNZTVCYnJVODk3M2paTnYvYXg2K1pLNlRNOGpXbWltTDZvZjZPclg3WlU2RTJXcWF6enNGckxHM28ya3lTYgp6bGhTZ0o4MUNsNHR2M1NiWWlZWG5KRXhLUXZ6ZjgzRFlvdG94M2YwZnd2N3hsbjFBMlpMcGxDYjBPK2wvQUswCllFMERTMkZQeFNBSGkwaXdNZlcybk5ISnJYY1kzTExIRDc3Z1JnamU0RXZldWJpMnh4YStObWsvaG1oTGRJRVQKaVZERmFub0NyTVZJcFE1OVhXSGt6ZEZtb0hYSEJWN29pYlZqR1NPN1VMU1E3TUoxTno1MXBodURKU2dBSVU3QQowenJMbk9yQWovZGZybEVXUmhDdkFnYnV3TFpYMUEyc2pOalhvUE9IYnNQaXkrbE8xS0Y4L1hZNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKSndJQkFBS0NBZ0VBdWsrcE9Lb2JKMDJURDlOOTdIOVlSUUZuRmk0NzJNWGtBZE0yVWFNSUk4QjRPclhBCjRaZlpoMnU3WEYwRnJaUGJBZW9GT1dSeGJCUVRhNDR1eXpxOWo2YndENUZRdVpLNGdvUmFEL3VyVUlEbWlDWHIKMnNxY1hpT3lmbWRhNXRFb3ZnOEdWVG9HSmk0b0lBVG1JMTZCK1dwbnZXRjAyODNpakFrZ3JNN1hmZHB5aTRMbwp4NDNQUnUxSzNOWmZ6VWxtdENId3BsZTNVOUkreXhFaEozZDZNUlFUQ244dkZlLzZpTm5tWjhXemxnSitFbGd2CkprZkcyUS9yc1QxaC8yV2RCQVRGVjBKSEdUbHNRRWFmOWpPRjV4RHlhenpYaS9Hd3JaZmdaQkl4RVF4Z3d2OXYKRkVSamxRN0sxZ3VMaVQ5NUFzN21vTjVDVERMRlhyNVRYVlJ3cWs0U2p1M1kwNEdsWE5jUXg1RmN6NUtoVFpxUwpMcmtPVEZkR3ZlUjRXZmdyTlhPMnR4OWlQclowbVUwQXk5U3JRV2dBckFxNlc4VE0ySk0yUXlrL2cyK2FReTJmClZBNThiQVpRQmJCOVIrc2IwbWY3WEdiaGdLMGpzdmdQbmFFZDNDMnhLTnVqWTdNdXdXYkd2Wk0xVFhZOFlDSzQKRDllTFpDci95Z0d3UVVQSk15NVZ1TVNQbUQ4QVhIYUt5dmVEZGZicmoyZ1ZIWFNPS2Y1Ni91eEtPK3ZFSE9DOApJSmp5TkgxYUlUQVFxa3lEVWNNOTV5RFdtNnBNakoxV0R6eWNSb2lTKzR3YWJjLzdQbTR6ZDBORHltYXRoS0xvCitabmJndEUrM3c5MWhIeUsycmYxeUVHcnV4ejFobmcwRlZWckJCdmF3TzdyOWY1VmltdWJ1RXBUUmxVQ0F3RUEKQVFLQ0FnQXZMZ1VZU0Z0ZjlKRU5MTzF5ZWowTUhITFNkeHJJcGpRN0VoVnJUdkc4dS95MlFWaDZ5RTFac2JwYwpoV0h1dHNaN0Vad0pFSnA0V0EwaTYzcUdGSFgwYnIzVDgyU1IyY25IbzJSN0w2d09VdFlPSEN4QjE1VUpjZGk5CmtjYS9OTEF3a1BWMWw1Ly9BeWsrRW4rRTdXWFVsMUYxNzd2Ny9ZTWxHeHFmS0RJQnVOUFE2SEd5TndNS1h3VGEKTDU5TENROXRCanMrcEcvVVZpVjRudm5hV0xNa3dvU2YzOTA0blBEQXZ3MU5zZzdzS2UxckQ5SEF5K1JiQzJFUQpIUTgzOGE5MVdRL3dMT1I4U3NKUzlJK0ZkVDZ2YU9jNnFNbWNzck9mQWhyY3ZJNllWcDRhUXowSjBOZTI0MndTCkVCSmh5eVVGeFFjNkxZNTBaVmI5eXd5cFViekZ0U1dNR3VaRlhHanZtQlQ1dUNNR3hHMXFyV1VlaWJrSE5pNzAKT0Fmc3lhbkxRdHUzcEtHVm5jQUFZK3F1eHhicExCdlVPM29wNmJ4elBtZGVNOExvV1JqS0c0eFdnTmdFaDAxbQpobHZLTEJhTlVGRzhHdkY4a1hsNldnZE1ZL1hkb2xyNHlLeS9YMFVlSnFNSjM3RTBKR1IwbDdVS0lOYUxkVWFXCkxzSWRkMW9VeldHbnhkbWRma1c0WUpBZEJ1dGQveER1N0ZTaVM0M25sTmFFeDE4WmFxWjUrL2VRRUx2NFlmQmkKcFVBcU1ORG8rTE1NRk1LM1p2cFVkUXRBMk5DblQxSy83dE9ZWGJOSVZjZExYd250aFNtWENiYmZFM3l0ZThpZwp3djlNSnpmdGhxUmlDdDV5M3lVSGQ2MXVpY2JlQm5OL3MvK1g4b1k3Zmgra0J5aG9jUUtDQVFFQTFmUDllZXFvCi84cTVIRDV4VXZUZ0ROYklaZGtaRWRtQ3EwTEZXRXRFRW0yVVBNTjlYanJRQ1lmeEVGd0c5Y3NsckZtckgvOXIKbU15bGI1UzZUalViS0J0K3RWTk9yNFo3OCtIbFZBL1h6L1FjMEtZQzBweEJ0by80cWllSlZReWlYVEYrZW9IWQpNSkpjKzBVWE9FVlYyRG1QZWczMmtGbFd3MHRBRGU3WllnRTlmMFB4RHpNeUJ4QXlMd2VzWnZnQXVwVFNsd3M0CnRkREowSFJ6SndnR1o1Yy9VR2pLUTIxSWR1ZEZiODVyOUhHZXI2RldZWU40RGF5bU5VUUl2K1ZRdTlDN0FCb1MKY3c3cjI0SHNZaTRlVktISXFQbGpuSW9oN05TOWRSSHl2SFE3a3dObXJxcysxTWdyLzliYjdOaHRyTjZLMDBYOQpLdytlOEcxeHFlcTJud0tDQVFFQTN1MEFvZHlEN3VnMnY3KzhwcnRmaFB4elpIdXhTRkRZL0hEbUhVdk00VUltCmlySG9IaTVldEgwaEhKSzE2VmF4M2tCamR4Qi9NcURMUUZmNkYyM3VLL1Z1azNnNnVYL3hjSjVwSEdnL0xiZFUKUGxBSmV1TDJldFZ4VWFVWWdSaUxNZ29qSW9xKzJIM3pra3hrdVdxeHZ4TG5iSnFGaVJVY0Y4VWxIR21LQ3NJSQpzajF5Y2NhNHAxSmFidDdJa1VkeTJuOGZGblcxRzhoZk5rTGRmdnQ4b1p2TGtpY1l3Rkw4OXJQeDBLREhiZ3g5Ckw2OSs2eWJGN0RGbXNaK0tLRWlpdi9SdFVXUmpQYVZWbEgwVUVWQzJRK29hazF1OGxBOEl4blRycm9DMG9uaG8KUUg5N2NGRnBRTllSS0dLTzRKOU5ISmNNbHkrUlFkN1kxMy92aGI4aWl3S0NBUUI5RFJQdFMxT2wxalpscExXVgoyQnlRUklWeXlmWldNWHluWHVwN2xkcGVyditDbUh4Uk5DemVOVCtYNFVJTUxjV0NQQkxDTEFjV2t4NXEzbElhClhmM1dibU9iMWVwYXUwNzlsOTN6U1NOSm41T3IvQ3dRTDFaVlAwY0hKUDZtNERDU0tkaVVBQXA5TVQ3NWVrTjkKRjBGNmxRSWdROE1HVWNGZGVrRWhJNmFaR3NKMy9SMExWay82UXVRaUN1a2djZm56RkFNV1YyKzVEU1M0R3lnbQoreERMUVdLM085aGttcDVOS1JXenFNSCthTjVvSnZPWElVRnROS2tjM3Z3Q05TVC84WnNyRHhJVGYvZ3BINElyClRHdGI2Z2VmZzh4TjlZcW9veHR0THFWaXNza1RQMXluNE4xamZ2QUFvL045Tm02OEtJS1p4QUdhUnBJT1V0bXAKaDg5ZkFvSUJBSHIxVm9md3pZU1U2TDNTMEFkWENsU2J1am9PVDdhSGdXZWNEaERTb21zTXhaMXlpNGs2SWxxRApPaVE4ZDhJQVk1TW5DTFcvajZrcEwzS0tGQk9nT3VKY09XVjF4MDVSMTZZNmVkZUZXSE9xenZpZnhOclhIUVNiCmZpbCtXb202TSt5aDBzZFdwL1ZaWTJPcVoxUXVHV1ErMVE3K0cvR0VoejVGS3pjRXIzTkhtdXhWSUM3SllVaEoKRUVCZStWbklndjBwYU1oR25HSjZucW1iTC9pK1Zmdjlwc2N5Y1dDRFphdmRqTjk2RHdZUU5XeDc3QkZnRFlNOQpyRnNFbUh1bnRMMFQ0TWdvQ3VVUnNLWjZadnMxL1pKd0tjQmx0Um9sUUwzVjk3a0VuSjJRdEUvL0FPTHV4Sk5TCmY1dzY0SHZjNGZlSENSYkswZC8zUHJ0K2dXclFCZ2tDZ2dFQUJ1WlppNWtnNC8vSmFmeVl1TE9FK2Y5aGwrY3QKSTcyVG9CTU95NGgrSXlxZ2J4cUR0NHc1WWtYY0s5djJxTDhJb3FXQXJTdDZNd3RsUTNYUDJRWk5nTi9QR1g2Ywp5WXF6aXZBOUI1d2ZJTlAzWVJGWHFFQzE0empIL1NsUFloODNGc3JOamw3STA0U0oxdlhoSHJKQnFQdGhzMXMwCmRXcU93SG03Q2MwaTlLVHF1cERrMHhvdFZDWGhUTEJ3M0F3TUJSVktCTG8wWUJwWGtiNytZQUlIVC9VUHJ2RU4KRG9BN0RleStiUlZvYTBFSW5aaGg2bG9TSGRmVkVaWXpKUU40YW5HUzVYaHd1dCtLZFg1VmQ0YWhZbFkvREV4NApXUzVsZEZ2REVoeUhrOTEzUFJMM1BzQW9pMS9keVBVRHVibmVISmUxeHlxc0ZKUXd5YVNxOUJBM1p3PT0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", + "Store": "default" + }, + { + "domain": { + "main": "nextcloud.focus-on-it.net" + }, + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUdERENDQlBTZ0F3SUJBZ0lTQlhBbnY0SnRuSHM0cXNpQmZXMkJxSE5ZTUEwR0NTcUdTSWIzRFFFQkN3VUEKTURNeEN6QUpCZ05WQkFZVEFsVlRNUll3RkFZRFZRUUtFdzFNWlhRbmN5QkZibU55ZVhCME1Rd3dDZ1lEVlFRRApFd05TTVRJd0hoY05Nall3TXpJNE1EUTBNelF6V2hjTk1qWXdOakkyTURRME16UXlXakFrTVNJd0lBWURWUVFECkV4bHVaWGgwWTJ4dmRXUXVabTlqZFhNdGIyNHRhWFF1Ym1WME1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0MKQWc4QU1JSUNDZ0tDQWdFQXp5K2R5aGZBUjlCZExmOWhpQ2R5RzFOSTh5UU14aCtTSDg0ZU13b0YzQ2tHdC9qLwp6ZUJGOThwbDRVeDdvVXVLNlZPNHBLc2Z0ck5mb1hxMThzMmtBY2owNXEwV21EWjE2WW1BQy9FRzdKSGxYdmQ2CmJHWFFYa2syTmJKL1FlNUE2Q01lb3ZFeGdCNjIzYS9waC9HeVhIMEYxWWxQQ1RBZ05TdmRYdmN6d3BPMlUyaFEKTmNOTFd6TDF6SHFzSmhWMWVlZlNpMVRDaVRsMDBWa2Zwdk5qSnVvUkQwTjJCWVM4ZUJiRzFJQ3ZNcnduRjRWSQpVV2Y3MVdJYzNSdWRrSnpMdmNZYlJCRVdxVFRTL2NrUElqdzQ4UFVrVU9IaUZRRXg3NS9TZTR3UE82WTVHOVBnClQ4dlN2bjk0QlZ0TnVSMmRDVGpIRmxVbVd5NlFFTlVDbG93L1ozQ2JrdXVBVWkvZGJpQVBEWmVYZ21kMS82MzEKMzYrK3Y2SjJVdVJwcitPcjlMa2hMcHkwKzJLKzN0Rzk1Z04wcWtUcFkyM2UwS0hoVFBpZmNzZkpacit0d09Qagp4UCtmZ3JBdFF5Y29rSXlFLzZZdU5ydmU1VTZZOGU4VXEybGhQOU10T000Tjc1VWUzR0YrYXNLVW54eSthbzZnCklORkNMSjFuWmRrUlRaL2FkM3JibXBBYk45OWxpMWk1L1pkdzNHZnNORG1HTWZZSkhKT1k5bzd1TUUwTjZDM2oKZzltYVRLc3pYN3Mza1hleDk0TGRjUllEbTlVZW0yU0M2dGpmMGVmUno2eHhyZHZVak5md2JGTThRTlRBd3kvYgpWUEY4dCtRczNXQ2VDRXpMYjBWcSt5VmZwY014VG03RW1FNGpmWExuR1FzYWI4ZFFONXNlOVdzVDVsVUNBd0VBCkFhT0NBaWN3Z2dJak1BNEdBMVVkRHdFQi93UUVBd0lGb0RBVEJnTlZIU1VFRERBS0JnZ3JCZ0VGQlFjREFUQU0KQmdOVkhSTUJBZjhFQWpBQU1CMEdBMVVkRGdRV0JCVHVwamRyL2V4bU5lSHQzUDJkejFBRS9mZzlwakFmQmdOVgpIU01FR0RBV2dCUUF0U255TFk1dk1laWJUSzE0UHZyYzZRelIwakF6QmdnckJnRUZCUWNCQVFRbk1DVXdJd1lJCkt3WUJCUVVITUFLR0YyaDBkSEE2THk5eU1USXVhUzVzWlc1amNpNXZjbWN2TUNRR0ExVWRFUVFkTUJ1Q0dXNWwKZUhSamJHOTFaQzVtYjJOMWN5MXZiaTFwZEM1dVpYUXdFd1lEVlIwZ0JBd3dDakFJQmdabmdRd0JBZ0V3TGdZRApWUjBmQkNjd0pUQWpvQ0dnSDRZZGFIUjBjRG92TDNJeE1pNWpMbXhsYm1OeUxtOXlaeTg0T1M1amNtd3dnZ0VNCkJnb3JCZ0VFQWRaNUFnUUNCSUg5QklINkFQZ0FkZ0JrRWNSc3BCTHNwNGtjb2dJdUFMeXJUeWdIMUI0MUo2dnEKL3RVRHlYM044QUFBQVoweTl1TUlBQUFFQXdCSE1FVUNJQmRodHZyR1RDZzRUeFRpOExxTnhBaS95eGdKVURPNApJSU1XLzQ5aDM0L0lBaUVBcUM3cXhzK1A0UlJnN3c2NXpCcDcwYjg0L2lmMTVpZGZFbW5CRGx1aFUza0FmZ0JzCi9sQVpRNmhlcVJhOFV0RXo1TnpKSHZGQkhIMGxoQ0RSYzRDZUdCanJPZ0FBQVoweTl1T0hBQWdBQUFVQUJLY3IKR0FRREFFY3dSUUloQUxLb0VSMTVRMjNOeHM3R0hYQ3gvV05BN3pHU29UUEZXK3k4eUpEY1ovS1JBaUE1eDhFcQpKMGtOOGM1SHo4a0JIckhmcTVvYWl2bDEwcWtLYnMrKzNQQnBuakFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBCkM3RWhwcWtyVC9UQklLbUtUTDltNFFLMk8yL3luTitxREI5NldtZ2hiaERQMHhBMnNtZnVLVXdCQzc1c0puUjEKUE5hOFk1dEhrNzFyRm5iVGRKejFxelZSZTdJWDUwOE43R2hvblU5VXduTXdrdHdUQS9PZ2VjZjg3NkZheGJCdgptL0R1QllqYU9vVTBiMGdYYmErQzJLVjdOcE55c1lPYjNVNXN0MThxMFI5bk5wZFpOYkRKSDl1S3dieTRjUHFuCmtUNnJHc0ZFclFESTZvb1drRVgzbk56dUNKVlRra1QyNWZ6SE40dXVVOWUxK2t2SXZZMG4yK0c3am9PdVF2L08KYXdaeW9BS3I5dzdxQkRjRjVxZi9qVkpRenIzNmZZTzdYdVUzbE1EZ2ZPYlVTTDFGdEV0VkNyc2hiQjQyaFRuTgpRa0dhbm5JK1RVWTBaWGhSS3l1VjZRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoKLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZCakNDQXU2Z0F3SUJBZ0lSQU1JU01rdHdxYlNSY2R4QTkrS0ZKand3RFFZSktvWklodmNOQVFFTEJRQXcKVHpFTE1Ba0dBMVVFQmhNQ1ZWTXhLVEFuQmdOVkJBb1RJRWx1ZEdWeWJtVjBJRk5sWTNWeWFYUjVJRkpsYzJWaApjbU5vSUVkeWIzVndNUlV3RXdZRFZRUURFd3hKVTFKSElGSnZiM1FnV0RFd0hoY05NalF3TXpFek1EQXdNREF3CldoY05NamN3TXpFeU1qTTFPVFU1V2pBek1Rc3dDUVlEVlFRR0V3SlZVekVXTUJRR0ExVUVDaE1OVEdWMEozTWcKUlc1amNubHdkREVNTUFvR0ExVUVBeE1EVWpFeU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQgpDZ0tDQVFFQTJwZ29kSzIrbFA0NzRCN2k1VXQxcXl3U2YrMm5BekorTnBmczZER1BwUk9OQzVrdUhzMEJVVDFNCjVTaHVDVlV4cXFVaVhYTDBMUWZDVFVBODN3RWp1WGczOVJwbE1qVG1obkdkQk8rRUNGdTlBaHFaNjZZQkFKcHoKa0cyUG9nZWcwSmZUMmtWaGdUVTlGUG5Fd0Y5cTNBdVdHckNmNHlycXZTcldtTWViY2FzN2RBODgyN0pndmxwTApUaGpwMnlwelhJbGhaWjcrN1R5bXkwNXY1Sjc1QUVhei94bE5LbU96am1iR0dJVnd4MUJsYnp0MDVVaUREd2hZClhTMGpuVjZqL3VqYkFLSFM5T01aVGZMdWV2WW5udVhObkMyaThuK2NGNjN2RXpjNTBiVElMRUhXaHNEcDdDSDQKV1J0L3VUcDhuMXdCbldJRXdpaTlDcTA4eWhEc0d3SURBUUFCbzRINE1JSDFNQTRHQTFVZER3RUIvd1FFQXdJQgpoakFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQWdZSUt3WUJCUVVIQXdFd0VnWURWUjBUQVFIL0JBZ3dCZ0VCCi93SUJBREFkQmdOVkhRNEVGZ1FVQUxVcDhpMk9iekhvbTB5dGVENzYzT2tNMGRJd0h3WURWUjBqQkJnd0ZvQVUKZWJSWjVudTI1ZVFCYzRBSWlNZ2FXUGJwbTI0d01nWUlLd1lCQlFVSEFRRUVKakFrTUNJR0NDc0dBUVVGQnpBQwpoaFpvZEhSd09pOHZlREV1YVM1c1pXNWpjaTV2Y21jdk1CTUdBMVVkSUFRTU1Bb3dDQVlHWjRFTUFRSUJNQ2NHCkExVWRId1FnTUI0d0hLQWFvQmlHRm1oMGRIQTZMeTk0TVM1akxteGxibU55TG05eVp5OHdEUVlKS29aSWh2Y04KQVFFTEJRQURnZ0lCQUk5MTBBblBhblpJWlRLUzNyVkV5SVYyOUJXRWpBSy9kdXV6OGVMNWJvU29WcEhoa2t2Mwo0ZW9BZUVpUGRaTGo1RVo3RzJBcklLK2d6aFRsUlExcTRGS0dwUFBhRkJTcHFWL3hiVWI1VWxBWFFPbmtIbjNtCkZWaitxWXY4Ny9XZVkrQm00c04zT3g4Qmh5YVU3VUFRM0xlWjdOMVgwMXh4UWU0d0lBQUUzSlZMVUNpSG1aTCsKcW9DVXRnWUlGUGdjZzM1MFFNVUlXZ3hQWE5HRW5jVDkyMW5lN25sdUkwMlY4cExVbUNscVhPc0N3VUx3K1BWTwpaQ0I3cU9NeHhNQm9DVWVMMkxsNG9NcE9TcjVwSkNwTE4zdFJBMnM2UDFLTHM5VFNyVmhPays3TFgyOE5NVWxJCnVzUS9ueExKSUQwUmhBZUZ0UGp5T0NPc2NRQkE1MytOUmpTQ2FrN1A0QTVqWDdwcG1rY0pFQ0wrUzBpM2tYVlUKeTVNZTVCYnJVODk3M2paTnYvYXg2K1pLNlRNOGpXbWltTDZvZjZPclg3WlU2RTJXcWF6enNGckxHM28ya3lTYgp6bGhTZ0o4MUNsNHR2M1NiWWlZWG5KRXhLUXZ6ZjgzRFlvdG94M2YwZnd2N3hsbjFBMlpMcGxDYjBPK2wvQUswCllFMERTMkZQeFNBSGkwaXdNZlcybk5ISnJYY1kzTExIRDc3Z1JnamU0RXZldWJpMnh4YStObWsvaG1oTGRJRVQKaVZERmFub0NyTVZJcFE1OVhXSGt6ZEZtb0hYSEJWN29pYlZqR1NPN1VMU1E3TUoxTno1MXBodURKU2dBSVU3QQowenJMbk9yQWovZGZybEVXUmhDdkFnYnV3TFpYMUEyc2pOalhvUE9IYnNQaXkrbE8xS0Y4L1hZNwotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==", + "key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS1FJQkFBS0NBZ0VBenkrZHloZkFSOUJkTGY5aGlDZHlHMU5JOHlRTXhoK1NIODRlTXdvRjNDa0d0L2ovCnplQkY5OHBsNFV4N29VdUs2Vk80cEtzZnRyTmZvWHExOHMya0FjajA1cTBXbURaMTZZbUFDL0VHN0pIbFh2ZDYKYkdYUVhrazJOYkovUWU1QTZDTWVvdkV4Z0I2MjNhL3BoL0d5WEgwRjFZbFBDVEFnTlN2ZFh2Y3p3cE8yVTJoUQpOY05MV3pMMXpIcXNKaFYxZWVmU2kxVENpVGwwMFZrZnB2TmpKdW9SRDBOMkJZUzhlQmJHMUlDdk1yd25GNFZJClVXZjcxV0ljM1J1ZGtKekx2Y1liUkJFV3FUVFMvY2tQSWp3NDhQVWtVT0hpRlFFeDc1L1NlNHdQTzZZNUc5UGcKVDh2U3ZuOTRCVnROdVIyZENUakhGbFVtV3k2UUVOVUNsb3cvWjNDYmt1dUFVaS9kYmlBUERaZVhnbWQxLzYzMQozNisrdjZKMlV1UnByK09yOUxraExweTArMksrM3RHOTVnTjBxa1RwWTIzZTBLSGhUUGlmY3NmSlpyK3R3T1BqCnhQK2ZnckF0UXljb2tJeUUvNll1TnJ2ZTVVNlk4ZThVcTJsaFA5TXRPTTRONzVVZTNHRithc0tVbnh5K2FvNmcKSU5GQ0xKMW5aZGtSVFovYWQzcmJtcEFiTjk5bGkxaTUvWmR3M0dmc05EbUdNZllKSEpPWTlvN3VNRTBONkMzagpnOW1hVEtzelg3czNrWGV4OTRMZGNSWURtOVVlbTJTQzZ0amYwZWZSejZ4eHJkdlVqTmZ3YkZNOFFOVEF3eS9iClZQRjh0K1FzM1dDZUNFekxiMFZxK3lWZnBjTXhUbTdFbUU0amZYTG5HUXNhYjhkUU41c2U5V3NUNWxVQ0F3RUEKQVFLQ0FnQVZMaGYzcmVxUkxOZ3B1SjYrMkNiT2E2V0hLRVgwc2JZeXh0UElMSnZNRlpidDZHZzJJcTdrYXU0ZQpxYjZiRHVtYUpWM2pMNVNPdDlMc2poVXdSM0lmQzBKd205SGdma2pGakFjK3NVVjA3N2FVRG12c2VEMWtpM1Z5CjZJRjJrRkJWcXRRWjhqQTQ3eFdMU2lMRWdVMHJnL2huQzZJUnlBMWRnaWpLUHRrdGFLNU40OW0zU3A5WEtRN1UKVFlJYkRwSGVMczIrUXFHZko1N1g1cFdFR3E0bDJlM09oL3RMdGNzU2pRN2NjSFNqUDNWN21SRFFpYUhHcVpZQgpJSVByWWF3T1dzU0tJU1BBNlNQY245amY0TCtDeFNkbVFWYVJzU0tWWXRyclF3dlhuRGJnV21PUnBMNHhqVDhNCkdua0g2emdVMWtJUlRXUEl2eW9wSGxnbERjZE9zUHM1RDNKZ1lIeU9Icm5DejFEbnhMRWl1Yk5OTTJnMzJzVmUKOGJ2dGlEY2tDUEc0Wk1weW5RYjFGY0ZvQUxqNTZyTUUvSXlYbENQaXd1MUcrVXFlTUxubUczaDQwNCt2RHRudgpTS2hsb3ZWV1p4WlI3V2xVd1lVM1FTQjdRMWYwMXExckRxY0EveXI1bWx2YWpHQW5UVVBReWFVM2t1M1FUQm1WCnVocFY5eFN1dElKSTRkTklxZkJqcTNTNzFPTDlsWkpEVE1wVXgxemsrUFJSWGlJR281YzJJUEJ4SVZ1RnFUdDIKOUNJNDhKUGZ2K2EwZjV1SjU4aVFabVA3TzJldmFIOWRYUDdnR2VQSWpsSStod09NM3pCSHBkUTlHRWpNK29YQworY3QvUmZka2RXelMweHpjcXM0TGZPYktKTVd3NFN6TE01Nk45dXlHRURuUTVoRHNiUUtDQVFFQTc4RzE3cEpzCldPTE5DQVRZNkJqMHZmK3FtVFZ6aHBVYXQ0dkhIUWVGeUtKUTQ3NUtSekpHdzJVTXZrR1JPRmhlUWM3UHVFRi8KS2hvQi9KbzdTOGJqWCttR1czWHJtdEVZOFNoUEVtTmpsK0J0YUx6ZURUSXRFWGlEalRlYVA3SEtWVlV6NVROLwpGSENOU3BqaU9OUlIyczI1MUdCUVBlVW5tRmVEc3l2TUJBbTAyRkFJNk14Yi9CMm4yR1Jrb3FDTXJvZ0swY3RoCjh2YjJwT3hGZUJhclBydmZaQTBSem9FRTc5S2FKaDROV3ZYWHJuZkFaQytIU3JJZWc1WldTdDBLTCtMVi9yTG8KTndHaTR4WWFnYWJFSzE4aEdVRWtobVJGcXFvYlZaRVI1aWNGUGJwZ2FmNXFmSkNsVWM1ZXlXMWFac21FYzVpMgpXWnRoQ3BNZjhjdlFld0tDQVFFQTNUa0J0V0hDaG9KeUdMZ3ZVZ0RXSUFqQXpjRTl6ellHK3RkdERhVTI0QlA4ClRSajNhNEFuekJ5M21COU1DY2J5bVMrTjFDWDdHSnBjVnQ4ZjBxbURzUzErUVFEc2xrdWJPL2dZd085ZjV4RDIKTHZJcTJpL2RuVnI5MXBVVFhEcmU1Qi9kb0VuYzdQODhUV3MyRWY4OEVucFM1dnMwaEZUcEJ2b2lvbWthRkZ2VQpuTG1NRWhBVjFScEJIN0pKT1lsUGRmRXo4d2orNVVxcGRibmpQaXZZMnJESVVpbzUrNkw2aXV2K0NRTU8yY3ZyCkczYjhCWktOOHlSTTdQdjBtaUI2SkxwOTNKdXFVYjdDZms0TnAwVFF3cyt2eWdHeFNKaFhNbjFxTnA1UVllMzYKdEF4YUZPVHo2U1k4REhUMHBCYkNqcXRIQWd4RWJ5Q0VUbVVsb2NRemJ3S0NBUUJUMGVWSkF1ZmVLMnlDNFM3ego5Y1dhcDBkOVNMS2Eyb1g4cFdGM1JLb0ErcjVNNExvWEtmeVRVMENoUTBzQjUrTU1Ic0dBS1dYTDBrdmZoQXcyCjhkR01OcGhDWVhkOUtKMFBzb2Z5WmN6cnpBcDBFNU9PQ1h5NEh1bmU5UkY0TXpBSnBULy9ZWUdNSTgxQnh6RlAKck9yeEUvdGp4RWhKVzFQOGJwd2NoN05MdGhrRGh2ZVdhOXU4eUtGbGhiT3BKM2dIaklnNzBGN3VFbWtvUDNJSwpDZUxVaTlvTm9JUVpMZ0lMMWhVT1BuTnMyWVlOK00vS050T1Z5YS9oVVMzWi9tMFJVTHgvend4Z0xySkRzZmFTClhUczM3b29qeWlKNjJaT0JsdmIzYzBCT3RsV2V2d24yQkh3MkVGdTd2ZXBsZ1ZXWm1kbzBqNjh3cEtISWtLY2EKWWFjQkFvSUJBUUNuclMvWVZWTG1OVFZaK3pFU3pNTi80R0tURWVkUmliZmNwVEJwYVZLZ29VVlpBcFYyaTlxZQpZUjNmVmNtQ2w2TUY3UDlwVDZoMHkzczE5VVRmbmRETm1KZmJtV0c1d1hEV0VZUmhxSTVlUzRMdHJteEFtSXMzClcrS09wTXZaMmwxYk43UDZiRUhoK011eU9wTHZMVEJSS1JweExQSnZZeFNGVDA2MUgwaS9LYU9MYnkvMStPOHoKYVFUM2kyRHBGV1IvRnVXelRwdzFHMVE2Z1R6MndMRkxnVGMwNEFDMjlKOUdjUDFKdzJHY1AyM2lrVnNRdGphVgpsbXdnTEJFSVNabUxBVGVvNE94RnJYc3AxT3VRWHg2RXFucXBlSUx4YlZhYVZHa1BJUXY0VGpMNkNXcTE3NXZZCm1qeGxqTGhwTHo4a2VEb0lHVmc5aXIzOTFiaWlWbDVOQW9JQkFRQ2xlZ0dRbHNMYlNCN1hmaStxKzFKUFhlWSsKdy9zUjNwQ1ZwWnRmbFZBUW9RN0tER3lxa3dCTlZxbUtzeERwN1JLSUhxc1JTWXZ5NE1QaWVBa0ppOGtFMCtjSApIZ0tNWGxEaWVUenE1N3RVNnZQN05SU3oyTzZuTzZiWUR2VVduS052NjUzUlVPcHRRaFdicW9TU2tuSnRNc2ZECnQxaEZBWlUzMkYrVGJ0UXhjTXdJVFJxaHVRL251SkZQc1VIMlovanYzWDhkejJDdjRxaWFLRFZMSDBjalcwaWoKZE96c1dtMmQzQ2ZXL1ZhUTE1bzJUeXV0WHNpQXBCL0VsZ1pMWDgzdHVLVHkyRFE0Z01ZUkZtQ1NLRmd0UitBRApMQkJEQnRTdEdFMGpIbk5qVE1COG4wKzcvMkdhVEg4TkJTRTd5dU9yR0hZRmpGZk80alFNSkgwb05QK1UKLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", + "Store": "default" + }, + { + "domain": { + "main": "drawio.focus-on-it.net" + }, + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUdCakNDQk82Z0F3SUJBZ0lTQlRQc1NPelI2NEYzdGp3VEI0bm1YTEplTUEwR0NTcUdTSWIzRFFFQkN3VUEKTURNeEN6QUpCZ05WQkFZVEFsVlRNUll3RkFZRFZRUUtFdzFNWlhRbmN5QkZibU55ZVhCME1Rd3dDZ1lEVlFRRApFd05TTVRNd0hoY05Nall3TXpJNE1EUTBOakV4V2hjTk1qWXdOakkyTURRME5qRXdXakFoTVI4d0hRWURWUVFECkV4WmtjbUYzYVc4dVptOWpkWE10YjI0dGFYUXVibVYwTUlJQ0lqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FnOEEKTUlJQ0NnS0NBZ0VBck0rNmgwYXp0UFJFVXdmaHlBdWFYQ2J0b3FnZGF0cWFkTDFaaXNUMXAvYWdGd2VOTHBOZwphQmtlM3daTTFYbUh5UDJUbTN6NWZmNGdCRVJJMmsxWCtobHI3bXBGWm9PN3ZJWWRmUFJYZTVBVlhyRDVoRHc3Cm9jYzRSNm03a2pCa3hkS1NvTjdMaFhSV1JPNjNYc0Jmcnpna1hPRXhqYVIyMXFJYXg0enVuMWV0K0ltMjBxT04KTkFOWlVZcXJkaGx3SlFnOXpEOTlCQy84MjZjN0NadkhldTYzYU1KSkZSSHFkajd0MzM5VThSMmtJNkMrM2lGKwpiYk03ZmVHaHZnd2N1UzVWeHJqWGZyQlM0c0JaeU50NnFvbG9rU3lSQlgwRGwzQ3FBK0l5R1E3VU5na3ZnTnhWCmVIeWN6UXRjNDVSU2xIeTlwVUFBVUt0eitLY2Q4YTZ2Z1dpazZFbFNpbUJwNHFTd1RmczFjZHdFVWs2L1ZUL24KZk5TY0ZJNVZzV1lSY3liTnptNEM2Sm9YL2o5SlcwS2RFRjZZZ2JGUE1seitaMHV6dUdkZFVtaXZSS2RtYzQ4bQoyN2RyV01yT0J5Q0NJUWVwb3VpT0xWZnhoOXB2MEt0UTNFQlZkeW9ydE5Kbk5JOFVoc1RYT0h2L2FDRGVCdzFxCmQrcU0wSFlzTUsyZEFVMk02UHFzcUdVSFpvU1p1OTRYNTdnRW1NS3JIKzMwb3U0MEdDTXM0c0szRDR0aGYwaUkKZmJJT2t5R3RobDJXN05TRGlEM3gvN2RTK0NLZkhIOEtLVy9ISEZCMjlKMEhEK2NPNjJKVVltajB1YVNHYTI2dApqR0lqTWRVUkNLUzJrelN2d01SWUhJYzBBbzJvdy9KREdQbjVFcDZ2bEpWNHE3UGRUUjRXMlhjQ0F3RUFBYU9DCkFpUXdnZ0lnTUE0R0ExVWREd0VCL3dRRUF3SUZvREFUQmdOVkhTVUVEREFLQmdnckJnRUZCUWNEQVRBTUJnTlYKSFJNQkFmOEVBakFBTUIwR0ExVWREZ1FXQkJSdUJrTUpkSzBrVW1XV3djUzdMZCtwbVZSeXhqQWZCZ05WSFNNRQpHREFXZ0JUbnE1OFBMRE9nVTlOZVQzaklzb1FPTzlhU016QXpCZ2dyQmdFRkJRY0JBUVFuTUNVd0l3WUlLd1lCCkJRVUhNQUtHRjJoMGRIQTZMeTl5TVRNdWFTNXNaVzVqY2k1dmNtY3ZNQ0VHQTFVZEVRUWFNQmlDRm1SeVlYZHAKYnk1bWIyTjFjeTF2YmkxcGRDNXVaWFF3RXdZRFZSMGdCQXd3Q2pBSUJnWm5nUXdCQWdFd0xnWURWUjBmQkNjdwpKVEFqb0NHZ0g0WWRhSFIwY0RvdkwzSXhNeTVqTG14bGJtTnlMbTl5Wnk4NU5TNWpjbXd3Z2dFTUJnb3JCZ0VFCkFkWjVBZ1FDQklIOUJJSDZBUGdBZFFETE9QY1ZpWHlFb1VSZlc4SGQrOGx1OHBwWnpVY0thUVdGc01zVXd4UlkKNXdBQUFaMHkrU1A1QUFBRUF3QkdNRVFDSUFGVjRoWGR2dFpISGNZRjVnWVY1ZHFRTndRMU1PYzFyS3pwUThsZgo0Tmd1QWlCZXozemMyZDBFeUptWHZsRVFKTWxiYXBJc2ViZnI0eEhvMzR4N1FVSzYxQUIvQUJxTG5XbEtWNWpJCm1hREtpTDMwajhDMFZtRE13MkFOSDNIMGFmL0gwYXlqQUFBQm5UTDVKaXNBQ0FBQUJRQlpEV0hzQkFNQVNEQkcKQWlFQXpvOEdvd01TNTMrb1pJazVPcnhjLy9OZVI3TGh6VE1aL0t6clpwb0VxNU1DSVFDTm1ZQTA1TktRK0ZjOAptVlhBb1RPazJ0S1FaeW5BYTJmU3lSZzg0c1hNaXpBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQWpaUHRXRkhjCkVIQmgyZThzVnRWK2JHVW1ibC94REhCeU1TbzFrSWwrTS9nRVhDbjJROTJ1YmhxQmpXS1QyUlVPVEZpV2FOSWQKdWd1VGhkdmwwUHNlQmhFMGhqMSt6K3pyWml6bFdKa1RYeW9uTU8vUEdyVW4vVXE1R2ZNeVBGSk8rL2Z1QVh1ZAp1RWNGcGlBOHNQeWxsYnlaQUdBUG1jZmNxa1EvSGFwU2QyMlVVMTkrVG4xb21QN2h0akRyQ2VaWHhCN3hNU1hvCmdaVEVqcGxXV1BwZDAzK1BHbTFnM05veER6MUlKTmpiWU1QSUkwTlhtL3pvOXkwL01pVGtteERkTGVGNE9FQi8KWlMwZ3kwSXJ3bTdKbVJLdWJDUXEwbVR3SiszdUQyY011SGJvb0FwbERiRDd2MEZGYUFZbkl4MEF2QXZrSHBGTAprb29tR0pyaWlSdlZEUT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGQlRDQ0F1MmdBd0lCQWdJUVdnRHlFdGpVdElEemtrRlg2aW1EQlRBTkJna3Foa2lHOXcwQkFRc0ZBREJQCk1Rc3dDUVlEVlFRR0V3SlZVekVwTUNjR0ExVUVDaE1nU1c1MFpYSnVaWFFnVTJWamRYSnBkSGtnVW1WelpXRnkKWTJnZ1IzSnZkWEF4RlRBVEJnTlZCQU1UREVsVFVrY2dVbTl2ZENCWU1UQWVGdzB5TkRBek1UTXdNREF3TURCYQpGdzB5TnpBek1USXlNelU1TlRsYU1ETXhDekFKQmdOVkJBWVRBbFZUTVJZd0ZBWURWUVFLRXcxTVpYUW5jeUJGCmJtTnllWEIwTVF3d0NnWURWUVFERXdOU01UTXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUsKQW9JQkFRQ2xaM0NOMEZhQlpCVVhZYzI1QnRTdEdaQ01KbEEzbUJaamtsVGIyY3lFQlpQczArd0lHNkJnVVVOSQpmU3ZIU0phZXRDM2FuY2duTzFlaG42dncxZzdVRGpES2I1dXgwZGFrblRJK1dFNDFiMFZZYUhFWC9EN1lYWUtnCkw3SlJiTEFhWGJoWnpqVmx5SXVocnhBMy8rT2NYY0pKRnpUL2pDdUxqZkM4Y1N5VERCMEZ4THJIemFySlhuelIKeVFIM25BUDIvQXBkOU5wNzV0dDJRbkRyOUUwaTJnQjNiOWJKWHhmOTJuVXVwVmNNOXVwY3R1QnpwV2pQb1hUaQpkWUorRUovQjlhTHJBZWs0c1FwRXpOUENpZlZKTllJS05MTWM2WWpDUjA2Q0RnbzI4RWRQaXZFcEJIWGF6ZUdhClhQOWVuWmlWdXBwRDBFcWlGd1VCQkREVE1yT1BBZ01CQUFHamdmZ3dnZlV3RGdZRFZSMFBBUUgvQkFRREFnR0cKTUIwR0ExVWRKUVFXTUJRR0NDc0dBUVVGQndNQ0JnZ3JCZ0VGQlFjREFUQVNCZ05WSFJNQkFmOEVDREFHQVFILwpBZ0VBTUIwR0ExVWREZ1FXQkJUbnE1OFBMRE9nVTlOZVQzaklzb1FPTzlhU016QWZCZ05WSFNNRUdEQVdnQlI1CnRGbm1lN2JsNUFGemdBaUl5QnBZOXVtYmJqQXlCZ2dyQmdFRkJRY0JBUVFtTUNRd0lnWUlLd1lCQlFVSE1BS0cKRm1oMGRIQTZMeTk0TVM1cExteGxibU55TG05eVp5OHdFd1lEVlIwZ0JBd3dDakFJQmdabmdRd0JBZ0V3SndZRApWUjBmQkNBd0hqQWNvQnFnR0lZV2FIUjBjRG92TDNneExtTXViR1Z1WTNJdWIzSm5MekFOQmdrcWhraUc5dzBCCkFRc0ZBQU9DQWdFQVVUZFlVcUVpbXpXN1Rick95cExxQ2ZMN1ZPd1lmL1E3OU9INWNITENaZWdnZlFoRGNvbmwKazdLZ2g4YjB2aSsvWHVXdTdDTjhuL1VQZWcxdm8zRyt0YVhpcnJ5dHRoUWluQUhHd2MvVWRiT3lnSmE5enVCYwpWeXFvSDNDWFRYREluVCs4YStjM2FFVk1KMlN0K3BTbjRlZCtXa0RwOGlqc2lqdkV5RndFNDdodWxXMEx0empnCjlmT1Y1UG1yZy96eFdiUnVMK2swREJESEVKZW5uQ3NBZW43YzM1UG14N2pwbUovSHRnUmhjbnoweWpTQnZ5SXcKNkwxUUl1cGtDdjJTQk9EVC94REQzZ2ZRUXlLdjZyb1Y0RzJFaGZFeUFzV3Btb2p4akNVQ0dpeWc5N0Z2RHRtLwpOSzJMU2M5bHliS3hCNzNJMitQMkczQ2FXcHZ2cEFpSENWdTMwalc4R0N4S2RmaHNYdG5JeTJpbXNrUXFWWjJtCjBQbXhvYmIyOFR1Y3I3eEJLN0N0d3ZQcmI3OW9zN3UyWFAzTzVmOWIvSDY2R055UnJnbFJYbHJZakkxb0dZTC8KZjRJMW4vU2d1c2RhNld2QTZDMTkwa3hqVTE1WTEybUhVNCtCeHlSOWN4MmhoR1M5ZkFqTVpLSnNzMjhxeHZ6NgpBeHU0Q2FEbVJOWnBLL3BRclhGMTd5WENYa21FV2d2U09FWnk2WjlwY2JMSVZFR2NrVi9pVmVxMEFPbzJwa2c5CnA0UVJJeTB0SzJkaVJFTkxTRjJLeXNGd2JZNkIyNkJGZUZzM3Yxc1lWUmhGVzluTGtPclFWcG9yQ1MwS3labWYKd1ZEODlxU1RsbmN0TGNabklhdmpLc0tVdTFuQTFpVTB5WU1kWWVwS1I3bFdibndoZHgzZXdvaz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", + "key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBck0rNmgwYXp0UFJFVXdmaHlBdWFYQ2J0b3FnZGF0cWFkTDFaaXNUMXAvYWdGd2VOCkxwTmdhQmtlM3daTTFYbUh5UDJUbTN6NWZmNGdCRVJJMmsxWCtobHI3bXBGWm9PN3ZJWWRmUFJYZTVBVlhyRDUKaER3N29jYzRSNm03a2pCa3hkS1NvTjdMaFhSV1JPNjNYc0Jmcnpna1hPRXhqYVIyMXFJYXg0enVuMWV0K0ltMgowcU9OTkFOWlVZcXJkaGx3SlFnOXpEOTlCQy84MjZjN0NadkhldTYzYU1KSkZSSHFkajd0MzM5VThSMmtJNkMrCjNpRitiYk03ZmVHaHZnd2N1UzVWeHJqWGZyQlM0c0JaeU50NnFvbG9rU3lSQlgwRGwzQ3FBK0l5R1E3VU5na3YKZ054VmVIeWN6UXRjNDVSU2xIeTlwVUFBVUt0eitLY2Q4YTZ2Z1dpazZFbFNpbUJwNHFTd1RmczFjZHdFVWs2LwpWVC9uZk5TY0ZJNVZzV1lSY3liTnptNEM2Sm9YL2o5SlcwS2RFRjZZZ2JGUE1seitaMHV6dUdkZFVtaXZSS2RtCmM0OG0yN2RyV01yT0J5Q0NJUWVwb3VpT0xWZnhoOXB2MEt0UTNFQlZkeW9ydE5Kbk5JOFVoc1RYT0h2L2FDRGUKQncxcWQrcU0wSFlzTUsyZEFVMk02UHFzcUdVSFpvU1p1OTRYNTdnRW1NS3JIKzMwb3U0MEdDTXM0c0szRDR0aApmMGlJZmJJT2t5R3RobDJXN05TRGlEM3gvN2RTK0NLZkhIOEtLVy9ISEZCMjlKMEhEK2NPNjJKVVltajB1YVNHCmEyNnRqR0lqTWRVUkNLUzJrelN2d01SWUhJYzBBbzJvdy9KREdQbjVFcDZ2bEpWNHE3UGRUUjRXMlhjQ0F3RUEKQVFLQ0FnQkJIcVl6ZzdrRVgyZS93aUNhdVlTWlpUSDNNVktraVd2YXdkK1VJMVJPenVqVXhNdTIyV0ppMTlTQwpSbVY5ckNZMjN4ZFlhR2U3eXA5Vi9FVlh2ZjJCQ1VOYXZFRWF1Rmx1V1R1VGNwL2t1QTdWZCtzT29ZUDNHcE5pCnJkczQ0M09WK0J1NDh6dk9ObUNyNlNqQVU4MjZ3WFV5YXNtNWpsZ1oyVXd1RmpWMVpoendvelI1ZTVnaUdZRDIKOFVKYlpvcVQ2ZDhmc0d6enZ3R1I1QnFqTEVpblVuMWF4SnUxak9MRlhFRlhEeXg3RDZoaXBKaElMR2J2LzdKVApaVXNGeXBxb1RZV1ZOT0kvbzBJWW9GTTFGVC9NTTZ0cnlWZDhzZmRBZ2Z3UEtwV21TNmc4RklvS0RQMUlRZXowCmQydXhkcHNIeVZuTmc2aWF2WUVlR2h0MmoxVWkyRGl1UlZEYmlvckR6TjBjUk96WStMTjNHU0JDZTU1R2duNkgKY0dlbHN1T2FCcFd6SnFvUGNYYkcwbzRXd25MWnRRQktFM3crS2xEOU8wRk10ekhmMkZQMnFwVjZqNDRqVWo0RApRRWNpa21yWjY4cWw2MnFwSUpWRE1oVlgxelVreUp4SitHWmd6M0Z3ZEZscmh5bnAyZzM0V2VuSkJSVGl0cHFPCkh6RS9HSEtRK3pjdEY5aC9wK1R1TGl4NUJISk9EdDlvdTVNYkJrSWlSTGlvb29vUTNHU0M2K1NnRmRFOHNTZlcKMmdTaFBFZUI4bXQ4VVhNcHVuUGZ2RWsyTGl2dm4xU2hObEZRSGM5dHpBMVFtZzA3dEYyZWpHdWNua2tSWDQrYwpTTjNvYVc4Z013T3ZKRE4ySkY3Mm51bTE0ZzZkcmVEdmpkNFpsZHVqdzliaklEVXZRUUtDQVFFQXpxU1d5QWg1ClNYNHlac1NqekN2eC9NUzZRZlJKR042SmxMUXJGQSt1Tk1jOVM0aUF3dGpHak9MTStlMHlyYlRhWnZhRHltM1YKc2xSMlp3TDhCeldGdzZlcW9VeUhtYkVPMmpZUXNwOHBwd1c3ZVFOQjhucldMNC9ZU3R5d3JWeWJXS1BuOENSawpiWnlhWVRGY3p1Rit4STExeEJ6THAwa1N2djhwS2VEOHZUSWtiSzZ0R2VnclFmNFpqaTlZdnNGbUxhUkdyTUhhCndDM3J1R08rK2dMVHBZa1dBWEI2dWdVaVQ1N1BwbndXVFBIVHB6REtkZHlwSnJzaFY4WTlBQXViKzJaMjg0ODgKekFudyswcE5PUlVCT0FiUjZXYWR4ZUN1dUpxb3U1cERIS1pPVGMzdStjcHZOOVVhNjZRalV2bGk3YWFGaWw0cQovYXZ0NG1YZ2pWU1pyUUtDQVFFQTFoWjUxRG9OZlFYcE43RUZ6R3gwZEE4Vk9XcFF4dW0vUHR2STBKeUd4Z3pLCjJ6RE5WVWVYbTRnSTlEU0JUenNEWWUwaWJ5WXM2aklkTjAxalRpeXp2a2lMaHNOZndmUlJ0aUtRMXlSNE0rK0sKRDA2MHAvTnk1N2JRYUVMVWtCcndraG13Mk5VMmRhOThXUkxaV1NzMEtTUk5BUmpHSm1GVnlzM2Z3UkJDTDIwQgpEdVJJMHpFMmo0ckZsMW9rUU01Nk93byt1M3E5dmhuakxKUVdORlRsMU9Tc1ZBcnU0eFlkUHcvbDljN2lsR2tUCm1kSDNjdGFjZjRqanBRV2crWFVwdmFSa2tMV1FCUktQMVZoWkZweHkxcHRIUGt0cHRnS0dLbzlMdWoxSitaanIKRVhlUTNBWTdDVk9ET29VZDQxTlZZOU9JQ0h2TGFFK0F0SlIxc215c013S0NBUUJ3ZTVOQUM2ekozcEhjOHdrZQphSVZ1ekQ5L0MxU0czd3dSRUFtcS8rWWFBS0pTN1ZqNXR6cE5FbC8xWTdLRWI3KzY4RkZJN1lTM2I5YUx1RW9zCk9tdzMxcHJBOW9HUm5abXlHbC80ZXo4WEZiMjQzNWNVUU4wNlFwakFGMlZzMk00TzhCbWUxSkIrUWhLZStWbkYKbTJWLzVHakllY3c1b1VNOUNIUUZ3ZHlSdUN1dnBWM0FqbXFObjUyVmtoeENxYy9PNUc4OE5zRzJmc2lqTkZpTwppdDllYWtLNlFkbnNURU1qQ0JXTVVGdHJRdSt0UUpmVWxHclhGR0hQLzY3UXlZRDgxZ2ZHQ0tCVmlNdk9YZUd2ClFzbkpENTFQNlhYVWNydG83WGNQdDZiMGYycDhXNjdMOWUrWWVyNE9xdWcza0Z6VGRDT1k4QzJDckFYdmlQazAKdFdwNUFvSUJBRHBVWlYwdGMvOWNYTzZQak1UbHg5VFhSekVkaG1Tcnl5K1ZNbUdrUkJReDZCTlFlS0dEb0FzQQpSWEJEM2ZkNFhMT1JxSkFnRnB5NGlyMUdtSWYwSmdUeVB4RzRxWjV1c3RTdEZrbUg1amhBUzUxZ0ZGaXVPK0JtCkx1STVVekR3Smh1b1pFYXYwT2EvcVdHYmdSeUthT3ZNdUM1VVVhaWpYSHlsR3hHL0hFbFBxYm9rK0xLUjlndW0KQTYvNUgyZUkya1M3eGR2TzFXTzJLZTg3YWRGWVVFWnhCNExlZDdmbmpwQmdCSWUwbG9kWkdiNFBOeHhTM05EaQp1eU43SlNEU2kwemdQWVl2OGMxd0FVQmZrZVpYT2ZLKzIrcGRJYkExZjlpWXNrbEw2WnZYempRMEg0UFRMc0tiCnZtVnpYM0ZRZ3pOdnJ1Q2cyZ3JSbm4rVTgzeHBuNEVDZ2dFQkFKWG5mcWpQUmdVcjJaeVc0LzgwSlZvWVIwZ3QKaHhuZ21FYW5iMUxKSUxGNVByWk1HQzJrNHBLbGZ3cC8rRm4wNW84QzZGTWVmOEE2b1k5QnVERDh6TWRvRTlyWgpUSlQ3TGxldUdnNGRkbHIrQTAvRlQ2VzY1V3k0a2JFMmtJZC9lclJKdWptQmJQUFdsNGduZkJSa1ZNYVpKSVo1CklEbVdrb09MQVVlOVdCeEQ1MVdod2NxYVBTZXBKcHV2U2FsV2todmw3N3EyNTdoZndDQnZOVHZzZHQ4TkQweXEKcVlnRXNQM0NoQzY3bENBUlhUbnFZSzV6M2JmUHJTK1NvTCsrWkZXdElhWTdVWEVUQzQwNG0rVmE2emlMQjhLNQoxaklJdE1Ubm0wS3VpZWVzRGZlcWFSbXFFcit1WTFVa0dWMkxCOFk3d3FFTGNnS3ZRYWhoU1hTMXZXZz0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", + "Store": "default" + }, + { + "domain": { + "main": "traefik.focus-on-it.net" + }, + "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUdDRENDQlBDZ0F3SUJBZ0lTQlo4Z0c5MHhJSFd2S1lhVEQzdlZZWWlFTUEwR0NTcUdTSWIzRFFFQkN3VUEKTURNeEN6QUpCZ05WQkFZVEFsVlRNUll3RkFZRFZRUUtFdzFNWlhRbmN5QkZibU55ZVhCME1Rd3dDZ1lEVlFRRApFd05TTVRJd0hoY05Nall3TXpJNE1EVXhPREkzV2hjTk1qWXdOakkyTURVeE9ESTJXakFpTVNBd0hnWURWUVFECkV4ZDBjbUZsWm1sckxtWnZZM1Z6TFc5dUxXbDBMbTVsZERDQ0FpSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnSVAKQURDQ0Fnb0NnZ0lCQVBLSDBSS0w2czdlZjJGYVZSTktNazJkZ05ncUwyNnhzdlNTbUVxTTMzUDJxcUliQldFVApROVdCb3pLS2dSdWdCdlhGVXduOXVFSHo2RTZ0aFZjMFkyWCtxandKS3B4ZU1nSnJPd0lXeHYyMnhDN0hNSjMyCmFoVmUxeno5STV2LzN1bjI0cC9UMUx6djJkdkVxb0Z1WE5SRDFJYkZZcDFyaWswY2N4UXY2M08vWUE0V2Z1eXoKYjIzZWlHR3NPbjVBUnpUdSt5NGlMRzMwWFozWm94dXNKZUhyaTNpdVJtcEFuSVV4VE9LMmFFZFlCMXF3UkhrWgp3RGNsWFJwSFZSd3FnUWM0VWt6TXlLZkM5Uy83WmpNQU9YYzIxSWQ1TmpLV0NobnBZcjhBN1ZTa3RlVjRxZFJRCkpWbEtaSFM1b05DOFh5NFpySEtkZ0Z2MFNPNVhuNjZON3JSRDZ2QmVxdVFsdGF1eDlGWkxERngvOHFnc1FOZXEKajhkRjdKVkhQWmdOYW1ITnJ0SG5SS0xWeU1QT2oxMFFrYVhsbWlrYW00NHpEUnN5NzdycmFjRkNLMnlGQ0xhUwpDdGxPSjh0QjQyRFcwTE9RR2dENzFwUjlGRXVrdHpNZ1NweWI0UFdMckJCM05qaXZNNGZvQ2pMcE1qOG84NVpZCitIcXJKc2JGT1E4czI3bWM0OXh4REhzWi9rT2lKbENYcERZS0NBYlIrV2ZGdGtmZkVweUMrQkF5anlsSC9MLy8KWWhWSEhsRjVxQmpNUkNSSVN5V2ZTOHMwTERjajVCdGR5N0VyOHloUDUvSVJUN3BBMDFENTFnZS9YckU1ZUJ2TgphYlBOa2xVRTJXTjZxd0hpeTJaTGQ5MlBTNG1zRE5RZGFEU1YrMHJTc2t1R2w4S3dzN1RUSUJlSEFnTUJBQUdqCmdnSWxNSUlDSVRBT0JnTlZIUThCQWY4RUJBTUNCYUF3RXdZRFZSMGxCQXd3Q2dZSUt3WUJCUVVIQXdFd0RBWUQKVlIwVEFRSC9CQUl3QURBZEJnTlZIUTRFRmdRVUw3T1F2bjFneGhNQTFsT2NOU3BnNnFJMW05OHdId1lEVlIwagpCQmd3Rm9BVUFMVXA4aTJPYnpIb20weXRlRDc2M09rTTBkSXdNd1lJS3dZQkJRVUhBUUVFSnpBbE1DTUdDQ3NHCkFRVUZCekFDaGhkb2RIUndPaTh2Y2pFeUxta3ViR1Z1WTNJdWIzSm5MekFpQmdOVkhSRUVHekFaZ2hkMGNtRmwKWm1sckxtWnZZM1Z6TFc5dUxXbDBMbTVsZERBVEJnTlZIU0FFRERBS01BZ0dCbWVCREFFQ0FUQXRCZ05WSFI4RQpKakFrTUNLZ0lLQWVoaHhvZEhSd09pOHZjakV5TG1NdWJHVnVZM0l1YjNKbkx6VXVZM0pzTUlJQkRRWUtLd1lCCkJBSFdlUUlFQWdTQi9nU0Ird0Q1QUhjQVpCSEViS1FTN0tlSkhLSUNMZ0M4cTA4b0I5UWVOU2VyNnY3VkE4bDkKemZBQUFBR2RNeGFzdWdBQUJBTUFTREJHQWlFQTFTVHhNV2RiYmFpWmpvYUY3blpzc2ZqWUJmVnY5YWl0MFphSwpTNEhRcGk4Q0lRRHk3UWtwQVc2VmNwRkp1R2hWcWRGM1QxVU8zU3I2NzVuajFhZ3pIcVRaR2dCK0FHeitVQmxECnFGNnBGcnhTMFRQazNNa2U4VUVjZlNXRUlORnpnSjRZR09zNkFBQUJuVE1Xc0NZQUNBQUFCUUFFcCt0RkJBTUEKUnpCRkFpRUF3WCtiNTA0WkdVSUd0KzBUcE1tTjJDTWZudHJjbG9YWlg3WW4zTmlET29JQ0lDM2ZodHdaMUtEQQpMcWVhdmtWMEtNb2xEeEQ2L2pIQ2c3TndmSDl6bVBDNU1BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQlZKOWZXCnUvZkxEaGZKUXFTYzNYY1hLRlJ2R3hqYmlHcUFSWUg4MVova09qQmFiSm5uQmI2cSszOStaV0g3dC93dzUvK0kKREZnVXBlOEVIWVllWW03a0ZpUlRySHNuM20xSGMzb2NSOEdWZ255TFVNdGVmb01YZk92cHdURHRER3RYdEtxQgpsV0NlU2EyRDhuOUJzeVFBbENHMTNwN1hQeUE5T0swdXNIWU5QQUF1TkliRFR1Mmp2WkZacmpzVEExSHY4M1hQCkttK2RwSkJNV1pHM1dDWnJzL3RHbzRNY3NLN3B0cUFLMlc5YmVKbUZmSnl4ME13cGcyOGE2QzV0TEdrcGxrVjQKbEdRNVlJL1VsbmdaV21nSlBScXBGZ0IvdFJ0aUpUcVA5ekkwanU5OWNMa3g0WEFWSGZ0KzlYcFpGVVpIY3VrWApSSzkxeWNDMlFWNm5JQlJJCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlGQmpDQ0F1NmdBd0lCQWdJUkFNSVNNa3R3cWJTUmNkeEE5K0tGSmp3d0RRWUpLb1pJaHZjTkFRRUxCUUF3ClR6RUxNQWtHQTFVRUJoTUNWVk14S1RBbkJnTlZCQW9USUVsdWRHVnlibVYwSUZObFkzVnlhWFI1SUZKbGMyVmgKY21Ob0lFZHliM1Z3TVJVd0V3WURWUVFERXd4SlUxSkhJRkp2YjNRZ1dERXdIaGNOTWpRd016RXpNREF3TURBdwpXaGNOTWpjd016RXlNak0xT1RVNVdqQXpNUXN3Q1FZRFZRUUdFd0pWVXpFV01CUUdBMVVFQ2hNTlRHVjBKM01nClJXNWpjbmx3ZERFTU1Bb0dBMVVFQXhNRFVqRXlNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUIKQ2dLQ0FRRUEycGdvZEsyK2xQNDc0QjdpNVV0MXF5d1NmKzJuQXpKK05wZnM2REdQcFJPTkM1a3VIczBCVVQxTQo1U2h1Q1ZVeHFxVWlYWEwwTFFmQ1RVQTgzd0VqdVhnMzlScGxNalRtaG5HZEJPK0VDRnU5QWhxWjY2WUJBSnB6CmtHMlBvZ2VnMEpmVDJrVmhnVFU5RlBuRXdGOXEzQXVXR3JDZjR5cnF2U3JXbU1lYmNhczdkQTg4MjdKZ3ZscEwKVGhqcDJ5cHpYSWxoWlo3KzdUeW15MDV2NUo3NUFFYXoveGxOS21PemptYkdHSVZ3eDFCbGJ6dDA1VWlERHdoWQpYUzBqblY2ai91amJBS0hTOU9NWlRmTHVldllubnVYTm5DMmk4bitjRjYzdkV6YzUwYlRJTEVIV2hzRHA3Q0g0CldSdC91VHA4bjF3Qm5XSUV3aWk5Q3EwOHloRHNHd0lEQVFBQm80SDRNSUgxTUE0R0ExVWREd0VCL3dRRUF3SUIKaGpBZEJnTlZIU1VFRmpBVUJnZ3JCZ0VGQlFjREFnWUlLd1lCQlFVSEF3RXdFZ1lEVlIwVEFRSC9CQWd3QmdFQgovd0lCQURBZEJnTlZIUTRFRmdRVUFMVXA4aTJPYnpIb20weXRlRDc2M09rTTBkSXdId1lEVlIwakJCZ3dGb0FVCmViUlo1bnUyNWVRQmM0QUlpTWdhV1BicG0yNHdNZ1lJS3dZQkJRVUhBUUVFSmpBa01DSUdDQ3NHQVFVRkJ6QUMKaGhab2RIUndPaTh2ZURFdWFTNXNaVzVqY2k1dmNtY3ZNQk1HQTFVZElBUU1NQW93Q0FZR1o0RU1BUUlCTUNjRwpBMVVkSHdRZ01CNHdIS0Fhb0JpR0ZtaDBkSEE2THk5NE1TNWpMbXhsYm1OeUxtOXlaeTh3RFFZSktvWklodmNOCkFRRUxCUUFEZ2dJQkFJOTEwQW5QYW5aSVpUS1MzclZFeUlWMjlCV0VqQUsvZHV1ejhlTDVib1NvVnBIaGtrdjMKNGVvQWVFaVBkWkxqNUVaN0cyQXJJSytnemhUbFJRMXE0RktHcFBQYUZCU3BxVi94YlViNVVsQVhRT25rSG4zbQpGVmorcVl2ODcvV2VZK0JtNHNOM094OEJoeWFVN1VBUTNMZVo3TjFYMDF4eFFlNHdJQUFFM0pWTFVDaUhtWkwrCnFvQ1V0Z1lJRlBnY2czNTBRTVVJV2d4UFhOR0VuY1Q5MjFuZTdubHVJMDJWOHBMVW1DbHFYT3NDd1VMdytQVk8KWkNCN3FPTXh4TUJvQ1VlTDJMbDRvTXBPU3I1cEpDcExOM3RSQTJzNlAxS0xzOVRTclZoT2srN0xYMjhOTVVsSQp1c1EvbnhMSklEMFJoQWVGdFBqeU9DT3NjUUJBNTMrTlJqU0NhazdQNEE1alg3cHBta2NKRUNMK1MwaTNrWFZVCnk1TWU1QmJyVTg5NzNqWk52L2F4NitaSzZUTThqV21pbUw2b2Y2T3JYN1pVNkUyV3FhenpzRnJMRzNvMmt5U2IKemxoU2dKODFDbDR0djNTYllpWVhuSkV4S1F2emY4M0RZb3RveDNmMGZ3djd4bG4xQTJaTHBsQ2IwTytsL0FLMApZRTBEUzJGUHhTQUhpMGl3TWZXMm5OSEpyWGNZM0xMSEQ3N2dSZ2plNEV2ZXViaTJ4eGErTm1rL2htaExkSUVUCmlWREZhbm9Dck1WSXBRNTlYV0hremRGbW9IWEhCVjdvaWJWakdTTzdVTFNRN01KMU56NTFwaHVESlNnQUlVN0EKMHpyTG5PckFqL2RmcmxFV1JoQ3ZBZ2J1d0xaWDFBMnNqTmpYb1BPSGJzUGl5K2xPMUtGOC9YWTcKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=", + "key": "LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKS0FJQkFBS0NBZ0VBOG9mUkVvdnF6dDUvWVZwVkUwb3lUWjJBMkNvdmJyR3k5SktZU296ZmMvYXFvaHNGCllSTkQxWUdqTW9xQkc2QUc5Y1ZUQ2YyNFFmUG9UcTJGVnpSalpmNnFQQWtxbkY0eUFtczdBaGJHL2JiRUxzY3cKbmZacUZWN1hQUDBqbS8vZTZmYmluOVBVdk8vWjI4U3FnVzVjMUVQVWhzVmluV3VLVFJ4ekZDL3JjNzlnRGhaKwo3TE52YmQ2SVlhdzZma0JITk83N0xpSXNiZlJkbmRtakc2d2w0ZXVMZUs1R2FrQ2NoVEZNNHJab1IxZ0hXckJFCmVSbkFOeVZkR2tkVkhDcUJCemhTVE16SXA4TDFML3RtTXdBNWR6YlVoM2syTXBZS0dlbGl2d0R0VktTMTVYaXAKMUZBbFdVcGtkTG1nMEx4ZkxobXNjcDJBVy9SSTdsZWZybzN1dEVQcThGNnE1Q1cxcTdIMFZrc01YSC95cUN4QQoxNnFQeDBYc2xVYzltQTFxWWMydTBlZEVvdFhJdzg2UFhSQ1JwZVdhS1JxYmpqTU5Hekx2dXV0cHdVSXJiSVVJCnRwSUsyVTRueTBIallOYlFzNUFhQVB2V2xIMFVTNlMzTXlCS25Kdmc5WXVzRUhjMk9LOHpoK2dLTXVreVB5anoKbGxqNGVxc214c1U1RHl6YnVaemozSEVNZXhuK1E2SW1VSmVrTmdvSUJ0SDVaOFcyUjk4U25JTDRFREtQS1VmOAp2LzlpRlVjZVVYbW9HTXhFSkVoTEpaOUx5elFzTnlQa0cxM0xzU3Z6S0UvbjhoRlB1a0RUVVBuV0I3OWVzVGw0Ckc4MXBzODJTVlFUWlkzcXJBZUxMWmt0MzNZOUxpYXdNMUIxb05KWDdTdEt5UzRhWHdyQ3p0Tk1nRjRjQ0F3RUEKQVFLQ0FnQVA2VGdlb3Q1RE54YWRRT3RlNmhtMXZOVUVtWFBtSzdORlYwNjFhVnVKaEkrNk5kS2JCVVFJZ0VwQQpHUlVTUm1QZWdOVUxUVUZtMWtVUjBGRjBvS082djhQVVQzZWpyWXhUVzB5U1BRTk9CczBGRXAxT1o2bWJBRTlYCm1YWGFHS1c3cks0K2RRdTZYM1BuOXBXSEMwSDh6UHhtNFJFd3FhcjNseHUzb2RNdEUwdU9jUXhmby8vMThjajUKdTI1VTlRdVczZXpOb0lGUXIxenE2Nm5IT1hwOHdWS3pscDlZL2ljbWw4N20rcmVKb3ExTTFrNlBzVkJLYmVHWApSVUhBcU1zeE9aRXdwNmlzVk41NENPS3lDdHc2UlhjWThpdExrMHRUV3R2WEV3eis1aFZtMmcwdU9CblRLMDIrCjJLVER2Ty96bXN5VThsOUc2UlpWeUpyWnZVY0JITllhWGV1RmcyZFBWcCtKenRrQksyaVdvODg1dkZBclZhN3YKSDNsWmh4bVFvMStpelkrbFFKSWJLbDFtRGlPYWxaaTM0NUR0NXhXVEV6K1YycGkzTjNtTzFyVDRtU0I1UEhYcgpEaENjcVQwcXdtSnh1WUpHRnBVc2xEOGkyZUV6N2pFcU5aQm4rRUNHSzdqYXc1cHF0a2V6WmlHQUVaRldGSk00Ck1XOThGOGlDMmJFc2tNM3R3dFV4TXpDd29NWHIwNTVsbHRaNm5mZ3NLSVBzR3dqK0Jtb0lidHFERHZGZFV6WU0KTVhqVDluZi9ya2diTEJ4VGN1Q2I1aW9mMmhKZ1JXQXA5eVN1SzhuazgrQ2JlcnFwSlBkMXJwTXl4YzAvcjVycApVOTlITFlJdjdJNUNkbnlqSUM5TmZoRlFubjQvK1BpdWw3dVVNdE1WVHFCWkd1Ukh2UUtDQVFFQTlDZldlQUFhCnFlUFpob09kQkVDcWVTVGJpYWhKaHEvV0xJVU1rQnZyK0xPVWJVRWNyelNqUHZnalNLWUMvaUl3SjhnY2pqNE0KckJpY250ektFekh6VjJzc3lMNjdRSXR3T0tXWW1kM3BYVFNjOEJKNHlNVS9ta2tVcm9WbGZCM21aTWpjQzF4cApubHBpQkhWTHU2bk45WG45WjBxOGxXb0YrRFFJcEpLNzBWR3RkN05QN2RFWEdCZ3J1U0UyaC9BK3VvbUtZWjFmCk1WS1ROYjZBaC9jYjVXUjdzcE5RTEpIUkpKU1c2QWVaMkNlWXlJTm5ob3NFakZ1TWFMVmMzWDJLRUxWOU9COTUKeXhwR0Z2cHlaTHVCbDVWN1RReU1tbXhueWx2dGorYzFySURUSWt4Z3lTNnJ0UUdZU3A2S0hLdmY0SS96U1NpdwpodHFMc04vR3kxZDBGUUtDQVFFQS9rdk1ESHVhcUpOb0lUVGJ5YTREUnN2RnBTSnI3bG96dkR3Nm1odEZkcTlCCmkrQ3p6dHJ0a0puc2dBcjN5OGVSaVJ1a3YvK3pIK3RZWkpSd0tmYjVkZUpDS1RQSXd2TkplS0x4NTljWmxpUDIKZjg0Z2tkdTgrVG0yODVkM0VRc3IyS2U0WjVncjhZSnBUY1JlWWZRUnE4eG1yck9XQi9JbVdPYzBrNlRsR1pjcgpIK3N5ZFBqWlNnbFhGMUg3S1UyVDltK2VOd1JGaGhVTEd0NjNKaUxNM0UxQVRTbEJpRTB5M1FBeFlpUWQ4VG5jClFEdG52NGVjd1hsa1ZpT0ZBSHczdTcxZGZkdmNtcUtiK3hMUDZrVVMvblV3TkplS1FkZ0dSSjBIUjZoK014RUEKSGNIcVp4bGdQeEZPM25OSGl4YS9SbnZVeWR5NjNBNktoaVVaN1o4NEt3S0NBUUVBMXBuOWhOUnltMGxPZFZGUgp2ZDhvOS9wUmpSbUNKd1IrOS9xcUpEQ21wSjhUbzBSTDlpUUtLTnJxQ0gwQ3ZHVklkbThKeW16M3JueWpqVzc3Cm53dVVuQTN6K3k3S1g5MHY4bHA3V3lNV2IzcERSekMxUWFNK1dGcEw5Mm9BM2F0YVN0UFJ0WnF3cXlNK2JEUzkKTUdIOFNmdkRvL3FvNzV1VlM2aFF3SGJJNXg4bm5jTGFTbW95SmxkNGR1eWVoYlhCTFN5Zm1WVTl5cGlPRS9zeAo5bEJaRUxQVmxneXR0NzhqV1VmUnJIaWgzTUJSSmsxNXZXU0x4dUxnODFnV0hBaXdSaWQvdk1qTndKdURaOGNTCnJUK3lsSTRySm5vVlM5WmxGQlRoSms5UGVpUnhjQUE2UWhybmlkMnhBa1YvbDl2cWwvTnZINnJJSG9BUnNKSEEKcGhKa1VRS0NBUUJmM1M4bEhZdW1OVHV5R1AwcVFJRlh0UVhqUk9DdlVDM2tya2ZoUkpxaExWeG1ZT1VuKy94Rwo0Ti81UFNsQkZ4RFVRU21RZjlLRkcvR01xVERIZ1NWMXZULzN6Ri9Jcm5KcUdmTmIxUWorUXJ4d1hjS0ZlZkw1CmVUcHhCZzZLekUxUk5aa2M1STdjVXE5ajg3MG83QnVsU2o4RGFRd01Ic3M2Qko4YmNiUTBPM3EwWTdQM3lNQVIKV3dnTDhJbmdmakJqWEp5bVhPUGdzaG9ublFJcVRFQXlaS1R5OGJTVXI1V1hIclYvSytKbHg4d3lJckx2enkzVworZTVMVXNTVzlEMEdkMUxCV1pzR2FIcW80ZVNqaWpxbzFvQy9zc2thSFZmdmtjcm14cXdja0RJZEJiZForb1VBCkFZUmI4OVZxcDc2ZjBacmNKbXdDL1RCWGRiRWFsVVZWQW9JQkFETVRpMU1yVHordXc5bXA2L2lJbllSaVB2YWgKZmVxOFFHczZTRmVvbHI0WDVCZ2o0NUcydjdodUFGOWlMNXk4QWxDRS91anl6TWRiL1JiNTI4TXk5MkxSeGZHUgo5a2Q4R3FORUpMc1NkeU9qNjdDT2RvNVVXMmFyY05zVTVNTlN5QVJEYXFlQTBIKzZqNVNXVG1RaDJhMmpuVmZzCkJiK1dYN3o3WnNjWUxKSmxjb0lMSjhCUTNyWFllQlY0S0xXOEdUU3IyNHlGamw4ZFg1dVByK1VrdHJhQzJuUTcKRFhtNDh0QjhIRk91YjFJb0ljVmFrSTFBcWl5b0MxOVZyRTlKRWRzR1RPb0JBLzlGSXhOT1RkRmNtUWZzMVg3Qgp6U3M5QVdINHQvU0h3QWpTK21XSk5DQ3ZPVXF2bHZhZ3pKQWp2bmdXN3JaZ0VQSVdqR2RTdkpRY2JUTT0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K", + "Store": "default" + } + ] + } +} \ No newline at end of file diff --git a/root/docker/traefik/docker-compose.yml b/root/docker/traefik/docker-compose.yml new file mode 100644 index 0000000..6cc0ada --- /dev/null +++ b/root/docker/traefik/docker-compose.yml @@ -0,0 +1,60 @@ +services: + traefik: + image: traefik:latest + container_name: traefik + command: + - --global.sendanonymoususage=false + - --log.level=INFO + + # Docker Provider + - --providers.docker=true + - --providers.docker.exposedbydefault=false + - --providers.docker.network=webproxy-net + + # optional: zusätzliche dynamische Datei für Middlewares/TLS-Optionen + - --providers.file.directory=/etc/traefik/dynamic + - --providers.file.watch=true + + # EntryPoints + - --entrypoints.web.address=:80 + - --entrypoints.websecure.address=:443 + + # globaler HTTP -> HTTPS Redirect + - --entrypoints.web.http.redirections.entrypoint.to=websecure + - --entrypoints.web.http.redirections.entrypoint.scheme=https + - --entrypoints.web.http.redirections.entrypoint.permanent=true + + # ACME / Let's Encrypt + - --certificatesresolvers.le.acme.email=Michael.Seidel@focus-on-it.de + - --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json + - --certificatesresolvers.le.acme.httpchallenge=true + - --certificatesresolvers.le.acme.httpchallenge.entrypoint=web + + # Dashboard nur intern / testweise + - --api.dashboard=true + - --api.insecure=false + + ports: + - "80:80" + - "443:443" + + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - /root/docker/traefik/data/letsencrypt:/letsencrypt + - /root/docker/traefik/data/dynamic:/etc/traefik/dynamic:ro + + networks: + - webproxy-net + labels: + - traefik.enable=true + - traefik.http.routers.traefik.rule=Host(`traefik.focus-on-it.net`) + - traefik.http.routers.traefik.entrypoints=websecure + - traefik.http.routers.traefik.tls=true + - traefik.http.routers.traefik.tls.certresolver=le + - traefik.http.routers.traefik.service=api@internal + - traefik.http.routers.traefik.middlewares=lan-only@file,dashboard-auth@file + restart: unless-stopped + +networks: + webproxy-net: + external: true diff --git a/root/docker/traefik/start.sh b/root/docker/traefik/start.sh new file mode 100755 index 0000000..96b3878 --- /dev/null +++ b/root/docker/traefik/start.sh @@ -0,0 +1,17 @@ +#!/bin/sh +#/root/docker/traefik/start.sh + +set -euo pipefail +cd "$(dirname "$0")" + +# Stack sauber stoppen und entfernen (Container weg, Volumes bleiben!) +docker compose down + +# Images aktualisieren +docker compose pull + +# Neu erstellen und starten +docker compose up -d --force-recreate --remove-orphans + +# Optional: alte Images aufräumen +docker image prune -f diff --git a/srv/nextcloud-data-local/nextcloud/config/config.php b/srv/nextcloud-data-local/nextcloud/config/config.php new file mode 100644 index 0000000..0d8e5a3 --- /dev/null +++ b/srv/nextcloud-data-local/nextcloud/config/config.php @@ -0,0 +1,56 @@ + '\\OC\\Memcache\\APCu', + 'apps_paths' => + array ( + 0 => + array ( + 'path' => '/var/www/html/apps', + 'url' => '/apps', + 'writable' => false, + ), + 1 => + array ( + 'path' => '/var/www/html/custom_apps', + 'url' => '/custom_apps', + 'writable' => true, + ), + ), + 'memcache.distributed' => '\\OC\\Memcache\\Redis', + 'memcache.locking' => '\\OC\\Memcache\\Redis', + 'redis' => + array ( + 'host' => 'nextcloud-redis', + 'password' => '', + 'port' => 6379, + ), + 'upgrade.disable-web' => true, + 'instanceid' => 'oc9jqantr8wv', + 'passwordsalt' => 'IFdgZnn7bRsmww+0zi+Rkqk0zbuRa3', + 'secret' => '1BhN2ZDYT6G41qPd9tztbTRoj7RdXRZT4/N/akkfRaJp7qLn', + 'trusted_domains' => + array ( + 0 => 'nextcloud.focus-on-it.net', + ), + 'trusted_proxies' => + array ( + 0 => 'nextcloud-nginx', + 1 => 'traefik', + ), + 'overwritehost' => 'nextcloud.focus-on-it.net', + 'overwriteprotocol' => 'https', + 'overwrite.cli.url' => 'https://nextcloud.focus-on-it.net', + 'datadirectory' => '/var/www/html/data', + 'filesystem_check_changes' => 1, + 'dbtype' => 'mysql', + 'version' => '33.0.0.16', + 'dbname' => 'nextcloud', + 'dbhost' => 'nextcloud-db', + 'dbtableprefix' => 'oc_', + 'mysql.utf8mb4' => true, + 'dbuser' => 'nextcloud', + 'dbpassword' => 'ZDFnJGCBo0PHvq58KItT', + 'installed' => true, + 'ldapProviderFactory' => 'OCA\\User_LDAP\\LDAPProviderFactory', + 'maintenance' => false, +);