diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..7524d8a
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,19 @@
+# Gunakan hostname internal resource MySQL Coolify, bukan localhost.
+DB_HOST=mysql
+DB_PORT=3306
+DB_USER=root
+DB_PASSWORD=ganti_dengan_password_mysql
+
+# Kedua database dapat berada dalam satu resource MySQL.
+INFRA_DB_NAME=db_infrastruktur
+KEMISKINAN_DB_NAME=db_kemiskinan
+
+# Jika memakai dua resource MySQL terpisah, isi variabel khusus berikut:
+# INFRA_DB_HOST=mysql-infrastruktur
+# INFRA_DB_PORT=3306
+# INFRA_DB_USER=root
+# INFRA_DB_PASSWORD=password_infrastruktur
+# KEMISKINAN_DB_HOST=mysql-kemiskinan
+# KEMISKINAN_DB_PORT=3306
+# KEMISKINAN_DB_USER=root
+# KEMISKINAN_DB_PASSWORD=password_kemiskinan
diff --git a/README.md b/README.md
index d059b93..89f930a 100644
--- a/README.md
+++ b/README.md
@@ -19,3 +19,23 @@ Database dan tabel akan dibuat otomatis ketika project dijalankan.
- Username: `admin`
- Password: `password`
+## Deploy di Coolify
+
+Tambahkan resource MySQL ke project Coolify, lalu hubungkan aplikasi ke
+hostname internal resource tersebut. Jangan gunakan `localhost`, karena
+`localhost` di dalam container menunjuk ke container aplikasi sendiri.
+
+Tambahkan environment variable berikut pada aplikasi:
+
+```env
+DB_HOST=hostname-internal-mysql
+DB_PORT=3306
+DB_USER=root
+DB_PASSWORD=password-mysql
+INFRA_DB_NAME=db_infrastruktur
+KEMISKINAN_DB_NAME=db_kemiskinan
+```
+
+Jika user MySQL tidak memiliki izin membuat database, buat
+`db_infrastruktur` dan `db_kemiskinan` terlebih dahulu dari resource MySQL.
+Contoh lengkap tersedia di `.env.example`.
diff --git a/infrastruktur/koneksi.php b/infrastruktur/koneksi.php
index 0486af2..4e21063 100644
--- a/infrastruktur/koneksi.php
+++ b/infrastruktur/koneksi.php
@@ -1,18 +1,27 @@
connect_error) {
- die(json_encode(['error' => 'Koneksi MySQL gagal: ' . $conn->connect_error]));
+$host = getenv('INFRA_DB_HOST') ?: (getenv('DB_HOST') ?: '127.0.0.1');
+$port = (int) (getenv('INFRA_DB_PORT') ?: (getenv('DB_PORT') ?: 3306));
+$user = getenv('INFRA_DB_USER') ?: (getenv('DB_USER') ?: 'root');
+$pass = getenv('INFRA_DB_PASSWORD');
+$pass = $pass !== false ? $pass : (getenv('DB_PASSWORD') ?: '');
+$dbname = getenv('INFRA_DB_NAME') ?: 'db_infrastruktur';
+
+$conn = new mysqli($host, $user, $pass, '', $port);
+if ($conn->connect_errno) {
+ http_response_code(500);
+ die('Koneksi database Infrastruktur gagal. Periksa environment variable database di Coolify.');
}
-// Create database if not exist
-$conn->query("CREATE DATABASE IF NOT EXISTS `$dbname`");
-$conn->select_db($dbname);
+if (!$conn->select_db($dbname)) {
+ if (!$conn->query("CREATE DATABASE IF NOT EXISTS `$dbname`") || !$conn->select_db($dbname)) {
+ http_response_code(500);
+ die("Database Infrastruktur belum tersedia. Buat database `$dbname` atau gunakan akun yang memiliki izin CREATE DATABASE.");
+ }
+}
+
+$conn->set_charset('utf8mb4');
// Auto-create tables if not exist
$conn->query("CREATE TABLE IF NOT EXISTS tb_admin (
diff --git a/infrastruktur/migrate_db.php b/infrastruktur/migrate_db.php
index 80d749b..ad02aec 100644
--- a/infrastruktur/migrate_db.php
+++ b/infrastruktur/migrate_db.php
@@ -1,24 +1,29 @@
connect_error) {
die("Koneksi gagal: " . $conn->connect_error);
}
// 1. Buat Database
-$sql_db = "CREATE DATABASE IF NOT EXISTS db_infrastruktur";
+$sql_db = "CREATE DATABASE IF NOT EXISTS `$dbname`";
if ($conn->query($sql_db) === TRUE) {
- echo "Database db_infrastruktur siap.
";
+ echo "Database $dbname siap.
";
} else {
echo "Error membuat database: " . $conn->error . "
";
}
// Gunakan database tersebut
-$conn->select_db("db_infrastruktur");
+$conn->select_db($dbname);
// 2. Buat Tabel tb_admin
$sql_admin = "CREATE TABLE IF NOT EXISTS tb_admin (
diff --git a/kemiskinan/koneksi.php b/kemiskinan/koneksi.php
index 99c25a2..c99e561 100644
--- a/kemiskinan/koneksi.php
+++ b/kemiskinan/koneksi.php
@@ -1,18 +1,27 @@
connect_error) {
- die(json_encode(['error' => 'Koneksi MySQL gagal: ' . $conn->connect_error]));
+$host = getenv('KEMISKINAN_DB_HOST') ?: (getenv('DB_HOST') ?: '127.0.0.1');
+$port = (int) (getenv('KEMISKINAN_DB_PORT') ?: (getenv('DB_PORT') ?: 3306));
+$user = getenv('KEMISKINAN_DB_USER') ?: (getenv('DB_USER') ?: 'root');
+$pass = getenv('KEMISKINAN_DB_PASSWORD');
+$pass = $pass !== false ? $pass : (getenv('DB_PASSWORD') ?: '');
+$dbname = getenv('KEMISKINAN_DB_NAME') ?: 'db_kemiskinan';
+
+$conn = new mysqli($host, $user, $pass, '', $port);
+if ($conn->connect_errno) {
+ http_response_code(500);
+ die('Koneksi database Kemiskinan gagal. Periksa environment variable database di Coolify.');
}
-// Create database if not exist
-$conn->query("CREATE DATABASE IF NOT EXISTS `$dbname`");
-$conn->select_db($dbname);
+if (!$conn->select_db($dbname)) {
+ if (!$conn->query("CREATE DATABASE IF NOT EXISTS `$dbname`") || !$conn->select_db($dbname)) {
+ http_response_code(500);
+ die("Database Kemiskinan belum tersedia. Buat database `$dbname` atau gunakan akun yang memiliki izin CREATE DATABASE.");
+ }
+}
+
+$conn->set_charset('utf8mb4');
// Auto-create tables if not exist
$conn->query("CREATE TABLE IF NOT EXISTS tb_admin (
diff --git a/kemiskinan/migrate_db.php b/kemiskinan/migrate_db.php
index 022664d..8db9954 100644
--- a/kemiskinan/migrate_db.php
+++ b/kemiskinan/migrate_db.php
@@ -1,24 +1,29 @@
connect_error) {
die("Koneksi gagal: " . $conn->connect_error);
}
// 1. Buat Database
-$sql_db = "CREATE DATABASE IF NOT EXISTS db_kemiskinan";
+$sql_db = "CREATE DATABASE IF NOT EXISTS `$dbname`";
if ($conn->query($sql_db) === TRUE) {
- echo "Database db_kemiskinan siap.
";
+ echo "Database $dbname siap.
";
} else {
echo "Error membuat database: " . $conn->error . "
";
}
// Gunakan database tersebut
-$conn->select_db("db_kemiskinan");
+$conn->select_db($dbname);
// 2. Buat Tabel tb_admin
$sql_admin = "CREATE TABLE IF NOT EXISTS tb_admin (