From 5ca984602ecbec3db7c7815a68a546b087605cb1 Mon Sep 17 00:00:00 2001 From: Nama Kamu Date: Thu, 11 Jun 2026 15:20:22 +0700 Subject: [PATCH] Migrate to docker-compose for auto database initialization --- 01/db_spbu.sql | 3 ++ Dockerfile | 6 ++-- docker-compose.yml | 42 +++++++++++++++++++++++ init-db.php | 83 ---------------------------------------------- start.sh | 3 -- 5 files changed, 47 insertions(+), 90 deletions(-) create mode 100644 docker-compose.yml delete mode 100644 init-db.php delete mode 100644 start.sh diff --git a/01/db_spbu.sql b/01/db_spbu.sql index 6a2faef..5520121 100644 --- a/01/db_spbu.sql +++ b/01/db_spbu.sql @@ -7,6 +7,9 @@ -- Versi server: 10.4.32-MariaDB -- Versi PHP: 8.2.12 +CREATE DATABASE IF NOT EXISTS `db_spbu` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; +USE `db_spbu`; + SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; START TRANSACTION; SET time_zone = "+00:00"; diff --git a/Dockerfile b/Dockerfile index a9ac34a..2a67fb5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,8 +8,6 @@ WORKDIR /var/www/html COPY . /var/www/html/ RUN mkdir -p /var/www/html/05/uploads/bukti \ - && chown -R www-data:www-data /var/www/html \ - && sed -i 's/\r$//' /var/www/html/start.sh \ - && chmod +x /var/www/html/start.sh + && chown -R www-data:www-data /var/www/html -CMD ["/var/www/html/start.sh"] +CMD ["apache2-foreground"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..ac24a54 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,42 @@ +version: '3.8' + +services: + app: + build: . + ports: + - "8000:80" + environment: + # Koneksi database menunjuk ke container 'db' + - DB_HOST=db + - DB_USER=root + - DB_PASSWORD=rootpassword + # Nama-nama database (akan otomatis dibuat oleh MySQL container saat pertama kali jalan) + - DB_NAME=uas_06 + - DB_NAME_04=db_24jam + depends_on: + db: + condition: service_healthy + restart: always + + db: + image: mysql:8.0 + environment: + - MYSQL_ROOT_PASSWORD=rootpassword + ports: + - "3306:3306" + volumes: + - db_data:/var/lib/mysql + # Auto-import semua database saat container pertama kali dibuat (volume kosong) + - ./01/db_spbu.sql:/docker-entrypoint-initdb.d/1_db_spbu.sql + - ./02/database.sql:/docker-entrypoint-initdb.d/2_database.sql + - ./04/db_spbu.sql:/docker-entrypoint-initdb.d/4_db_spbu.sql + - ./05/database_uas_06.sql:/docker-entrypoint-initdb.d/5_database_uas_06.sql + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + interval: 10s + timeout: 5s + retries: 5 + restart: always + +volumes: + db_data: diff --git a/init-db.php b/init-db.php deleted file mode 100644 index 4bbae7a..0000000 --- a/init-db.php +++ /dev/null @@ -1,83 +0,0 @@ -connect_error) { - break; - } - sleep(2); -} - -if ($conn->connect_error) { - die("Gagal koneksi ke database: " . $conn->connect_error . "\n"); -} - -// Buat database utama jika belum ada (berguna untuk local development, tapi mungkin gagal di production jika tidak ada akses) -if (!$conn->query("CREATE DATABASE IF NOT EXISTS `$db` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")) { - echo "Warning: Gagal membuat database $db (mungkin sudah ada atau tidak ada akses). Error: " . $conn->error . "\n"; -} - -if (!$conn->select_db($db)) { - die("Fatal Error: Gagal memilih database $db. Error: " . $conn->error . "\n"); -} - -function importSql($conn, $file) { - if (!file_exists($file)) return; - $sql = file_get_contents($file); - // Hapus baris CREATE DATABASE dan USE agar aman - $sql = preg_replace('/CREATE DATABASE IF NOT EXISTS [^\;]+\;/i', '', $sql); - $sql = preg_replace('/USE [^\;]+\;/i', '', $sql); - - if ($conn->multi_query($sql)) { - do { - if ($res = $conn->store_result()) { - $res->free(); - } - } while ($conn->more_results() && $conn->next_result()); - } else { - echo "Error saat import file $file: " . $conn->error . "\n"; - } -} - -// Cek apakah tabel uas_06 sudah ada (menggunakan tabel role sebagai patokan) -$res = $conn->query("SHOW TABLES LIKE 'role'"); -if ($res) { - if ($res->num_rows == 0) { - echo "Tabel utama (05) belum ada, menjalankan import...\n"; - importSql($conn, __DIR__ . '/05/database_uas_06.sql'); - } else { - echo "Tabel utama (05) sudah ada, skip import.\n"; - } -} else { - echo "Query gagal saat cek tabel role: " . $conn->error . "\n"; -} - -// Cek tabel SPBU (04) -$db04 = getenv('DB_NAME_04') ?: $db; -if (!$conn->query("CREATE DATABASE IF NOT EXISTS `$db04` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")) { - echo "Warning: Gagal membuat database $db04. Error: " . $conn->error . "\n"; -} -if (!$conn->select_db($db04)) { - echo "Fatal Error: Gagal memilih database $db04. Error: " . $conn->error . "\n"; -} else { - $res = $conn->query("SHOW TABLES LIKE 'spbu'"); - if ($res) { - if ($res->num_rows == 0) { - echo "Tabel spbu (04) belum ada, menjalankan import...\n"; - importSql($conn, __DIR__ . '/04/db_spbu.sql'); - } else { - echo "Tabel spbu (04) sudah ada, skip import.\n"; - } - } else { - echo "Query gagal saat cek tabel spbu: " . $conn->error . "\n"; - } -} - -$conn->close(); -echo "Inisialisasi database selesai.\n"; diff --git a/start.sh b/start.sh deleted file mode 100644 index 773b691..0000000 --- a/start.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash -php /var/www/html/init-db.php -exec apache2-foreground