diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..74805b4 --- /dev/null +++ b/.env.example @@ -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 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d7c4a4a --- /dev/null +++ b/Dockerfile @@ -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 diff --git a/Manajemen_Jalan_dan_Parsil/api/db.php b/Manajemen_Jalan_dan_Parsil/api/db.php index 83ee258..16e688c 100644 --- a/Manajemen_Jalan_dan_Parsil/api/db.php +++ b/Manajemen_Jalan_dan_Parsil/api/db.php @@ -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. diff --git a/WebGIS_PovertyMap/config.php b/WebGIS_PovertyMap/config.php index ca3c330..a6120fd 100644 --- a/WebGIS_PovertyMap/config.php +++ b/WebGIS_PovertyMap/config.php @@ -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); diff --git a/WebGIS_PovertyMap/login.html b/WebGIS_PovertyMap/login.html index 9e68ee8..106d67e 100644 --- a/WebGIS_PovertyMap/login.html +++ b/WebGIS_PovertyMap/login.html @@ -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(' + DocumentRoot /var/www/html + DirectoryIndex index.html index.php + + + Options Indexes FollowSymLinks + AllowOverride All + Require all granted + + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + diff --git a/docker/init-databases.sql b/docker/init-databases.sql new file mode 100644 index 0000000..416da1b --- /dev/null +++ b/docker/init-databases.sql @@ -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; diff --git a/health.php b/health.php new file mode 100644 index 0000000..ea91727 --- /dev/null +++ b/health.php @@ -0,0 +1,30 @@ + 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);