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();
|
||||
?>
|
||||
+19
-14
@@ -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';
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -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