diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4a1ea29 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +FROM php:8.2-apache + +RUN docker-php-ext-install mysqli pdo pdo_mysql + +RUN a2enmod rewrite + +COPY . /var/www/html/ + +RUN chown -R www-data:www-data /var/www/html + +EXPOSE 80 diff --git a/README_DEPLOY_COOLIFY.md b/README_DEPLOY_COOLIFY.md new file mode 100644 index 0000000..2ea6e05 --- /dev/null +++ b/README_DEPLOY_COOLIFY.md @@ -0,0 +1,37 @@ +# Patch Deploy Coolify - UAS_SIG Tiara + +File yang disediakan: +- `Dockerfile` -> taruh di root repo. Kalau repo masih memakai `dockerfile` huruf kecil, rename jadi `Dockerfile`. +- `koneksi.php` -> ganti file `koneksi.php` lama. +- `install_database.php` -> taruh sementara di root repo untuk import `database.sql`. +- `update_password_demo.php` -> opsional untuk membuat akun demo password `password`. + +## Env Coolify di resource aplikasi + +Isi di Production Environment Variables: + +```env +DB_HOST=host_database_internal +DB_PORT=3306 +DB_NAME=db_bantuan +DB_USER=mysql +DB_PASS=password_normal_user_database +``` + +## Urutan deploy + +1. Buat database MySQL/MariaDB dengan Initial Database: `db_bantuan`. +2. Buat aplikasi dari repo, Build Pack: Dockerfile, Ports Exposes: `80`. +3. Isi env di Production, Save All. +4. Redeploy aplikasi. +5. Buka: `https://URL-UAS/install_database.php`. +6. Jika berhasil, buka: `https://URL-UAS/update_password_demo.php` untuk akun demo password `password`. +7. Hapus `install_database.php` dan `update_password_demo.php` dari repo. +8. Redeploy lagi. + +## Akun demo setelah update_password_demo.php + +- admin / password +- pemerintah / password +- pengurus / password +- relawan / password diff --git a/install_database.php b/install_database.php new file mode 100644 index 0000000..c54af64 --- /dev/null +++ b/install_database.php @@ -0,0 +1,60 @@ +Install Database UAS SIG"; +echo "

Target koneksi: " . htmlspecialchars($host) . ":" . htmlspecialchars((string)$port) . ", database: " . htmlspecialchars($db) . ", user: " . htmlspecialchars($user) . "

"; + +$conn = new mysqli($host, $user, $pass, $db, $port); + +if ($conn->connect_error) { + die("

Koneksi gagal: " . htmlspecialchars($conn->connect_error) . "

"); +} + +$sqlFile = __DIR__ . "/database.sql"; + +if (!file_exists($sqlFile)) { + die("

File SQL tidak ditemukan: " . htmlspecialchars($sqlFile) . "

"); +} + +$sql = file_get_contents($sqlFile); + +// Untuk Coolify normal user: database sudah dibuat lewat Initial Database, +// jadi baris CREATE DATABASE dan USE database dihapus dari dump. +$sql = preg_replace('/CREATE\s+DATABASE\s+IF\s+NOT\s+EXISTS\s+`?[^`\s;]+`?.*?;/is', '', $sql); +$sql = preg_replace('/USE\s+`?[^`\s;]+`?\s*;/is', '', $sql); + +// Hindari duplikasi akun admin kalau installer terbuka ulang. +$sql = str_replace( + "INSERT INTO users (nama_lengkap, username, email, password, role) VALUES", + "INSERT IGNORE INTO users (nama_lengkap, username, email, password, role) VALUES", + $sql +); + +if ($conn->multi_query($sql)) { + do { + if ($result = $conn->store_result()) { + $result->free(); + } + } while ($conn->more_results() && $conn->next_result()); + + if ($conn->errno) { + echo "

Ada error saat import: " . htmlspecialchars($conn->error) . "

"; + } else { + echo "

Database berhasil diimport.

"; + echo "

Setelah ini, hapus file install_database.php dari repo lalu redeploy.

"; + } +} else { + echo "

Import gagal: " . htmlspecialchars($conn->error) . "

"; +} + +$conn->close(); +?> diff --git a/koneksi.php b/koneksi.php index 206d781..50c6893 100644 --- a/koneksi.php +++ b/koneksi.php @@ -1,26 +1,33 @@ connect_error) { - die(json_encode(['status'=>'error','message'=>'Koneksi DB gagal: '.$conn->connect_error])); + die(json_encode([ + 'status' => 'error', + 'message' => 'Koneksi DB gagal: ' . $conn->connect_error + ])); } + $conn->set_charset('utf8mb4'); -// Helper: sanitasi function bersih($str, $conn) { return $conn->real_escape_string(htmlspecialchars(strip_tags(trim($str)))); } -// Helper: cek login function cekLogin() { if (!isset($_SESSION['user_id'])) { header('Location: login.php'); @@ -28,7 +35,6 @@ function cekLogin() { } } -// Helper: cek role function cekRole(...$roles) { if (!in_array($_SESSION['role'] ?? '', $roles)) { header('Location: index.php?error=akses_ditolak'); @@ -36,15 +42,14 @@ function cekRole(...$roles) { } } -// Helper: format rupiah function rupiah($angka) { return 'Rp ' . number_format($angka, 0, ',', '.'); } -// Helper: usia dari tanggal lahir function hitungUsia($tgl) { if (!$tgl || $tgl === '0000-00-00') return '-'; $lahir = new DateTime($tgl); $sekarang = new DateTime(); return $lahir->diff($sekarang)->y . ' th'; -} \ No newline at end of file +} +?> diff --git a/update_password_demo.php b/update_password_demo.php new file mode 100644 index 0000000..bed0295 --- /dev/null +++ b/update_password_demo.php @@ -0,0 +1,43 @@ +query($sql); +} + +echo "

Akun demo berhasil dibuat/diupdate

"; +echo "

Password semua akun demo: password

"; +echo ""; +echo "

Setelah ini, hapus file update_password_demo.php dari repo lalu redeploy.

"; +?>