Ein praxisorientiertes Datenschutzmanagementsystem (DSMS) für kleine und mittlere Unternehmen. VeriDato unterstützt bei der DSGVO-konformen Umsetzung des betrieblichen Datenschutzes und enthält alle wesentlichen Funktionen, die DSGVO und BDSG an ein DSMS stellen.
Repository: https://github.com/baxterbln/dat-guard.git
| Modul | Beschreibung |
|---|---|
| VVT | Verarbeitungsverzeichnis (Art. 30 DSGVO) mit Genehmigung & Revisionierung |
| DPIA | Datenschutz-Folgenabschätzung inkl. Schwellwertanalyse (Art. 35 DSGVO) |
| TOM | Technische & organisatorische Maßnahmen mit Audit-Funktion |
| Datenweitergabe | Auftragsverarbeitungsverträge & Drittlandtransfers |
| Vorfälle | Datenpannen-Management (Art. 33/34 DSGVO) |
| Löschkonzept | Löschfristen und -konzepte |
| Software-Verzeichnis | Eingesetzte Software mit VVT-Zuordnung |
| Kontakte | Auftragsverarbeiter, Verantwortliche, DSBs |
| Betroffenenanfragen | Anfragen auf Auskunft, Löschung, Korrektur |
| Aufgaben | Internes Aufgabenmanagement |
| Rollensystem | Granulare Berechtigungsverwaltung je Team |
| Multi-Mandant | Mehrere Teams/Unternehmen in einer Instanz |
- PHP 8.3 / Laravel 12
- Datenbank: MySQL 8 (Docker) / SQLite (Entwicklung)
- Auth: Laravel Breeze (Session-basiert)
- Frontend: Vite + Tailwind CSS 3 + Alpine.js
- PDF-Export: barryvdh/laravel-dompdf
- Word-Export: phpoffice/phpword
- Excel-Export: phpoffice/phpspreadsheet
- PHP 8.2+ mit Extensions:
pdo,pdo_mysql(oderpdo_sqlite),mbstring,xml,zip,gd,bcmath,intl,fileinfo,tokenizer,openssl - Composer 2
- Node.js 18+ & npm
- MySQL 8 / MariaDB 10.6+ (oder SQLite für Entwicklung)
git clone https://github.com/baxterbln/dat-guard.git VeriDato
cd VeriDato
# PHP-Abhängigkeiten installieren
composer install
# Node-Abhängigkeiten installieren & Assets bauen
npm install && npm run buildcp .env.example .env
php artisan key:generate.env anpassen:
APP_NAME=VeriDato
APP_URL=http://localhost
# Datenbank (MySQL/MariaDB)
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=VeriDato
DB_USERNAME=VeriDato
DB_PASSWORD=secret
# E-Mail
MAIL_MAILER=smtp
MAIL_HOST=localhost
MAIL_PORT=587
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_FROM_ADDRESS=noreply@VeriDato.deSQLite (Entwicklung):
DB_CONNECTION=sqlite— es wird automatischdatabase/database.sqliteverwendet.
php artisan migrate
php artisan storage:linkphp artisan serve
# → http://localhost:8000
# Assets im Watch-Modus (separates Terminal):
npm run devNginx-Beispiel:
server {
listen 80;
server_name example.com;
root /pfad/zu/VeriDato/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}Verzeichnis-Berechtigungen:
chown -R www-data:www-data storage bootstrap/cache
chmod -R 775 storage bootstrap/cache- Docker 24+
- Docker Compose v2
git clone https://github.com/baxterbln/dat-guard.git VeriDato
cd VeriDato
cp .env.example .env.env anpassen — mindestens diese Variablen setzen:
APP_KEY= # wird beim ersten Start automatisch generiert
APP_URL=http://localhost:8080
# Datenbankzugangsdaten (MySQL – läuft automatisch als eigener Container)
DB_DATABASE=VeriDato
DB_USERNAME=VeriDato
DB_PASSWORD=sicherespasswort
DB_ROOT_PASSWORD=rootpasswort
# E-Mail
MAIL_HOST=smtp.beispiel.de
MAIL_PORT=587
MAIL_USERNAME=user@beispiel.de
MAIL_PASSWORD=mailpasswort
MAIL_FROM_ADDRESS=noreply@VeriDato.dedocker compose up -dBeim ersten Start führt der Container automatisch aus:
php artisan key:generate(sofernAPP_KEYleer)php artisan migrate --forcephp artisan storage:linkphp artisan config:cache&route:cache
Die Anwendung ist anschließend unter http://localhost:8080 erreichbar.
# Container-Status
docker compose ps
# App-Logs
docker compose logs -f app
# MySQL-Logs
docker compose logs -f mysql
# Gesundheitsstatus (gibt {"status":"ok"} zurück)
curl http://localhost:8080/healthdocker compose exec app php artisan migrate:status
docker compose exec app php artisan tinkerDie docker-compose.yml legt zwei benannte Volumes an:
| Volume | Inhalt |
|---|---|
VeriDato_storage |
Uploads, Cache, Logs |
VeriDato_mysql |
MySQL-Datenbankdateien |
# Volumes anzeigen
docker volume ls | grep VeriDato
# Datenbank-Backup (mysqldump)
docker compose exec mysql mysqldump -u root -p VeriDato > backup.sqlgit pull
docker compose up -d --build
# Migrationen laufen automatisch beim NeustartNach der Installation die Anwendung unter der konfigurierten URL öffnen:
- Ersten Administrator anlegen (
/setup) — nur beim allerersten Aufruf erreichbar; der angelegte Benutzer erhält automatisch Administrator-Rechte - Einrichtungsassistent (
/first-run) — Unternehmensdaten, Datenschutzbeauftragten und Systemeinstellungen festlegen; beim Abschluss wird das erste Team angelegt - Weitere Benutzer — unter Administration → Benutzerverwaltung (
/admin/users) anlegen; eine öffentliche Selbstregistrierung ist nicht vorgesehen - Standard-Daten — beim Anlegen eines Teams werden automatisch DSGVO-konforme Referenzdaten eingetragen (Personengruppen, Datenkategorien, Rechtsgrundlagen etc.)
# Tests ausführen
php artisan test
# Assets im Watch-Modus
npm run dev
# Datenbank zurücksetzen
php artisan migrate:fresh| Variable | Beschreibung | Standard |
|---|---|---|
APP_KEY |
Laravel-Applikationsschlüssel | (generiert) |
APP_ENV |
Umgebung (local/production) |
local |
APP_DEBUG |
Debug-Modus | true |
APP_URL |
Öffentliche URL der Anwendung | http://localhost |
DB_CONNECTION |
Datenbanktyp (sqlite/mysql/pgsql) |
sqlite |
DB_DATABASE |
Datenbankname | VeriDato |
DB_USERNAME |
Datenbankbenutzer | — |
DB_PASSWORD |
Datenbankpasswort | — |
DB_ROOT_PASSWORD |
MySQL-Root-Passwort (Docker) | — |
MAIL_MAILER |
Mail-Treiber (smtp/log/array) |
smtp |
MAIL_FROM_ADDRESS |
Absenderadresse | noreply@VeriDato.de |
SESSION_LIFETIME |
Session-Dauer in Minuten | 120 |
FILESYSTEM_DISK |
Speicherdisk (local/s3) |
local |
VeriDato ist Open-Source-Software, lizenziert unter der AGPL-3.0 license.
| Modul | Beschreibung |
|---|---|
| VVT | Verarbeitungsverzeichnis (Art. 30 DSGVO) mit Genehmigung & Revisionierung |
| DPIA | Datenschutz-Folgenabschätzung (Art. 35 DSGVO) |
| TOM | Technische & organisatorische Maßnahmen mit Audit-Funktion |
| Datenweitergabe | Auftragsverarbeitungsverträge & Drittlandtransfers |
| Vorfälle | Datenpannen-Management (Art. 33/34 DSGVO) |
| Richtlinien | Interne Datenschutzrichtlinien |
| Löschkonzept | Löschfristen und -konzepte |
| Software-Verzeichnis | Eingesetzte Software und Konfigurationen |
| Kontakte | Auftragsverarbeiter, Verantwortliche, DSBs |
| Akademie | Schulungsverwaltung mit Teilnahme-Tracking |
| Fragebogen | Selbsteinschätzungs-Tests für Mitarbeiter |
| Betroffenenanfragen | Anfragen auf Auskunft, Löschung, Korrektur |
| Formulare & Uploads | Dokumente und Online-Formulare |
| Tätigkeitsberichte | Berichtswesen |
| Aufgaben | Internes Aufgabenmanagement |
| Assistent | Einrichtungsassistent für neue Teams |
| Multi-Mandant | Mehrere Teams/Unternehmen in einer Instanz |
- PHP 8.3 / Laravel 12
- Datenbank: MySQL / MariaDB / SQLite
- Auth: Laravel Breeze + JWT (
php-open-source-saver/jwt-auth) - Frontend: Vite + Tailwind CSS 3 + Alpine.js
- PDF-Export: barryvdh/laravel-dompdf
- Excel-Export: phpoffice/phpspreadsheet
- PHP 8.2+ mit Extensions:
pdo,pdo_mysql(oderpdo_sqlite),mbstring,xml,zip,gd,bcmath,intl,fileinfo,tokenizer,openssl - Composer 2
- Node.js 18+ & npm
- MySQL 8 / MariaDB 10.6+ (oder SQLite für Entwicklung)
git clone <repository-url> odc
cd odc
# PHP-Abhängigkeiten installieren
composer install
# Node-Abhängigkeiten installieren & Assets bauen
npm install && npm run buildcp .env.example .env
php artisan key:generate
php artisan jwt:secret.env anpassen:
APP_NAME="Open Datenschutzcenter"
APP_URL=http://localhost
# Datenbank (MySQL/MariaDB)
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=datenschutzcenter
DB_USERNAME=root
DB_PASSWORD=secret
# E-Mail
MAIL_MAILER=smtp
MAIL_HOST=localhost
MAIL_PORT=587
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_FROM_ADDRESS=noreply@example.comSQLite (Entwicklung):
DB_CONNECTION=sqlite— es wird automatischdatabase/database.sqliteverwendet.
php artisan migrate
php artisan storage:linkphp artisan serve
# → http://localhost:8000
# Assets im Watch-Modus (separates Terminal):
npm run devFür die Akademie-Benachrichtigungen (Mo–Fr 09:00 Uhr) einen Cron-Job anlegen:
* * * * * cd /pfad/zu/odc && php artisan schedule:run >> /dev/null 2>&1Nginx-Beispiel:
server {
listen 80;
server_name example.com;
root /pfad/zu/odc/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}Verzeichnis-Berechtigungen:
chown -R www-data:www-data storage bootstrap/cache
chmod -R 775 storage bootstrap/cache- Docker 24+
- Docker Compose v2
git clone <repository-url> odc
cd odc
cp .env.example .env.env für Docker anpassen:
APP_KEY= # wird automatisch gesetzt, kann leer bleiben
APP_URL=http://localhost:8080
# Datenbank (SQLite ist Standard, kein extra Container nötig)
DB_CONNECTION=sqlite
# Oder MySQL mit eigenem Datenbankcontainer:
# DB_CONNECTION=mysql
# DB_HOST=db
# DB_PORT=3306
# DB_DATABASE=datenschutzcenter
# DB_USERNAME=odc
# DB_PASSWORD=secret
MAIL_HOST=localhost
MAIL_PORT=587
MAIL_FROM_ADDRESS=noreply@example.comdocker compose up -dBeim ersten Start führt der Container automatisch aus:
php artisan key:generate&php artisan jwt:secretphp artisan migrate --forcephp artisan storage:linkphp artisan config:cache&route:cache&view:cache
Die Anwendung ist anschließend unter http://localhost:8080 erreichbar.
# Container-Status
docker compose ps
# Logs
docker compose logs -f app
# Gesundheitsstatus (gibt {"status":"ok"} zurück)
curl http://localhost:8080/healthdocker compose exec app php artisan migrate:status
docker compose exec app php artisan tinkerDie docker-compose.yml legt zwei benannte Volumes an:
odc_storage— Uploads und Cacheodc_database— SQLite-Datenbankdatei
# Volumes anzeigen
docker volume ls | grep odc
# Backup der SQLite-Datenbank
docker compose exec app cat database/database.sqlite > backup.sqlitedocker compose pull
docker compose up -d --build
# Migrationen laufen automatisch beim Startdocker-compose.yml um einen DB-Service erweitern:
services:
db:
image: mysql:8
environment:
MYSQL_DATABASE: datenschutzcenter
MYSQL_USER: odc
MYSQL_PASSWORD: secret
MYSQL_ROOT_PASSWORD: rootsecret
volumes:
- odc_mysql:/var/lib/mysql
app:
# ... wie bisher ...
depends_on:
- db
environment:
DB_CONNECTION: mysql
DB_HOST: db
DB_DATABASE: datenschutzcenter
DB_USERNAME: odc
DB_PASSWORD: secret
volumes:
odc_mysql:Nach der Installation die Anwendung unter der konfigurierten URL öffnen:
- Registrierung: Erstes Benutzerkonto anlegen (
/register) - Team erstellen: Ein Team/Unternehmen anlegen — der Assistent führt durch die Grundkonfiguration
- Einstellungen: Unter Einstellungen Unternehmensdaten, Logo und Datenschutzbeauftragten hinterlegen
- Standard-Daten: Beim Anlegen eines Teams werden automatisch DSGVO-konforme Referenzdaten eingetragen (Personengruppen, Datenkategorien, Rechtsgrundlagen etc.)
# Tests ausführen
php artisan test
# Statische Code-Analyse
vendor/bin/phpstan analyse app
# Assets im Watch-Modus
npm run dev
# Datenbank zurücksetzen
php artisan migrate:fresh| Variable | Beschreibung | Standard |
|---|---|---|
APP_KEY |
Laravel-Applikationsschlüssel | (generiert) |
APP_ENV |
Umgebung (local/production) |
local |
APP_DEBUG |
Debug-Modus | true |
DB_CONNECTION |
Datenbanktyp (sqlite/mysql/pgsql) |
sqlite |
JWT_SECRET |
JWT-Signaturschlüssel | (generiert) |
JWT_ALGO |
JWT-Algorithmus | HS256 |
MAIL_MAILER |
Mail-Treiber (smtp/log/array) |
smtp |
SESSION_LIFETIME |
Session-Dauer in Minuten | 120 |
FILESYSTEM_DISK |
Speicherdisk (local/s3) |
local |
VeriDato ist Open-Source-Software, lizenziert unter der AGPL-3.0 license.