Ensure database schema on app startup
This commit is contained in:
+4
-1
@@ -11,6 +11,9 @@ WORKDIR /var/www/html
|
|||||||
COPY . /var/www/html/
|
COPY . /var/www/html/
|
||||||
|
|
||||||
RUN mkdir -p /var/www/html/Leaflet2/uploads/bukti \
|
RUN mkdir -p /var/www/html/Leaflet2/uploads/bukti \
|
||||||
&& chown -R www-data:www-data /var/www/html/Leaflet2/uploads
|
&& chown -R www-data:www-data /var/www/html/Leaflet2/uploads \
|
||||||
|
&& chmod +x /var/www/html/docker/app-entrypoint.sh
|
||||||
|
|
||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
|
|
||||||
|
ENTRYPOINT ["/var/www/html/docker/app-entrypoint.sh"]
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
DROP DATABASE IF EXISTS webgis_miskin;
|
CREATE DATABASE IF NOT EXISTS webgis_miskin CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||||
CREATE DATABASE webgis_miskin CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
||||||
USE webgis_miskin;
|
USE webgis_miskin;
|
||||||
|
|
||||||
CREATE TABLE admins (
|
CREATE TABLE IF NOT EXISTS admins (
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
username VARCHAR(50) NOT NULL UNIQUE,
|
username VARCHAR(50) NOT NULL UNIQUE,
|
||||||
password_hash VARCHAR(255) NOT NULL,
|
password_hash VARCHAR(255) NOT NULL,
|
||||||
@@ -11,10 +10,10 @@ CREATE TABLE admins (
|
|||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
INSERT INTO admins (username, password_hash, nama) VALUES
|
INSERT IGNORE INTO admins (username, password_hash, nama) VALUES
|
||||||
('admin', '$2y$10$7O061pVz/aZ5YNK/fQyYIePIPnzDb.uZn38pC/Te3s7gRyko20dIK', 'Administrator');
|
('admin', '$2y$10$7O061pVz/aZ5YNK/fQyYIePIPnzDb.uZn38pC/Te3s7gRyko20dIK', 'Administrator');
|
||||||
|
|
||||||
CREATE TABLE rumah_ibadah (
|
CREATE TABLE IF NOT EXISTS rumah_ibadah (
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
nama VARCHAR(150) NOT NULL,
|
nama VARCHAR(150) NOT NULL,
|
||||||
jenis ENUM('Masjid', 'Gereja', 'Pura', 'Vihara', 'Klenteng', 'Lainnya') NOT NULL,
|
jenis ENUM('Masjid', 'Gereja', 'Pura', 'Vihara', 'Klenteng', 'Lainnya') NOT NULL,
|
||||||
@@ -26,7 +25,7 @@ CREATE TABLE rumah_ibadah (
|
|||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
CREATE TABLE penduduk_miskin (
|
CREATE TABLE IF NOT EXISTS penduduk_miskin (
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
kk_nama VARCHAR(150) NOT NULL,
|
kk_nama VARCHAR(150) NOT NULL,
|
||||||
kk_nik VARCHAR(20),
|
kk_nik VARCHAR(20),
|
||||||
@@ -52,7 +51,7 @@ CREATE TABLE penduduk_miskin (
|
|||||||
FOREIGN KEY (ibadah_id) REFERENCES rumah_ibadah(id) ON DELETE SET NULL
|
FOREIGN KEY (ibadah_id) REFERENCES rumah_ibadah(id) ON DELETE SET NULL
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
CREATE TABLE anggota_keluarga (
|
CREATE TABLE IF NOT EXISTS anggota_keluarga (
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
penduduk_id INT NOT NULL,
|
penduduk_id INT NOT NULL,
|
||||||
nama VARCHAR(150) NOT NULL,
|
nama VARCHAR(150) NOT NULL,
|
||||||
@@ -62,7 +61,7 @@ CREATE TABLE anggota_keluarga (
|
|||||||
FOREIGN KEY (penduduk_id) REFERENCES penduduk_miskin(id) ON DELETE CASCADE
|
FOREIGN KEY (penduduk_id) REFERENCES penduduk_miskin(id) ON DELETE CASCADE
|
||||||
) ENGINE=InnoDB;
|
) ENGINE=InnoDB;
|
||||||
|
|
||||||
CREATE TABLE riwayat_bantuan (
|
CREATE TABLE IF NOT EXISTS riwayat_bantuan (
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
penduduk_id INT NOT NULL,
|
penduduk_id INT NOT NULL,
|
||||||
jenis_bantuan VARCHAR(120) NOT NULL,
|
jenis_bantuan VARCHAR(120) NOT NULL,
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
php /var/www/html/docker/ensure-database.php
|
||||||
|
|
||||||
|
exec apache2-foreground
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
<?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);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user