Upload files to "/"
This commit is contained in:
+11
@@ -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
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
<?php
|
||||||
|
// install_database.php - installer sementara database UAS SIG Tiara
|
||||||
|
// HAPUS file ini setelah database berhasil diimport.
|
||||||
|
|
||||||
|
set_time_limit(300);
|
||||||
|
|
||||||
|
$host = getenv('DB_HOST') ?: 'localhost';
|
||||||
|
$user = getenv('DB_USER') ?: 'root';
|
||||||
|
$pass = getenv('DB_PASS') ?: (getenv('DB_PASSWORD') ?: '');
|
||||||
|
$db = getenv('DB_NAME') ?: 'db_bantuan';
|
||||||
|
$port = (int)(getenv('DB_PORT') ?: 3306);
|
||||||
|
|
||||||
|
echo "<h2>Install Database UAS SIG</h2>";
|
||||||
|
echo "<p>Target koneksi: <b>" . htmlspecialchars($host) . ":" . htmlspecialchars((string)$port) . "</b>, database: <b>" . htmlspecialchars($db) . "</b>, user: <b>" . htmlspecialchars($user) . "</b></p>";
|
||||||
|
|
||||||
|
$conn = new mysqli($host, $user, $pass, $db, $port);
|
||||||
|
|
||||||
|
if ($conn->connect_error) {
|
||||||
|
die("<p style='color:red'>Koneksi gagal: " . htmlspecialchars($conn->connect_error) . "</p>");
|
||||||
|
}
|
||||||
|
|
||||||
|
$sqlFile = __DIR__ . "/database.sql";
|
||||||
|
|
||||||
|
if (!file_exists($sqlFile)) {
|
||||||
|
die("<p style='color:red'>File SQL tidak ditemukan: " . htmlspecialchars($sqlFile) . "</p>");
|
||||||
|
}
|
||||||
|
|
||||||
|
$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 "<p style='color:red'>Ada error saat import: " . htmlspecialchars($conn->error) . "</p>";
|
||||||
|
} else {
|
||||||
|
echo "<p style='color:green;font-weight:bold'>Database berhasil diimport.</p>";
|
||||||
|
echo "<p>Setelah ini, hapus file <code>install_database.php</code> dari repo lalu redeploy.</p>";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
echo "<p style='color:red'>Import gagal: " . htmlspecialchars($conn->error) . "</p>";
|
||||||
|
}
|
||||||
|
|
||||||
|
$conn->close();
|
||||||
|
?>
|
||||||
+18
-13
@@ -1,26 +1,33 @@
|
|||||||
<?php
|
<?php
|
||||||
// koneksi.php
|
// koneksi.php - versi deploy Coolify
|
||||||
session_start();
|
if (session_status() === PHP_SESSION_NONE) {
|
||||||
|
session_start();
|
||||||
|
}
|
||||||
|
|
||||||
|
$host = getenv('DB_HOST') ?: 'localhost';
|
||||||
|
$user = getenv('DB_USER') ?: 'root';
|
||||||
|
$pass = getenv('DB_PASS') ?: (getenv('DB_PASSWORD') ?: '');
|
||||||
|
$db = getenv('DB_NAME') ?: 'db_bantuan';
|
||||||
|
$port = (int)(getenv('DB_PORT') ?: 3306);
|
||||||
|
|
||||||
$host = getenv('DB_HOST');
|
|
||||||
$user = getenv('DB_USER');
|
|
||||||
$pass = getenv('DB_PASSWORD');
|
|
||||||
$db = getenv('DB_NAME');
|
|
||||||
define('APP_NAME', 'WebGIS Poverty Mapping');
|
define('APP_NAME', 'WebGIS Poverty Mapping');
|
||||||
define('APP_VERSION', '2.0');
|
define('APP_VERSION', '2.0');
|
||||||
|
|
||||||
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
|
$conn = new mysqli($host, $user, $pass, $db, $port);
|
||||||
|
|
||||||
if ($conn->connect_error) {
|
if ($conn->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');
|
$conn->set_charset('utf8mb4');
|
||||||
|
|
||||||
// Helper: sanitasi
|
|
||||||
function bersih($str, $conn) {
|
function bersih($str, $conn) {
|
||||||
return $conn->real_escape_string(htmlspecialchars(strip_tags(trim($str))));
|
return $conn->real_escape_string(htmlspecialchars(strip_tags(trim($str))));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper: cek login
|
|
||||||
function cekLogin() {
|
function cekLogin() {
|
||||||
if (!isset($_SESSION['user_id'])) {
|
if (!isset($_SESSION['user_id'])) {
|
||||||
header('Location: login.php');
|
header('Location: login.php');
|
||||||
@@ -28,7 +35,6 @@ function cekLogin() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper: cek role
|
|
||||||
function cekRole(...$roles) {
|
function cekRole(...$roles) {
|
||||||
if (!in_array($_SESSION['role'] ?? '', $roles)) {
|
if (!in_array($_SESSION['role'] ?? '', $roles)) {
|
||||||
header('Location: index.php?error=akses_ditolak');
|
header('Location: index.php?error=akses_ditolak');
|
||||||
@@ -36,15 +42,14 @@ function cekRole(...$roles) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper: format rupiah
|
|
||||||
function rupiah($angka) {
|
function rupiah($angka) {
|
||||||
return 'Rp ' . number_format($angka, 0, ',', '.');
|
return 'Rp ' . number_format($angka, 0, ',', '.');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper: usia dari tanggal lahir
|
|
||||||
function hitungUsia($tgl) {
|
function hitungUsia($tgl) {
|
||||||
if (!$tgl || $tgl === '0000-00-00') return '-';
|
if (!$tgl || $tgl === '0000-00-00') return '-';
|
||||||
$lahir = new DateTime($tgl);
|
$lahir = new DateTime($tgl);
|
||||||
$sekarang = new DateTime();
|
$sekarang = new DateTime();
|
||||||
return $lahir->diff($sekarang)->y . ' th';
|
return $lahir->diff($sekarang)->y . ' th';
|
||||||
}
|
}
|
||||||
|
?>
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
// update_password_demo.php - opsional, untuk membuat akun demo bisa login dengan password: password
|
||||||
|
// HAPUS file ini setelah dijalankan.
|
||||||
|
|
||||||
|
require_once 'koneksi.php';
|
||||||
|
|
||||||
|
$plainPassword = 'password';
|
||||||
|
|
||||||
|
$users = [
|
||||||
|
['Administrator', 'admin', 'admin@webgis.id', 'admin'],
|
||||||
|
['Pemerintah Demo', 'pemerintah', 'pemerintah@webgis.id', 'pemerintah'],
|
||||||
|
['Pengurus Demo', 'pengurus', 'pengurus@webgis.id', 'pengurus'],
|
||||||
|
['Relawan Demo', 'relawan', 'relawan@webgis.id', 'relawan'],
|
||||||
|
];
|
||||||
|
|
||||||
|
foreach ($users as $u) {
|
||||||
|
[$nama, $username, $email, $role] = $u;
|
||||||
|
$nama = bersih($nama, $conn);
|
||||||
|
$username = bersih($username, $conn);
|
||||||
|
$email = bersih($email, $conn);
|
||||||
|
$role = bersih($role, $conn);
|
||||||
|
|
||||||
|
$sql = "
|
||||||
|
INSERT INTO users (nama_lengkap, username, email, password, role, aktif)
|
||||||
|
VALUES ('$nama', '$username', '$email', '$plainPassword', '$role', 1)
|
||||||
|
ON DUPLICATE KEY UPDATE
|
||||||
|
password = '$plainPassword',
|
||||||
|
role = '$role',
|
||||||
|
aktif = 1
|
||||||
|
";
|
||||||
|
$conn->query($sql);
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "<h2>Akun demo berhasil dibuat/diupdate</h2>";
|
||||||
|
echo "<p>Password semua akun demo: <b>password</b></p>";
|
||||||
|
echo "<ul>
|
||||||
|
<li>admin / password</li>
|
||||||
|
<li>pemerintah / password</li>
|
||||||
|
<li>pengurus / password</li>
|
||||||
|
<li>relawan / password</li>
|
||||||
|
</ul>";
|
||||||
|
echo "<p>Setelah ini, hapus file <code>update_password_demo.php</code> dari repo lalu redeploy.</p>";
|
||||||
|
?>
|
||||||
Reference in New Issue
Block a user