63 lines
2.1 KiB
PHP
63 lines
2.1 KiB
PHP
<?php
|
|
// ── INIT DATABASE (dijalankan entrypoint pada SETIAP container start) ────────
|
|
// Pengganti "migrate + seed" dari coolify-deployment.md Aturan #6:
|
|
// 1. Tunggu database siap (retry ±60 detik).
|
|
// 2. Kalau tabel `spbu` sudah ada → skip, supaya idempoten antar restart
|
|
// (INSERT seed di schema.sql tidak boleh jalan dua kali).
|
|
// 3. Kalau belum → eksekusi database/schema.sql, dengan melewati statement
|
|
// CREATE DATABASE/USE — database sudah disediakan Coolify dan user
|
|
// aplikasi tidak punya privilege CREATE DATABASE.
|
|
|
|
require __DIR__ . '/../api/env.php';
|
|
|
|
$db = dbConfig();
|
|
$dsn = "mysql:host={$db['host']};port={$db['port']};dbname={$db['dbname']};charset=utf8mb4";
|
|
|
|
echo "Waiting for database at {$db['host']}:{$db['port']}...\n";
|
|
|
|
$pdo = null;
|
|
$maxAttempts = 30;
|
|
for ($attempt = 1; $attempt <= $maxAttempts; $attempt++) {
|
|
try {
|
|
$pdo = new PDO($dsn, $db['username'], $db['password'], [
|
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
|
PDO::ATTR_TIMEOUT => 3,
|
|
]);
|
|
break;
|
|
} catch (PDOException $e) {
|
|
if ($attempt === $maxAttempts) {
|
|
fwrite(STDERR, "Database {$db['host']}:{$db['port']} unreachable after {$maxAttempts} attempts: {$e->getMessage()}\n");
|
|
exit(1);
|
|
}
|
|
sleep(2);
|
|
}
|
|
}
|
|
|
|
echo "Database connection OK.\n";
|
|
|
|
if ($pdo->query("SHOW TABLES LIKE 'spbu'")->fetch() !== false) {
|
|
echo "Table 'spbu' already exists, skipping schema init.\n";
|
|
exit(0);
|
|
}
|
|
|
|
echo "Initializing schema from database/schema.sql...\n";
|
|
|
|
$sql = file_get_contents(__DIR__ . '/../database/schema.sql');
|
|
|
|
// Buang baris komentar penuh supaya pemecahan per `;` tetap aman.
|
|
$lines = array_filter(
|
|
explode("\n", $sql),
|
|
fn ($line) => !str_starts_with(trim($line), '--')
|
|
);
|
|
|
|
$statements = array_filter(array_map('trim', explode(';', implode("\n", $lines))));
|
|
|
|
foreach ($statements as $statement) {
|
|
if (preg_match('/^(CREATE\s+DATABASE|USE)\b/i', $statement)) {
|
|
continue;
|
|
}
|
|
$pdo->exec($statement);
|
|
}
|
|
|
|
echo "Schema initialized: table 'spbu' created and seeded.\n";
|