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 (