Menambahkan beberapa perubahan

This commit is contained in:
2026-06-09 20:26:18 +07:00
parent 311e5579f4
commit 6495336f18
10 changed files with 156 additions and 14 deletions
+7
View File
@@ -0,0 +1,7 @@
# Salin ke Environment Variables di Coolify / Docker
DB_HOST=db
DB_USER=webgis
DB_PASS=webgis123
POVERTY_DB_NAME=webgis_p3
SPBU_DB_NAME=webgis_spbu
JALAN_DB_NAME=WEB_GIS
+12
View File
@@ -0,0 +1,12 @@
FROM php:8.2-apache
RUN docker-php-ext-install mysqli pdo pdo_mysql \
&& a2enmod rewrite headers
COPY . /var/www/html/
RUN chown -R www-data:www-data /var/www/html
COPY docker/apache.conf /etc/apache2/sites-available/000-default.conf
EXPOSE 80
+4 -4
View File
@@ -8,10 +8,10 @@ ini_set('display_errors', 0);
ini_set('display_startup_errors', 0);
error_reporting(0);
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_NAME', 'WEB_GIS');
define('DB_HOST', getenv('DB_HOST') ?: 'localhost');
define('DB_USER', getenv('DB_USER') ?: 'root');
define('DB_PASS', getenv('DB_PASS') !== false ? getenv('DB_PASS') : '');
define('DB_NAME', getenv('JALAN_DB_NAME') ?: 'WEB_GIS');
/**
* Mengembalikan koneksi MySQLi.
+4 -4
View File
@@ -4,10 +4,10 @@
// File: config.php
// ============================================================
define('DB_HOST', 'localhost');
define('DB_USER', 'root'); // Sesuaikan dengan user MySQL Anda
define('DB_PASS', ''); // Sesuaikan dengan password MySQL Anda
define('DB_NAME', 'webgis_p3');
define('DB_HOST', getenv('DB_HOST') ?: 'localhost');
define('DB_USER', getenv('DB_USER') ?: 'root');
define('DB_PASS', getenv('DB_PASS') !== false ? getenv('DB_PASS') : '');
define('DB_NAME', getenv('POVERTY_DB_NAME') ?: 'webgis_p3');
function getDB() {
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
+36 -2
View File
@@ -783,6 +783,20 @@
document.getElementById('error-msg').classList.remove('show');
}
async function cekKesehatanServer() {
try {
const res = await fetch('api_auth.php', { method: 'GET' });
const text = await res.text();
if (text.trim().startsWith('<?php')) {
tampilError('PHP tidak berjalan di server deploy. File .php ditampilkan mentah — gunakan hosting dengan PHP (Apache/Nginx+PHP-FPM), bukan static site saja.');
return false;
}
return true;
} catch {
return true;
}
}
async function handleLogin(e) {
e.preventDefault();
sembunyiError();
@@ -808,7 +822,25 @@
body: JSON.stringify({ username, password, role: roleSelected })
});
const data = await res.json();
const raw = await res.text();
if (raw.trim().startsWith('<?php')) {
tampilError('PHP tidak berjalan di server. Deploy ulang dengan runtime PHP + MySQL (lihat Dockerfile di repo).');
btn.classList.remove('loading');
btnText.textContent = 'Masuk';
btnArrow.textContent = '→';
return;
}
let data;
try {
data = JSON.parse(raw);
} catch {
tampilError('Respons server tidak valid. Periksa /health.php — kemungkinan PHP atau MySQL belum aktif.');
btn.classList.remove('loading');
btnText.textContent = 'Masuk';
btnArrow.textContent = '→';
return;
}
if (data.success) {
sessionStorage.setItem('webgis_user', JSON.stringify({
@@ -829,13 +861,15 @@
btnArrow.textContent = '→';
}
} catch {
tampilError('Gagal terhubung ke server. Pastikan Apache & MySQL aktif.');
tampilError('Gagal terhubung ke server. PHP/MySQL mungkin belum aktif — buka /health.php untuk diagnosa.');
btn.classList.remove('loading');
btnText.textContent = 'Masuk';
btnArrow.textContent = '→';
}
}
cekKesehatanServer();
// Handle logout redirect
if (new URLSearchParams(location.search).get('logout')) {
sessionStorage.removeItem('webgis_user');
+4 -4
View File
@@ -4,10 +4,10 @@
// File: config.php
// ============================================================
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_NAME', 'webgis_spbu');
define('DB_HOST', getenv('DB_HOST') ?: 'localhost');
define('DB_USER', getenv('DB_USER') ?: 'root');
define('DB_PASS', getenv('DB_PASS') !== false ? getenv('DB_PASS') : '');
define('DB_NAME', getenv('SPBU_DB_NAME') ?: 'webgis_spbu');
function jsonError($message, $code = 500) {
http_response_code($code);
+37
View File
@@ -0,0 +1,37 @@
services:
web:
build: .
ports:
- "8080:80"
environment:
DB_HOST: db
DB_USER: webgis
DB_PASS: webgis123
POVERTY_DB_NAME: webgis_p3
SPBU_DB_NAME: webgis_spbu
JALAN_DB_NAME: WEB_GIS
depends_on:
db:
condition: service_healthy
volumes:
- .:/var/www/html
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root123
MYSQL_USER: webgis
MYSQL_PASSWORD: webgis123
ports:
- "3307:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./docker/init-databases.sql:/docker-entrypoint-initdb.d/init.sql:ro
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-uroot", "-proot123"]
interval: 5s
timeout: 5s
retries: 10
volumes:
mysql_data:
+13
View File
@@ -0,0 +1,13 @@
<VirtualHost *:80>
DocumentRoot /var/www/html
DirectoryIndex index.html index.php
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
+9
View File
@@ -0,0 +1,9 @@
-- Inisialisasi database untuk deploy Docker / Coolify
CREATE DATABASE IF NOT EXISTS webgis_p3 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE IF NOT EXISTS webgis_spbu CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE DATABASE IF NOT EXISTS WEB_GIS CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON webgis_p3.* TO 'webgis'@'%';
GRANT ALL PRIVILEGES ON webgis_spbu.* TO 'webgis'@'%';
GRANT ALL PRIVILEGES ON WEB_GIS.* TO 'webgis'@'%';
FLUSH PRIVILEGES;
+30
View File
@@ -0,0 +1,30 @@
<?php
header('Content-Type: application/json; charset=utf-8');
$checks = [
'php' => true,
'mysqli' => extension_loaded('mysqli'),
'version' => PHP_VERSION,
];
$dbHost = getenv('DB_HOST') ?: 'localhost';
$dbUser = getenv('DB_USER') ?: 'root';
$dbPass = getenv('DB_PASS') ?: '';
$dbName = getenv('POVERTY_DB_NAME') ?: 'webgis_p3';
$conn = @new mysqli($dbHost, $dbUser, $dbPass, $dbName);
$checks['database'] = [
'host' => $dbHost,
'name' => $dbName,
'ok' => !$conn->connect_error,
'message' => $conn->connect_error ?: 'Terhubung',
];
if (!$conn->connect_error) {
$conn->close();
}
$checks['ok'] = $checks['mysqli'] && $checks['database']['ok'];
http_response_code($checks['ok'] ? 200 : 503);
echo json_encode($checks, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);