Features: - Backend: Node.js/Express mit MySQL/MariaDB - Frontend: Vue.js 3 mit Composition API - UTC-Zeithandling für korrekte Zeiterfassung - Timewish-basierte Überstundenberechnung - Wochenübersicht mit Urlaubs-/Krankheits-/Feiertagshandling - Bereinigtes Arbeitsende (Generell/Woche) - Überstunden-Offset für historische Daten - Fixed Layout mit scrollbarem Content - Kompakte UI mit grünem Theme
4.4 KiB
4.4 KiB
MySQL Datenbank Setup für TimeClock
1. MySQL Installation prüfen
# MySQL Version prüfen
mysql --version
# Falls nicht installiert (openSUSE):
sudo zypper install mysql mysql-server
# MySQL-Server starten
sudo systemctl start mysql
sudo systemctl enable mysql
2. MySQL Root-Passwort setzen (falls nötig)
# MySQL Secure Installation ausführen
sudo mysql_secure_installation
# Folgende Fragen beantworten:
# - Set root password? [Y/n] Y
# - Remove anonymous users? [Y/n] Y
# - Disallow root login remotely? [Y/n] Y
# - Remove test database? [Y/n] Y
# - Reload privilege tables? [Y/n] Y
3. Datenbank und Benutzer erstellen
Option A: Automatisches Setup-Script
cd /home/torsten/Programs/TimeClock/backend
chmod +x setup-mysql.sh
./setup-mysql.sh
Das Script fragt nach:
- MySQL Root-Passwort
- Neuem Datenbank-Benutzer (Standard: timeclock_user)
- Neuem Benutzer-Passwort
Option B: Manuelles Setup
# MySQL als root einloggen
mysql -u root -p
Dann in der MySQL-Konsole:
-- 1. Datenbank erstellen
CREATE DATABASE IF NOT EXISTS stechuhr2
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
-- 2. Benutzer erstellen (Passwort anpassen!)
CREATE USER IF NOT EXISTS 'timeclock_user'@'localhost'
IDENTIFIED BY 'IhrSicheresPasswort123!';
-- 3. Berechtigungen vergeben
GRANT ALL PRIVILEGES ON stechuhr2.*
TO 'timeclock_user'@'localhost';
-- 4. Privilegien neu laden
FLUSH PRIVILEGES;
-- 5. Prüfen
SHOW DATABASES;
SELECT User, Host FROM mysql.user WHERE User='timeclock_user';
-- 6. Verlassen
EXIT;
4. Tabellen erstellen
Die Tabellen existieren bereits in Ihrer DB. Falls Sie sie neu erstellen möchten:
# SQL-Dump importieren (falls vorhanden)
mysql -u timeclock_user -p stechuhr2 < database-schema.sql
Oder mit dem automatischen Migrations-Script:
cd /home/torsten/Programs/TimeClock/backend
node scripts/create-tables.js
5. .env Datei konfigurieren
cd /home/torsten/Programs/TimeClock/backend
nano .env
Setzen Sie folgende Werte:
DB_HOST=localhost
DB_PORT=3306
DB_USER=timeclock_user
DB_PASSWORD=IhrSicheresPasswort123!
DB_NAME=stechuhr2
6. Verbindung testen
# Mit neuen Credentials verbinden
mysql -u timeclock_user -p stechuhr2
# In MySQL-Konsole:
SHOW TABLES;
EXIT;
7. Server starten
cd /home/torsten/Programs/TimeClock
npm run dev
Erwartete Ausgabe:
✅ Sequelize: MySQL-Datenbankverbindung hergestellt
✅ Sequelize: Models initialisiert
🕐 TimeClock Server läuft auf Port 3010
Troubleshooting
"Access denied for user"
# Berechtigungen prüfen
mysql -u root -p
SHOW GRANTS FOR 'timeclock_user'@'localhost';
-- Falls leer: Berechtigungen neu vergeben (siehe Schritt 3)
"Unknown database stechuhr2"
mysql -u root -p
CREATE DATABASE stechuhr2;
"Can't connect to MySQL server"
# MySQL-Status prüfen
sudo systemctl status mysql
# Starten falls gestoppt
sudo systemctl start mysql
Port 3306 bereits belegt
# Prüfen was auf Port 3306 läuft
sudo ss -tlnp | grep 3306
# MySQL-Port ändern (in /etc/my.cnf)
[mysqld]
port=3307
Schnell-Setup für Entwicklung
Falls Sie nur schnell testen möchten:
# MySQL als root ohne Passwort
mysql -u root
CREATE DATABASE stechuhr2;
EXIT;
Dann in .env:
DB_USER=root
DB_PASSWORD=
DB_NAME=stechuhr2
⚠️ Nicht für Produktion verwenden!
Existierende stechuhr2 DB verwenden
Falls Sie bereits eine stechuhr2 Datenbank haben:
# Prüfen Sie die Credentials
mysql -u IHR_USER -p stechuhr2
# Tabellen anzeigen
SHOW TABLES;
Dann in .env:
DB_USER=IHR_EXISTIERENDER_USER
DB_PASSWORD=IHR_EXISTIERENDES_PASSWORT
DB_NAME=stechuhr2
Benutzer erstellen (Template)
-- Benutzer mit vollem Zugriff
CREATE USER 'timeclock_user'@'localhost' IDENTIFIED BY 'Passwort123';
GRANT ALL PRIVILEGES ON stechuhr2.* TO 'timeclock_user'@'localhost';
FLUSH PRIVILEGES;
-- Nur Lese-Zugriff (optional)
CREATE USER 'timeclock_readonly'@'localhost' IDENTIFIED BY 'Passwort123';
GRANT SELECT ON stechuhr2.* TO 'timeclock_readonly'@'localhost';
FLUSH PRIVILEGES;
Backup erstellen
# Vor Änderungen immer Backup!
mysqldump -u timeclock_user -p stechuhr2 > backup_$(date +%Y%m%d_%H%M%S).sql
# Restore
mysql -u timeclock_user -p stechuhr2 < backup_20251015_143000.sql