chore: sync repository snapshot
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
<?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";
|
||||
Reference in New Issue
Block a user