Upload files to "/"

This commit is contained in:
2026-06-10 09:50:45 +00:00
parent a6a007967e
commit b2294fc5ee
5 changed files with 170 additions and 14 deletions
+11
View File
@@ -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
+37
View File
@@ -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
+60
View File
@@ -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
View File
@@ -1,26 +1,33 @@
<?php
// koneksi.php
session_start();
// koneksi.php - versi deploy Coolify
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_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) {
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';
}
?>
+43
View File
@@ -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>";
?>