Make database bootstrap robust for Docker deployment
This commit is contained in:
+26
-8
@@ -9,29 +9,47 @@ function env_first(array $keys, $default = '') {
|
|||||||
return $default;
|
return $default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function connect_server(array $hosts, string $user, string $pass) {
|
||||||
|
foreach ($hosts as $host) {
|
||||||
|
$conn = @mysqli_connect($host, $user, $pass);
|
||||||
|
if ($conn) return $conn;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$hosts = array_filter(array_unique([
|
$hosts = array_filter(array_unique([
|
||||||
env_first(['DB_HOST', 'MYSQL_HOST', 'MARIADB_HOST']),
|
env_first(['DB_HOST', 'MYSQL_HOST', 'MARIADB_HOST']),
|
||||||
|
'database',
|
||||||
'mysql',
|
'mysql',
|
||||||
'mariadb',
|
'mariadb',
|
||||||
'db',
|
'db',
|
||||||
'database',
|
|
||||||
'host.docker.internal',
|
'host.docker.internal',
|
||||||
'127.0.0.1',
|
'127.0.0.1',
|
||||||
]));
|
]));
|
||||||
|
|
||||||
$user = env_first(['DB_USER', 'MYSQL_USER', 'MARIADB_USER'], 'root');
|
$user = env_first(['DB_USER', 'MYSQL_USER', 'MARIADB_USER'], 'root');
|
||||||
$pass = env_first(['DB_PASSWORD', 'MYSQL_PASSWORD', 'MARIADB_PASSWORD'], '');
|
$pass = env_first(['DB_PASSWORD', 'MYSQL_PASSWORD', 'MARIADB_PASSWORD'], '');
|
||||||
$db = env_first(['SPBU_DB_NAME', 'DB_NAME_SPBU', 'DB_NAME', 'MYSQL_DATABASE', 'MARIADB_DATABASE'], 'db_spbu');
|
$db = env_first(['SPBU_DB_NAME', 'DB_NAME_SPBU'], 'db_spbu');
|
||||||
|
|
||||||
$conn = false;
|
$conn = connect_server($hosts, $user, $pass);
|
||||||
foreach ($hosts as $host) {
|
|
||||||
$conn = mysqli_connect($host, $user, $pass, $db);
|
|
||||||
if ($conn) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$conn) {
|
if (!$conn) {
|
||||||
die("Koneksi database gagal. Pastikan MySQL service berjalan, environment DB_HOST/DB_USER/DB_PASSWORD benar, dan database '$db' sudah diimport. Error: " . mysqli_connect_error());
|
die("Koneksi database gagal. Pastikan MySQL service berjalan dan DB_HOST/DB_USER/DB_PASSWORD benar. Error: " . mysqli_connect_error());
|
||||||
}
|
}
|
||||||
|
|
||||||
mysqli_set_charset($conn, 'utf8mb4');
|
mysqli_set_charset($conn, 'utf8mb4');
|
||||||
|
|
||||||
|
$safeDb = preg_replace('/[^a-zA-Z0-9_]/', '', $db);
|
||||||
|
mysqli_query($conn, "CREATE DATABASE IF NOT EXISTS `$safeDb` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
|
||||||
|
mysqli_select_db($conn, $safeDb);
|
||||||
|
|
||||||
|
mysqli_query($conn, "CREATE TABLE IF NOT EXISTS spbu (
|
||||||
|
id INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
nama_spbu VARCHAR(100) NOT NULL,
|
||||||
|
no_wa VARCHAR(20) NOT NULL,
|
||||||
|
status ENUM('yes','no') NOT NULL DEFAULT 'no',
|
||||||
|
latitude DOUBLE NOT NULL,
|
||||||
|
longitude DOUBLE NOT NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
|
||||||
?>
|
?>
|
||||||
|
|||||||
+57
-8
@@ -9,35 +9,84 @@ function env_first(array $keys, $default = '') {
|
|||||||
return $default;
|
return $default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function connect_server(array $hosts, string $user, string $pass) {
|
||||||
|
foreach ($hosts as $host) {
|
||||||
|
$conn = @mysqli_connect($host, $user, $pass);
|
||||||
|
if ($conn) return $conn;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$hosts = array_filter(array_unique([
|
$hosts = array_filter(array_unique([
|
||||||
env_first(['DB_HOST', 'MYSQL_HOST', 'MARIADB_HOST']),
|
env_first(['DB_HOST', 'MYSQL_HOST', 'MARIADB_HOST']),
|
||||||
|
'database',
|
||||||
'mysql',
|
'mysql',
|
||||||
'mariadb',
|
'mariadb',
|
||||||
'db',
|
'db',
|
||||||
'database',
|
|
||||||
'host.docker.internal',
|
'host.docker.internal',
|
||||||
'127.0.0.1',
|
'127.0.0.1',
|
||||||
]));
|
]));
|
||||||
|
|
||||||
$user = env_first(['DB_USER', 'MYSQL_USER', 'MARIADB_USER'], 'root');
|
$user = env_first(['DB_USER', 'MYSQL_USER', 'MARIADB_USER'], 'root');
|
||||||
$pass = env_first(['DB_PASSWORD', 'MYSQL_PASSWORD', 'MARIADB_PASSWORD'], '');
|
$pass = env_first(['DB_PASSWORD', 'MYSQL_PASSWORD', 'MARIADB_PASSWORD'], '');
|
||||||
$db = env_first(['WEBGIS02_DB_NAME', 'DB_NAME_WEBGIS02', 'DB_NAME', 'MYSQL_DATABASE', 'MARIADB_DATABASE'], 'webgis_db');
|
$db = env_first(['WEBGIS02_DB_NAME', 'DB_NAME_WEBGIS02'], 'webgis_db');
|
||||||
|
|
||||||
$conn = false;
|
$conn = connect_server($hosts, $user, $pass);
|
||||||
foreach ($hosts as $host) {
|
|
||||||
$conn = mysqli_connect($host, $user, $pass, $db);
|
|
||||||
if ($conn) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$conn) {
|
if (!$conn) {
|
||||||
die(json_encode([
|
die(json_encode([
|
||||||
'status' => 'error',
|
'status' => 'error',
|
||||||
'message' => "Koneksi database gagal. Pastikan MySQL service berjalan, environment DB_HOST/DB_USER/DB_PASSWORD benar, dan database '$db' sudah diimport. Error: " . mysqli_connect_error()
|
'message' => 'Koneksi database gagal. Pastikan MySQL service berjalan dan DB_HOST/DB_USER/DB_PASSWORD benar. Error: ' . mysqli_connect_error()
|
||||||
]));
|
]));
|
||||||
}
|
}
|
||||||
|
|
||||||
mysqli_set_charset($conn, 'utf8mb4');
|
mysqli_set_charset($conn, 'utf8mb4');
|
||||||
|
|
||||||
|
$safeDb = preg_replace('/[^a-zA-Z0-9_]/', '', $db);
|
||||||
|
mysqli_query($conn, "CREATE DATABASE IF NOT EXISTS `$safeDb` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
|
||||||
|
mysqli_select_db($conn, $safeDb);
|
||||||
|
|
||||||
|
mysqli_query($conn, "CREATE TABLE IF NOT EXISTS tb_jalan (
|
||||||
|
id INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
nama_jalan VARCHAR(200) NOT NULL,
|
||||||
|
status_jalan ENUM('Nasional','Provinsi','Kabupaten') NOT NULL DEFAULT 'Kabupaten',
|
||||||
|
panjang_meter DECIMAL(15,2) NOT NULL DEFAULT 0,
|
||||||
|
geojson LONGTEXT NOT NULL,
|
||||||
|
keterangan TEXT,
|
||||||
|
foto VARCHAR(255) NULL,
|
||||||
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
|
||||||
|
|
||||||
|
mysqli_query($conn, "CREATE TABLE IF NOT EXISTS tb_parsil (
|
||||||
|
id INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
nama_pemilik VARCHAR(200) NOT NULL,
|
||||||
|
no_sertifikat VARCHAR(100) NOT NULL,
|
||||||
|
status_kepemilikan ENUM('SHM','HGB','HGU','HP') NOT NULL DEFAULT 'SHM',
|
||||||
|
luas_m2 DECIMAL(20,4) NOT NULL DEFAULT 0,
|
||||||
|
geojson LONGTEXT NOT NULL,
|
||||||
|
alamat TEXT,
|
||||||
|
foto VARCHAR(255) NULL,
|
||||||
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
|
||||||
|
|
||||||
|
mysqli_query($conn, "CREATE TABLE IF NOT EXISTS tb_jalan_rusak (
|
||||||
|
id INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
lokasi VARCHAR(200) NOT NULL,
|
||||||
|
tingkat ENUM('Ringan','Sedang','Berat') NOT NULL DEFAULT 'Sedang',
|
||||||
|
jenis VARCHAR(100) NOT NULL DEFAULT '',
|
||||||
|
geojson LONGTEXT NOT NULL,
|
||||||
|
keterangan TEXT,
|
||||||
|
foto VARCHAR(255) NULL,
|
||||||
|
tanggal_lapor DATE NOT NULL DEFAULT (CURRENT_DATE),
|
||||||
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
|
||||||
|
|
||||||
header('Content-Type: application/json');
|
header('Content-Type: application/json');
|
||||||
header('Access-Control-Allow-Origin: *');
|
header('Access-Control-Allow-Origin: *');
|
||||||
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
|
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
|
||||||
|
|||||||
+26
-8
@@ -9,29 +9,47 @@ function env_first(array $keys, $default = '') {
|
|||||||
return $default;
|
return $default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function connect_server(array $hosts, string $user, string $pass) {
|
||||||
|
foreach ($hosts as $host) {
|
||||||
|
$conn = @mysqli_connect($host, $user, $pass);
|
||||||
|
if ($conn) return $conn;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$hosts = array_filter(array_unique([
|
$hosts = array_filter(array_unique([
|
||||||
env_first(['DB_HOST', 'MYSQL_HOST', 'MARIADB_HOST']),
|
env_first(['DB_HOST', 'MYSQL_HOST', 'MARIADB_HOST']),
|
||||||
|
'database',
|
||||||
'mysql',
|
'mysql',
|
||||||
'mariadb',
|
'mariadb',
|
||||||
'db',
|
'db',
|
||||||
'database',
|
|
||||||
'host.docker.internal',
|
'host.docker.internal',
|
||||||
'127.0.0.1',
|
'127.0.0.1',
|
||||||
]));
|
]));
|
||||||
|
|
||||||
$user = env_first(['DB_USER', 'MYSQL_USER', 'MARIADB_USER'], 'root');
|
$user = env_first(['DB_USER', 'MYSQL_USER', 'MARIADB_USER'], 'root');
|
||||||
$pass = env_first(['DB_PASSWORD', 'MYSQL_PASSWORD', 'MARIADB_PASSWORD'], '');
|
$pass = env_first(['DB_PASSWORD', 'MYSQL_PASSWORD', 'MARIADB_PASSWORD'], '');
|
||||||
$db = env_first(['SPBU_DB_NAME', 'DB_NAME_SPBU', 'DB_NAME', 'MYSQL_DATABASE', 'MARIADB_DATABASE'], 'db_spbu');
|
$db = env_first(['SPBU_DB_NAME', 'DB_NAME_SPBU'], 'db_spbu');
|
||||||
|
|
||||||
$conn = false;
|
$conn = connect_server($hosts, $user, $pass);
|
||||||
foreach ($hosts as $host) {
|
|
||||||
$conn = mysqli_connect($host, $user, $pass, $db);
|
|
||||||
if ($conn) break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$conn) {
|
if (!$conn) {
|
||||||
die("Koneksi database gagal. Pastikan MySQL service berjalan, environment DB_HOST/DB_USER/DB_PASSWORD benar, dan database '$db' sudah diimport. Error: " . mysqli_connect_error());
|
die("Koneksi database gagal. Pastikan MySQL service berjalan dan DB_HOST/DB_USER/DB_PASSWORD benar. Error: " . mysqli_connect_error());
|
||||||
}
|
}
|
||||||
|
|
||||||
mysqli_set_charset($conn, 'utf8mb4');
|
mysqli_set_charset($conn, 'utf8mb4');
|
||||||
|
|
||||||
|
$safeDb = preg_replace('/[^a-zA-Z0-9_]/', '', $db);
|
||||||
|
mysqli_query($conn, "CREATE DATABASE IF NOT EXISTS `$safeDb` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci");
|
||||||
|
mysqli_select_db($conn, $safeDb);
|
||||||
|
|
||||||
|
mysqli_query($conn, "CREATE TABLE IF NOT EXISTS spbu (
|
||||||
|
id INT(11) NOT NULL AUTO_INCREMENT,
|
||||||
|
nama_spbu VARCHAR(100) NOT NULL,
|
||||||
|
no_wa VARCHAR(20) NOT NULL,
|
||||||
|
status ENUM('yes','no') NOT NULL DEFAULT 'no',
|
||||||
|
latitude DOUBLE NOT NULL,
|
||||||
|
longitude DOUBLE NOT NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4");
|
||||||
?>
|
?>
|
||||||
|
|||||||
Reference in New Issue
Block a user