KC@FlessingLabs 1.0.0: Testmodus ohne Lizenz, Installationsanleitung, Nutzungsbedingungen

Testmodus (ohne gültige Lizenz): 1 Personal-Konto, 2 Kunden; Discord-Bot,
E-Mail-Posteingang (IMAP), DATEV-Export und Backups auf externe Ziele nur mit
Lizenz. Mit Lizenz gelten deren Grenzen und Module (Lizenz ohne Modulliste =
voller Umfang). Bestehende Daten bleiben bei Ablauf vollständig nutzbar, nur
Neuanlagen über die Grenzen und die Zusatzfunktionen pausieren.

- Edition zentral in @kc/platform/license (getEdition, hasFeature,
  assertCustomerCapacity, assertStaffCapacity), auch in der CLI durchgesetzt
- Einstellungen → Lizenz zeigt die Edition, Hinweisbanner im Testmodus
- README mit Installation, Update und Betrieb; systemd-Units unter ops/systemd
- .env.example bereinigt (Kommentare nicht mehr hinter Werten, veraltete
  SMTP/Discord-Variablen entfernt; beides wird in der Oberfläche eingestellt)
- LICENSE.md: Nutzungsbedingungen

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Claude 2026-10-02 13:31:19 +02:00
parent fdd51b18e2
commit 17267b7c05
26 changed files with 368 additions and 73 deletions

View file

@ -0,0 +1,21 @@
[Unit]
Description=Kundencenter API
After=network-online.target mariadb.service
Wants=network-online.target mariadb.service
[Service]
User=kundencenter
WorkingDirectory=/srv/kundencenter/apps/api
Environment=KC_ENV_DIR=/nonexistent
EnvironmentFile=/etc/kundencenter/db.env
EnvironmentFile=-/etc/kundencenter/backup.env
EnvironmentFile=/etc/kundencenter/app.env
ExecStart=/usr/bin/node dist/server.js
Restart=always
RestartSec=3
NoNewPrivileges=true
ProtectSystem=strict
ReadWritePaths=/var/lib/kundencenter/requests /var/lib/kundencenter/ticket-attachments
ProtectHome=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,7 @@
[Unit]
Description=Kundencenter: Backup-Anfragen aus der Oberflaeche
[Path]
PathExistsGlob=/var/lib/kundencenter/requests/backup-*
Unit=kc-backup-request.service
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,21 @@
[Unit]
Description=Kundencenter: Backup-Anfrage aus der Oberflaeche abarbeiten
After=mariadb.service network-online.target
Wants=network-online.target
[Service]
Type=oneshot
User=root
WorkingDirectory=/srv/kundencenter/apps/api
Environment=KC_ENV_DIR=/nonexistent
Environment=PATH=/usr/local/bin:/usr/bin:/bin
Environment=NODE_BIN=/usr/bin/node
EnvironmentFile=/etc/kundencenter/db.env
EnvironmentFile=/etc/kundencenter/app.env
EnvironmentFile=-/etc/kundencenter/backup.env
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/var/backups/kundencenter /var/lib/kundencenter
ExecStart=/bin/bash /srv/kundencenter/ops/process-requests.sh
TimeoutStartSec=1h

View file

@ -0,0 +1,20 @@
[Unit]
Description=Kundencenter-Backup
After=mariadb.service network-online.target
Wants=network-online.target
[Service]
Type=oneshot
User=root
WorkingDirectory=/srv/kundencenter/apps/api
Environment=KC_ENV_DIR=/nonexistent
Environment=PATH=/usr/local/bin:/usr/bin:/bin
EnvironmentFile=/etc/kundencenter/db.env
EnvironmentFile=/etc/kundencenter/app.env
EnvironmentFile=-/etc/kundencenter/backup.env
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/var/backups/kundencenter /var/lib/kundencenter
ExecStart=/usr/bin/node dist/cli/index.js backup run
TimeoutStartSec=1h

View file

@ -0,0 +1,8 @@
[Unit]
Description=Taegliches Kundencenter-Backup
[Timer]
OnCalendar=*-*-* 02:30:00
RandomizedDelaySec=10min
Persistent=true
[Install]
WantedBy=timers.target

View file

@ -0,0 +1,20 @@
[Unit]
Description=Kundencenter Wiederherstellungstest
After=mariadb.service network-online.target
Wants=network-online.target
[Service]
Type=oneshot
User=root
WorkingDirectory=/srv/kundencenter/apps/api
Environment=KC_ENV_DIR=/nonexistent
Environment=PATH=/usr/local/bin:/usr/bin:/bin
EnvironmentFile=/etc/kundencenter/db.env
EnvironmentFile=/etc/kundencenter/app.env
EnvironmentFile=-/etc/kundencenter/backup.env
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/var/backups/kundencenter /var/lib/kundencenter
ExecStart=/usr/bin/node dist/cli/index.js backup restore-test
TimeoutStartSec=1h

View file

@ -0,0 +1,8 @@
[Unit]
Description=Woechentlicher Wiederherstellungstest
[Timer]
OnCalendar=Sun *-*-* 04:30:00
RandomizedDelaySec=10min
Persistent=true
[Install]
WantedBy=timers.target

View file

@ -0,0 +1,19 @@
[Unit]
Description=Kundencenter Web
After=network-online.target kc-api.service
Wants=network-online.target
[Service]
User=kundencenter
WorkingDirectory=/srv/kundencenter/apps/web
Environment=NODE_ENV=production
Environment=NEXT_TELEMETRY_DISABLED=1
ExecStart=/usr/bin/node node_modules/next/dist/bin/next start -p 4101 -H 127.0.0.1
Restart=always
RestartSec=3
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/srv/kundencenter/apps/web/.next
[Install]
WantedBy=multi-user.target

View file

@ -0,0 +1,21 @@
[Unit]
Description=Kundencenter Worker (Jobs, Discord-Bot)
After=network-online.target mariadb.service kc-api.service
Wants=network-online.target mariadb.service
[Service]
User=kundencenter
WorkingDirectory=/srv/kundencenter/apps/worker
Environment=KC_ENV_DIR=/nonexistent
EnvironmentFile=/etc/kundencenter/db.env
EnvironmentFile=-/etc/kundencenter/backup.env
EnvironmentFile=/etc/kundencenter/app.env
EnvironmentFile=-/etc/kundencenter/discord.env
ExecStart=/usr/bin/node dist/index.js
Restart=always
RestartSec=3
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target