Menambahkan beberapa perubahan
This commit is contained in:
@@ -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
@@ -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
|
||||||
@@ -8,10 +8,10 @@ ini_set('display_errors', 0);
|
|||||||
ini_set('display_startup_errors', 0);
|
ini_set('display_startup_errors', 0);
|
||||||
error_reporting(0);
|
error_reporting(0);
|
||||||
|
|
||||||
define('DB_HOST', 'localhost');
|
define('DB_HOST', getenv('DB_HOST') ?: 'localhost');
|
||||||
define('DB_USER', 'root');
|
define('DB_USER', getenv('DB_USER') ?: 'root');
|
||||||
define('DB_PASS', '');
|
define('DB_PASS', getenv('DB_PASS') !== false ? getenv('DB_PASS') : '');
|
||||||
define('DB_NAME', 'WEB_GIS');
|
define('DB_NAME', getenv('JALAN_DB_NAME') ?: 'WEB_GIS');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mengembalikan koneksi MySQLi.
|
* Mengembalikan koneksi MySQLi.
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
// File: config.php
|
// File: config.php
|
||||||
// ============================================================
|
// ============================================================
|
||||||
|
|
||||||
define('DB_HOST', 'localhost');
|
define('DB_HOST', getenv('DB_HOST') ?: 'localhost');
|
||||||
define('DB_USER', 'root'); // Sesuaikan dengan user MySQL Anda
|
define('DB_USER', getenv('DB_USER') ?: 'root');
|
||||||
define('DB_PASS', ''); // Sesuaikan dengan password MySQL Anda
|
define('DB_PASS', getenv('DB_PASS') !== false ? getenv('DB_PASS') : '');
|
||||||
define('DB_NAME', 'webgis_p3');
|
define('DB_NAME', getenv('POVERTY_DB_NAME') ?: 'webgis_p3');
|
||||||
|
|
||||||
function getDB() {
|
function getDB() {
|
||||||
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
|
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
|
||||||
|
|||||||
@@ -783,6 +783,20 @@
|
|||||||
document.getElementById('error-msg').classList.remove('show');
|
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) {
|
async function handleLogin(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
sembunyiError();
|
sembunyiError();
|
||||||
@@ -808,7 +822,25 @@
|
|||||||
body: JSON.stringify({ username, password, role: roleSelected })
|
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) {
|
if (data.success) {
|
||||||
sessionStorage.setItem('webgis_user', JSON.stringify({
|
sessionStorage.setItem('webgis_user', JSON.stringify({
|
||||||
@@ -829,13 +861,15 @@
|
|||||||
btnArrow.textContent = '→';
|
btnArrow.textContent = '→';
|
||||||
}
|
}
|
||||||
} catch {
|
} 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');
|
btn.classList.remove('loading');
|
||||||
btnText.textContent = 'Masuk';
|
btnText.textContent = 'Masuk';
|
||||||
btnArrow.textContent = '→';
|
btnArrow.textContent = '→';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cekKesehatanServer();
|
||||||
|
|
||||||
// Handle logout redirect
|
// Handle logout redirect
|
||||||
if (new URLSearchParams(location.search).get('logout')) {
|
if (new URLSearchParams(location.search).get('logout')) {
|
||||||
sessionStorage.removeItem('webgis_user');
|
sessionStorage.removeItem('webgis_user');
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
// File: config.php
|
// File: config.php
|
||||||
// ============================================================
|
// ============================================================
|
||||||
|
|
||||||
define('DB_HOST', 'localhost');
|
define('DB_HOST', getenv('DB_HOST') ?: 'localhost');
|
||||||
define('DB_USER', 'root');
|
define('DB_USER', getenv('DB_USER') ?: 'root');
|
||||||
define('DB_PASS', '');
|
define('DB_PASS', getenv('DB_PASS') !== false ? getenv('DB_PASS') : '');
|
||||||
define('DB_NAME', 'webgis_spbu');
|
define('DB_NAME', getenv('SPBU_DB_NAME') ?: 'webgis_spbu');
|
||||||
|
|
||||||
function jsonError($message, $code = 500) {
|
function jsonError($message, $code = 500) {
|
||||||
http_response_code($code);
|
http_response_code($code);
|
||||||
|
|||||||
@@ -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:
|
||||||
@@ -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>
|
||||||
@@ -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
@@ -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);
|
||||||
Reference in New Issue
Block a user