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);
|
||||
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,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);
|
||||
|
||||
@@ -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,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);
|
||||
|
||||
@@ -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