Some more changes for Docker

This commit is contained in:
Fabio Herzig
2026-07-25 22:30:48 +02:00
parent 40a1bdd379
commit f10ff26b30
6 changed files with 957 additions and 3 deletions
+91
View File
@@ -0,0 +1,91 @@
<?php
/**
* Master Database Setup & Initialization Script
* Runs user generation and SQL schema import automatically on Docker Compose initialization.
*/
echo "========================================\n";
echo " WKVS Database Automated Initializer \n";
echo "========================================\n\n";
$setupDir = __DIR__;
$baseDir = dirname(__DIR__, 2);
// 1. Run User Generation & Grant setup
echo "[1/3] Erstelle/Synchronisiere Datenbank-Benutzer...\n";
require_once $setupDir . '/generate-users.php';
$userResult = sync_and_create_db_users();
if (!$userResult['success']) {
echo "❌ Fehler bei Benutzererstellung: " . $userResult['message'] . "\n";
exit(1);
}
echo "" . $userResult['message'] . "\n\n";
// 2. Generate SQL structure file with table prefix
echo "[2/3] Generiere SQL-Struktur & Tabellen-Prefix...\n";
require $setupDir . '/generate-sql.php';
echo "\n[3/3] Importiere Tabellen-Struktur in die Datenbank...\n";
$generatedSqlFile = $setupDir . '/sql-database.sql';
if (!file_exists($generatedSqlFile)) {
echo "❌ Fehler: '$generatedSqlFile' wurde nicht gefunden.\n";
exit(1);
}
// Connect to MariaDB to import SQL schema
$dbEnvFile = $baseDir . '/config/.env.db';
$dbEnv = parse_env_file_simple($dbEnvFile);
$rootPass = $dbEnv['MYSQL_ROOT_PASSWORD'] ?? '';
$dbName = $dbEnv['MYSQL_DATABASE'] ?? 'devdb_';
$dbHost = getenv('DB_HOST') ?: ($dbEnv['DB_HOST'] ?? 'mariadb');
$dbPort = (int)($dbEnv['DB_PORT'] ?? 3306);
$mysqli = null;
foreach ([$dbHost, 'mariadb', '127.0.0.1', 'localhost'] as $tryHost) {
try {
$conn = @new mysqli($tryHost, 'root', $rootPass, $dbName, $dbPort);
if (!$conn->connect_error) {
$mysqli = $conn;
break;
}
} catch (Throwable $e) {
continue;
}
}
if (!$mysqli) {
echo "❌ Fehler: Konnte keine Verbindung als 'root' zu MariaDB herstellen.\n";
exit(1);
}
$sqlContent = file_get_contents($generatedSqlFile);
if ($mysqli->multi_query($sqlContent)) {
do {
if ($res = $mysqli->store_result()) {
$res->free();
}
} while ($mysqli->more_results() && $mysqli->next_result());
if ($mysqli->errno) {
echo "❌ SQL Import-Fehler: " . $mysqli->error . "\n";
exit(1);
}
echo "✓ Datenbank-Struktur erfolgreich importiert!\n\n";
} else {
echo "❌ SQL Import-Fehler: " . $mysqli->error . "\n";
exit(1);
}
$mysqli->close();
echo "========================================\n";
echo "✅ Datenbank-Initialisierung abgeschlossen!\n";
echo "========================================\n";