Adding docker for deployment

This commit is contained in:
Araya's Project
2026-06-10 19:41:20 +07:00
parent 593a6e2487
commit 980017464b
6 changed files with 192 additions and 14 deletions
+17
View File
@@ -0,0 +1,17 @@
FROM php:8.2-apache
# Enable mod_rewrite for clean URLs and .htaccess support
RUN a2enmod rewrite
# Install PHP extensions needed: mysqli (sig-03), pdo + pdo_mysql (sig-01, sig-02)
RUN docker-php-ext-install mysqli pdo pdo_mysql
# Allow .htaccess overrides in /var/www/html
RUN sed -i 's/AllowOverride None/AllowOverride All/g' /etc/apache2/apache2.conf
# Copy all project files into Apache web root
COPY . /var/www/html/
# Fix file permissions
RUN chown -R www-data:www-data /var/www/html \
&& chmod -R 755 /var/www/html
+127
View File
@@ -0,0 +1,127 @@
-- ============================================================
-- Combined DB init for Docker
-- Runs automatically on first `docker compose up`
-- Creates: sig_spbu, sig_mapping, sig_bansos
-- ============================================================
-- ============================================================
-- sig-01: WebGIS SPBU
-- ============================================================
CREATE DATABASE IF NOT EXISTS sig_spbu
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE sig_spbu;
CREATE TABLE IF NOT EXISTS spbu (
id INT AUTO_INCREMENT PRIMARY KEY,
kode VARCHAR(50) NOT NULL UNIQUE,
nama VARCHAR(255) NOT NULL,
is_24jam TINYINT(1) NOT NULL DEFAULT 0,
latitude DECIMAL(10, 8) NOT NULL,
longitude DECIMAL(11, 8) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO spbu (kode, nama, is_24jam, latitude, longitude) VALUES
('61.701.01', 'SPBU Pertamina Ahmad Yani', 1, -0.02830, 109.34150),
('61.701.02', 'SPBU Pertamina Gajah Mada', 0, -0.01970, 109.33490),
('61.701.03', 'SPBU Pertamina Tanjungpura', 1, -0.03480, 109.33170),
('61.701.04', 'SPBU Pertamina Imam Bonjol', 0, -0.05680, 109.34670),
('61.701.05', 'SPBU Pertamina Soekarno-Hatta', 1, -0.06510, 109.35540),
('61.701.06', 'SPBU Pertamina Sultan Syarif Abdurrahman',0, -0.01330, 109.32890),
('61.701.07', 'SPBU Pertamina Sei Raya Dalam', 1, -0.09420, 109.36800);
-- ============================================================
-- sig-02: SIG Mapping Tanah & Jalan
-- ============================================================
CREATE DATABASE IF NOT EXISTS sig_mapping
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE sig_mapping;
CREATE TABLE IF NOT EXISTS tanah (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(150) NOT NULL,
pemilik VARCHAR(150) NULL,
kategori VARCHAR(80) NULL,
deskripsi TEXT NULL,
luas DOUBLE NOT NULL DEFAULT 0,
keliling DOUBLE NOT NULL DEFAULT 0,
warna VARCHAR(20) NOT NULL DEFAULT '#22c55e',
geojson JSON NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB;
CREATE TABLE IF NOT EXISTS jalan (
id INT AUTO_INCREMENT PRIMARY KEY,
nama VARCHAR(150) NOT NULL,
jenis VARCHAR(50) NULL,
kategori VARCHAR(80) NULL,
deskripsi TEXT NULL,
panjang DOUBLE NOT NULL DEFAULT 0,
warna VARCHAR(20) NOT NULL DEFAULT '#ef4444',
geojson JSON NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB;
-- ============================================================
-- sig-03: WebGIS BanSos
-- ============================================================
CREATE DATABASE IF NOT EXISTS sig_bansos
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
USE sig_bansos;
CREATE TABLE IF NOT EXISTS religious_centers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address TEXT,
kas DECIMAL(15,2) DEFAULT 0,
latitude DOUBLE NOT NULL,
longitude DOUBLE NOT NULL,
radius INT DEFAULT 300,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS houses (
id INT AUTO_INCREMENT PRIMARY KEY,
latitude DOUBLE NOT NULL,
longitude DOUBLE NOT NULL,
address TEXT,
rt VARCHAR(10) DEFAULT '',
rw VARCHAR(10) DEFAULT '',
kelurahan VARCHAR(100) DEFAULT '',
status_miskin ENUM('sangat_miskin','miskin','tidak_miskin','') DEFAULT '',
jumlah_anggota INT DEFAULT 0,
anggota JSON,
aid_status ENUM('helped','not_helped','outside') DEFAULT 'outside',
has_data TINYINT(1) DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS laporan (
id INT AUTO_INCREMENT PRIMARY KEY,
pelapor VARCHAR(150) DEFAULT 'Anonim',
deskripsi TEXT NOT NULL,
lokasi VARCHAR(255) DEFAULT '',
foto_base64 MEDIUMTEXT,
status ENUM('baru','ditangani','selesai') DEFAULT 'baru',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS aid_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
house_id INT NOT NULL,
religious_center_id INT DEFAULT 0,
status ENUM('helped','reverted') NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (house_id) REFERENCES houses(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
+33
View File
@@ -0,0 +1,33 @@
services:
app:
build: .
ports:
- "8080:80"
depends_on:
db:
condition: service_healthy
environment:
DB_HOST: db
volumes:
- .:/var/www/html
restart: unless-stopped
db:
image: mysql:8.0
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: rootpassword
# sig-01, sig-02, sig-03 databases are all created via init SQL below
volumes:
- db_data:/var/lib/mysql
- ./database/init.sql:/docker-entrypoint-initdb.d/init.sql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-prootpassword"]
interval: 5s
timeout: 5s
retries: 10
ports:
- "3306:3306" # optional: expose for local tools like TablePlus/DBeaver
volumes:
db_data:
+6 -5
View File
@@ -1,9 +1,10 @@
<?php
// Konfigurasi koneksi database — sesuaikan jika perlu
define('DB_HOST', 'localhost');
define('DB_NAME', 'sig_spbu');
define('DB_USER', 'root');
define('DB_PASS', '');
// Konfigurasi koneksi database
// Mendukung environment variable Docker (DB_HOST) maupun hardcoded untuk Laragon
define('DB_HOST', getenv('DB_HOST') ?: 'localhost');
define('DB_NAME', 'sig_spbu');
define('DB_USER', getenv('DB_USER') ?: 'root');
define('DB_PASS', getenv('DB_PASS') ?: '');
define('DB_CHARSET', 'utf8mb4');
function getDB(): PDO {
+6 -6
View File
@@ -1,14 +1,14 @@
<?php
/**
* Koneksi database (PDO).
* Sesuaikan kredensial bila berbeda dari default Laragon.
* Mendukung environment variable Docker (DB_HOST) maupun hardcoded untuk Laragon.
*/
const DB_HOST = '127.0.0.1';
const DB_PORT = '3306';
const DB_NAME = 'sig_mapping';
const DB_USER = 'root';
const DB_PASS = '';
define('DB_HOST', getenv('DB_HOST') ?: '127.0.0.1');
define('DB_PORT', '3306');
define('DB_NAME', 'sig_mapping');
define('DB_USER', getenv('DB_USER') ?: 'root');
define('DB_PASS', getenv('DB_PASS') ?: '');
function db(): PDO
{
+3 -3
View File
@@ -1,7 +1,7 @@
<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASS', '');
define('DB_HOST', getenv('DB_HOST') ?: 'localhost');
define('DB_USER', getenv('DB_USER') ?: 'root');
define('DB_PASS', getenv('DB_PASS') ?: '');
define('DB_NAME', 'sig_bansos');
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);