Files

58 lines
1.8 KiB
PHP

<?php
declare(strict_types=1);
$host = getenv('DB_HOST') ?: 'db';
$username = getenv('DB_SETUP_USERNAME') ?: getenv('DB_USERNAME') ?: 'root';
$password = getenv('DB_SETUP_PASSWORD') ?: getenv('DB_PASSWORD') ?: '';
$charset = getenv('DB_CHARSET') ?: 'utf8mb4';
$schemas = [
__DIR__ . '/../Leaflet/sql/schema.sql',
__DIR__ . '/../Leaflet/sql/spatial_schema.sql',
__DIR__ . '/../Leaflet2/sql/miskin_schema.sql',
];
function connectWithRetry(string $dsn, string $username, string $password): PDO
{
$lastException = null;
for ($attempt = 1; $attempt <= 20; $attempt++) {
try {
return new PDO($dsn, $username, $password, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
]);
} catch (PDOException $exception) {
$lastException = $exception;
fwrite(STDERR, "Database belum siap, mencoba lagi ({$attempt}/20)...\n");
sleep(3);
}
}
throw $lastException ?? new RuntimeException('Koneksi database gagal.');
}
try {
$dsn = "mysql:host={$host};charset={$charset}";
$pdo = connectWithRetry($dsn, $username, $password);
foreach ($schemas as $schemaPath) {
$sql = file_get_contents($schemaPath);
if ($sql === false) {
throw new RuntimeException("File schema tidak ditemukan: {$schemaPath}");
}
$pdo->exec($sql);
}
$pdo->exec("
GRANT ALL PRIVILEGES ON webgis_spbu.* TO 'webgis_user'@'%';
GRANT ALL PRIVILEGES ON webgis_miskin.* TO 'webgis_user'@'%';
FLUSH PRIVILEGES;
");
fwrite(STDOUT, "Database schema siap.\n");
} catch (Throwable $exception) {
fwrite(STDERR, "Gagal memastikan database schema: " . $exception->getMessage() . "\n");
exit(1);
}