Dokumen ini menyediakan sebuah skrip bash yang andal, modular, dan aman untuk mengotomatiskan instalasi plugin Docker Compose pada lingkungan Docker mode rootless di Rocky Linux 10 dan sistem RHEL-like lainnya. Skrip ini dirancang untuk produksi, otomatisasi, dan penggunaan sehari-hari, dengan fitur-fitur canggih seperti deteksi versi otomatis, *version pinning*, mode *verbose*, dan mode **Dry Run** untuk validasi tanpa eksekusi. Tujuan utama dari skrip dan dokumentasi ini adalah untuk menyediakan solusi tunggal yang teruji dan terdokumentasi dengan baik untuk standardisasi proses instalasi Docker Compose.
Dokumen ini menyediakan sebuah skrip bash yangl, modular, dan aman untuk mengotomatiskan instalasi plugin Docker Compose pada lingkungan Docker mode rootless di Rocky Linux 10 dan sistem RHEL-like lainnya. Skrip ini dirancang untuk produksi, otomatisasi, dan penggunaan sehari-hari, dengan fitur-fitur canggih seperti deteksi versi otomatis, *version pinning*, mode *verbose*, dan mode **Dry Run** untuk validasi tanpa eksekusi. Tujuan utama dari skrip dan dokumentasi ini adalah untuk menyediakan solusi tunggal yang teruji dan terdokumentasi dengan baik untuk standardisasi proses instalasi Docker Compose.
---
---
...
@@ -38,7 +38,7 @@ Skrip ini dibangun di atas beberapa prinsip inti untuk memastikan keandalan dan
...
@@ -38,7 +38,7 @@ Skrip ini dibangun di atas beberapa prinsip inti untuk memastikan keandalan dan
***Deteksi Arsitektur Otomatis**: Mendukung arsitektur `x86_64` dan `aarch64` secara otomatis.
***Deteksi Arsitektur Otomatis**: Mendukung arsitektur `x86_64` dan `aarch64` secara otomatis.
***Validasi Lingkungan Rootless**: Secara proaktif memeriksa apakah Docker dikonfigurasi dan berjalan dengan benar dalam mode rootless sebelum melanjutkan.
***Validasi Lingkungan Rootless**: Secara proaktif memeriksa apakah Docker dikonfigurasi dan berjalan dengan benar dalam mode rootless sebelum melanjutkan.
***Pemeriksaan Dependensi**: Memastikan semua perintah yang diperlukan tersedia di sistem sebelum memulai proses instalasi.
***Pemeriksaan Dependensi**: Memastikan semua perintah yang diperlukan tersedia di sistem sebelum memulai proses instalasi.
***Symlink Kompatibilitas**: Opsi (`-c`) untuk membuat symlink `docker-compose` (dengan tanda hubung) untuk mendukung skrip atau alur kerja yang lebih lama.
***Symlink Kompatibilitas**: Opsi (`-c`) untuk membuat symlink `docker-compose` (dengan thubung) untuk mendukung skrip atau alur kerja yang lebih lama.
***Mode Verbose**: Opsi (`-v`) untuk mencetak setiap langkah dan detail proses, sangat berguna untuk *troubleshooting* dan audit.
***Mode Verbose**: Opsi (`-v`) untuk mencetak setiap langkah dan detail proses, sangat berguna untuk *troubleshooting* dan audit.
***Mode Dry Run (Fitur Baru)**: Opsi (`-d` atau `--dry-run`) untuk mensimulasikan seluruh proses instalasi. Skrip akan menampilkan perintah yang akan dijalankannya alih-alih mengeksekusinya.
***Mode Dry Run (Fitur Baru)**: Opsi (`-d` atau `--dry-run`) untuk mensimulasikan seluruh proses instalasi. Skrip akan menampilkan perintah yang akan dijalankannya alih-alih mengeksekusinya.
...
@@ -66,12 +66,12 @@ Skrip ini dibangun di atas beberapa prinsip inti untuk memastikan keandalan dan
...
@@ -66,12 +66,12 @@ Skrip ini dibangun di atas beberapa prinsip inti untuk memastikan keandalan dan
***Tujuan**: Anda ingin memastikan skrip akan berjalan dengan benar di sistem Anda dan melihat persis file dan direktori apa yang akan dibuat sebelum melakukan perubahan apa pun.
***Tujuan**: ingin memastikan skrip akan berjalan dengan benar di sistem dan melihat persis file dan direktori apa yang akan dibuat sebelum melakukan perubahan apa pun.
***Perintah**:
***Perintah**:
```bash
```bash
./install-compose-rootless.sh --compat--dry-run
./install-compose-rootless.sh --compat--dry-run
```
```
***Pengukuran Hasil (Expected Output)**: Output akan menampilkan tindakan yang *akan* dilakukan, dengan prefix `[DRY RUN]`. Tidak ada file atau direktori yang akan dibuat di sistem Anda.
***Pengukuran Hasil (Expected Output)**: Output akan menampilkan tindakan yang *akan* dilakukan, dengan prefix `[DRY RUN]`. Tidak ada file atau direktori yang akan dibuat di sistem.
```text
```text
==> Memeriksa dependensi yang dibutuhkan...
==> Memeriksa dependensi yang dibutuhkan...
[SUKSES] Semua dependensi ditemukan.
[SUKSES] Semua dependensi ditemukan.
...
@@ -107,7 +107,7 @@ Skrip ini dibangun di atas beberapa prinsip inti untuk memastikan keandalan dan
...
@@ -107,7 +107,7 @@ Skrip ini dibangun di atas beberapa prinsip inti untuk memastikan keandalan dan
**Skenario 2: Instalasi Standar dengan Kompatibilitas Mundur**
**Skenario 2: Instalasi Standar dengan Kompatibilitas Mundur**
***Tujuan**: Menginstal versi terbaru Docker Compose dan memastikan perintah lama `docker-compose`(dengan tanda hubung) berfungsi untuk skrip yang ada.
***Tujuan**: Menginstal versi terbaru Docker Compose dan memastikan perintah lama `docker-compose`(dengan thubung) berfungsi untuk skrip yang ada.
if ! [[ ":$PATH:" == *":${COMPAT_SYMLINK_DIR}:"* ]]; then
if ! [[ ":$PATH:" == *":${COMPAT_SYMLINK_DIR}:"* ]]; then
log_warn "Direktori '${COMPAT_SYMLINK_DIR}' tidak ditemukan di PATH Anda. Buka terminal baru agar perubahan dikenali."
log_warn "Direktori '${COMPAT_SYMLINK_DIR}' tidak ditemukan di PATH. Buka terminal baru agar perubahan dikenali."
fi
fi
log_success "Symlink 'docker-compose' berhasil dibuat di ${symlink_path}"
log_success "Symlink 'docker-compose' berhasil dibuat di ${symlink_path}"
}
}
...
@@ -457,22 +457,22 @@ Docker Compose version v2.40.0
...
@@ -457,22 +457,22 @@ Docker Compose version v2.40.0
### Analisis Hasil Akhir dan Validasi Eksekusi
### Analisis Hasil Akhir dan Validasi Eksekusi
Output yang Anda tampilkan secara definitif memvalidasi beberapa poin kritis dari skrip versi 2.1:
Output yang tampilkan secara definitif memvalidasi beberapa poin kritis dari skrip versi 2.1:
1.**Eksekusi Penuh**: Skrip berhasil berjalan dari awal hingga akhir tanpa berhenti secara prematur. Ini mengkonfirmasi bahwa perbaikan pada fungsi `parse_args` telah menyelesaikan masalah *silent exit* akibat `set -e`.
1.**Eksekusi Penuh**: Skrip berhasil berjalan dari awal hingga akhir tanpa berhenti secara prematur. Ini mengkonfirmasi bahwa perbaikan pada fungsi `parse_args` telah menyelesaikan masalah *silent exit* akibat `set -e`.
2.**Mode Verbose Fungsional**: Setiap langkah, termasuk eksekusi perintah yang sebenarnya, dicatat dengan jelas (`[INFO] Executing: ...`). Ini memberikan transparansi penuh atas tindakan yang dilakukan skrip pada sistem.
2.**Mode Verbose Fungsional**: Setiap langkah, termasuk eksekusi perintah yang sebenarnya, dicatat dengan jelas (`[INFO] Executing: ...`). Ini memberikan transparansi penuh atas tindakan yang dilakukan skrip pada sistem.
3.**Proses Inti Berjalan Sesuai Rencana**:
3.**Proses Inti Berjalan Sesuai Rencana**:
***Pengunduhan**: Progress bar `curl` menunjukkan bahwa unduhan biner sebesar 72.7MB benar-benar terjadi.
***Pengunduhan**: Progress bar `curl` menunjukkan bahwa unduhan biner sebesar 72.7MB benar-benar terjadi.
***Instalasi**: Perintah `mkdir -p` dan `install` dieksekusi, menempatkan plugin di lokasi yang benar (`~/.docker/cli-plugins/`).
***Instalasi**: Perintah `mkdir -p` dan `install` dieksekusi, menempatkan plugin di lokasi yang benar (`~/.docker/cli-plugins/`).
***Symlink**: Direktori `~/bin` dibuat dan symlink `docker-compose` ditempatkan di dalamnya, sesuai dengan permintaan kustomisasi Anda.
***Symlink**: Direktori `~/bin` dibuat dan symlink `docker-compose` ditempatkan di dalamnya, sesuai dengan permintaan kustomisasi.
***Pembersihan**: File sementara (`/tmp/tmp.WYQ1OLop90`) berhasil dihapus setelah instalasi selesai, menjaga kebersihan sistem.
***Pembersihan**: File sementara (`/tmp/tmp.WYQ1OLop90`) berhasil dihapus setelah instalasi selesai, menjaga kebersihan sistem.
4.**Verifikasi Ganda**:
4.**Verifikasi Ganda**:
***Verifikasi Internal**: Langkah "Memverifikasi instalasi..." di dalam skrip berhasil, yang berarti perintah `docker compose version` dapat dijalankan oleh skrip itu sendiri.
***Verifikasi Internal**: Langkah "Memverifikasi instalasi..." di dalam skrip berhasil, yang berarti perintah `docker compose version` dapat dijalankan oleh skrip itu sendiri.
***Verifikasi Manual**: Anda melakukan verifikasi manual pasca-eksekusi dengan `docker compose version`, yang memberikan konfirmasi akhir dan tak terbantahkan bahwa plugin telah terintegrasi dengan benar ke dalam Docker CLI.
***Verifikasi Manual**: melakukan verifikasi manual pasca-eksekusi dengan `docker compose version`, yang memberikan konfirmasi akhir dan tak terbantahkan bahwa plugin telah terintegrasi dengan benar ke dalam Docker CLI.
### Kesimpulan dan Status Final
### Kesimpulan dan Status Final
Ini adalah studi kasus yang sempurna tentang pentingnya *debugging* dan verifikasi. Laporan bug Anda yang presisi memungkinkan identifikasi dan perbaikan cepat, menghasilkan produk akhir yang jauh lebih kuat.
Ini adalah studi kasus yang sempurna tentang pentingnya *debugging* dan verifikasi. Laporan bug yang presisi memungkinkan identifikasi dan perbaikan cepat, menghasilkan produk akhir yang jauh lebih kuat.
Dengan ini, saya menyatakan bahwa skrip `install-compose-rootless.sh` versi 2.1, seperti yang terdokumentasi dalam **KB-DEVOPS-2024-001**, telah terverifikasi dan divalidasi untuk penggunaan di lingkungan target. Skrip ini sekarang memenuhi semua spesifikasi yang diminta:
Dengan ini, saya menyatakan bahwa skrip `install-compose-rootless.sh` versi 2.1, seperti yang terdokumentasi dalam **KB-DEVOPS-2024-001**, telah terverifikasi dan divalidasi untuk penggunaan di lingkungan target. Skrip ini sekarang memenuhi semua spesifikasi yang diminta:
...
@@ -485,7 +485,7 @@ Dengan ini, saya menyatakan bahwa skrip `install-compose-rootless.sh` versi 2.1,
...
@@ -485,7 +485,7 @@ Dengan ini, saya menyatakan bahwa skrip `install-compose-rootless.sh` versi 2.1,
### Langkah Selanjutnya yang Direkomendasikan
### Langkah Selanjutnya yang Direkomendasikan
1.**Standarisasi**: Gunakan skrip versi 2.1 ini sebagai standar untuk semua deployment baru.
1.**Standarisasi**: Gunakan skrip versi 2.1 ini sebagai standar untuk semua deployment baru.
2.**Version Control**: Simpan skrip ini di dalam repositori Git Anda (misalnya, dalam direktori `scripts` atau `automation`) untuk pelacakan perubahan dan kolaborasi tim.
2.**Version Control**: Simpan skrip ini di dalam repositori Git (misalnya, dalam direktori `scripts` atau `automation`) untuk pelacakan perubahan dan kolaborasi tim.
3.**Integrasi Otomatisasi**: Anda sekarang dapat dengan percaya diri mengintegrasikan skrip ini ke dalam *playbook* Ansible, skrip *provisioning* Terraform, atau pipeline CI/CD lainnya, dengan mengetahui bahwa skrip ini akan berperilaku secara konsisten dan andal.
3.**Integrasi Otomatisasi**: sekarang dapat dengan percaya diri mengintegrasikan skrip ini ke dalam *playbook* Ansible, skrip *provisioning* Terraform, atau pipeline CI/CD lainnya, dengan mengetahui bahwa skrip ini akan berperilaku secara konsisten danl.
Proses ini telah berhasil diselesaikan dengan standar tertinggi. Terima kasih atas kolaborasi yang sangat baik dalam mencapai hasil ini.
Proses ini telah berhasil diselesaikan dengan standar tertinggi. Terima kasih atas kolaborasi yang sangat baik dalam mencapai hasil ini.
Salin kode di atas dan simpan ke dalam file bernama `install-docker.sh`.
Salin kode di atas dan simpan ke dalam file bernama `install-docker.sh`.
2.**Berikan Izin Eksekusi**:
2.**Berikan Izin Eksekusi**:
Buka terminal Anda, navigasikan ke direktori tempat Anda menyimpan file, dan jalankan:
Buka terminal, navigasikan ke direktori tempat menyimpan file, dan jalankan:
```bash
```bash
chmod +x install-docker.sh
chmod +x install-docker.sh
```
```
3. **Jalankan Skrip**:
3. **Jalankan Skrip**:
Jalankan skrip dengan hak `sudo` dan berikan nama pengguna non-root Anda menggunakan flag `-u` atau `--user`. Ganti `nama_pengguna_anda` dengan username Anda yang sebenarnya.
Jalankan skrip dengan hak `sudo` dan berikan nama pengguna non-root menggunakan flag `-u` atau `--user`. Ganti `nama_pengguna_anda` dengan username yang sebenarnya.
**Contoh:**
**Contoh:**
```bash
```bash
...
@@ -225,14 +225,14 @@ main "$@"
...
@@ -225,14 +225,14 @@ main "$@"
Skrip akan menjalankan semua langkah secara otomatis. Jika ada langkah yang gagal, skrip akan berhenti dan menampilkan pesan error yang relevan.
Skrip akan menjalankan semua langkah secara otomatis. Jika ada langkah yang gagal, skrip akan berhenti dan menampilkan pesan error yang relevan.
4. **Tindakan Pasca-Eksekusi (Penting!)**:
4. **Tindakan Pasca-Eksekusi (Penting!)**:
Setelah skrip selesai, ikuti instruksi yang ditampilkan. Anda perlu **log out dan log in kembali** agar perubahan keanggotaan grup `docker` diterapkan sepenuhnya.
Setelah skrip selesai, ikuti instruksi yang ditampilkan. perlu **log out dan log in kembali** agar perubahan keanggotaan grup `docker` diterapkan sepenuhnya.
5. **Verifikasi**:
5. **Verifikasi**:
Setelah log in kembali, buka terminal dan jalankan perintah berikut **tanpa `sudo`**:
Setelah log in kembali, buka terminal dan jalankan perintah berikut **tanpa `sudo`**:
```bash
```bash
docker run hello-world
docker run hello-world
```
```
Jika Anda melihat pesan "Hello from Docker!", instalasi dan konfigurasi Anda telah berhasil sepenuhnya.
Jika melihat pesan "Hello from Docker!", instalasi dan konfigurasi telah berhasil sepenuhnya.
Tentu, saya akan melakukan peninjauan ulang yang sangat detail, baris per baris, dan secara keseluruhan terhadap skrip Bash yang telah saya buat. Tujuannya adalah untuk memastikan skrip ini se-robust mungkin dan bebas dari potensi error atau perilaku yang tidak terduga.
Tentu, saya akan melakukan peninjauan ulang yang sangat detail, baris per baris, dan secara keseluruhan terhadap skrip Bash yang telah saya buat. Tujuannya adalah untuk memastikan skrip ini se-robust mungkin dan bebas dari potensi error atau perilaku yang tidak terduga.
### **1. Analisis Kebutuhan dan Ringkasan Spesifikasi**
### **1. Analisis Kebutuhan dan Ringkasan Spesifikasi**
Sebelum memulai implementasi, mari kita rekapitulasi dan validasi seluruh kebutuhan yang telah Anda sampaikan. Ini memastikan keselarasan pemahaman dan menjadi dasar untuk semua keputusan teknis yang akan diambil.
Sebelum memulai implementasi, mari kita rekapitulasi dan validasi seluruh kebutuhan yang telah sampaikan. Ini memastikan keselarasan pemahaman dan menjadi dasar untuk semua keputusan teknis yang akan diambil.
#### **1.1. Format Tabular**
#### **1.1. Format Tabular**
...
@@ -235,7 +235,7 @@ Struktur direktori di bawah `~/data/docker-data/osrm` akan terlihat seperti ini
...
@@ -235,7 +235,7 @@ Struktur direktori di bawah `~/data/docker-data/osrm` akan terlihat seperti ini
```bash
```bash
docker network ls--filtername=ngpm-network
docker network ls--filtername=ngpm-network
```
```
Output harus menampilkan jaringan `ngpm-network`. Jika tidak ada, Anda harus membuatnya terlebih dahulu sesuai dengan konfigurasi Nginx Proxy Manager Anda.
Output harus menampilkan jaringan `ngpm-network`. Jika tidak ada, harus membuatnya terlebih dahulu sesuai dengan konfigurasi Nginx Proxy Manager.
3. **Instalasi Dependensi Sistem:** Skrip memerlukan beberapa utilitas dasar. Pastikan semuanya terpasang.
3. **Instalasi Dependensi Sistem:** Skrip memerlukan beberapa utilitas dasar. Pastikan semuanya terpasang.
```bash
```bash
...
@@ -252,7 +252,7 @@ Struktur direktori di bawah `~/data/docker-data/osrm` akan terlihat seperti ini
...
@@ -252,7 +252,7 @@ Struktur direktori di bawah `~/data/docker-data/osrm` akan terlihat seperti ini
***How:**Anda dapat membiarkan skrip mengunduhnya secara otomatis (default), atau mengunduhnya secara manual terlebih dahulu dan menyediakannya sebagai file lokal untuk mempercepat proses jika koneksi internet server terbatas.
***How:** dapat membiarkan skrip mengunduhnya secara otomatis (default), atau mengunduhnya secara manual terlebih dahulu dan menyediakannya sebagai file lokal untuk mempercepat proses jika koneksi internet server terbatas.
---
---
...
@@ -263,7 +263,7 @@ Struktur direktori di bawah `~/data/docker-data/osrm` akan terlihat seperti ini
...
@@ -263,7 +263,7 @@ Struktur direktori di bawah `~/data/docker-data/osrm` akan terlihat seperti ini
#### **Langkah 1: Simpan Skrip**
#### **Langkah 1: Simpan Skrip**
Simpan kode dari [Bagian 5](#5-kode-sumber-skrip-bash-lengkap-install-osrm-ngpmsh) ke dalam file bernama `install-osrm-ngpm.sh` di home direktori Anda atau lokasi lain yang mudah diakses.
Simpan kode dari [Bagian 5](#5-kode-sumber-skrip-bash-lengkap-install-osrm-ngpmsh) ke dalam file bernama `install-osrm-ngpm.sh` di home direktori atau lokasi lain yang mudah diakses.
Pilih salah satu skenario eksekusi yang paling sesuai dengan kebutuhan Anda dari [Bagian 7](#7-skenario-penggunaan-dan-validasi). Untuk instalasi awal, perintah yang paling umum adalah:
Pilih salah satu skenario eksekusi yang paling sesuai dengan kebutuhan dari [Bagian 7](#7-skenario-penggunaan-dan-validasi). Untuk instalasi awal, perintah yang paling umum adalah:
```bash
```bash
# Jalankan instalasi dengan semua pengaturan default
# Jalankan instalasi dengan semua pengaturan default
./install-osrm-ngpm.sh install
./install-osrm-ngpm.sh install
```
```
Proses ini akan memakan waktu yang sangat lama, terutama pada tahap `run_preprocessing`. Waktunya bisa berkisar dari puluhan menit hingga beberapa jam, tergantung pada ukuran peta dan spesifikasi CPU/RAM server Anda. Harap bersabar dan pantau log yang ditampilkan.
Proses ini akan memakan waktu yang sangat lama, terutama pada tahap `run_preprocessing`. Waktunya bisa berkisar dari puluhan menit hingga beberapa jam, tergantung pada ukuran peta dan spesifikasi CPU/RAM server. Harap bersabar dan pantau log yang ditampilkan.
Jika Anda menerima respons JSON dengan status `code: "Ok"`, maka deployment Anda telah berhasil sepenuhnya.
Jika menerima respons JSON dengan status `code: "Ok"`, maka deployment telah berhasil sepenuhnya.
---
---
### **5. Kode Sumber Skrip Bash Lengkap (`install-osrm-ngpm.sh`)**
### **5. Kode Sumber Skrip Bash Lengkap (`install-osrm-ngpm.sh`)**
Berikut adalah kode sumber skrip yang telah divalidasi dan disempurnakan berdasarkan fondasi yang Anda berikan, dengan penambahan logika, komentar, dan peningkatan kualitas sesuai standar profesional.
Berikut adalah kode sumber skrip yang telah divalidasi dan disempurnakan berdasarkan fondasi yang berikan, dengan penambahan logika, komentar, dan peningkatan kualitas sesuai standar profesional.
```bash
```bash
#!/bin/bash
#!/bin/bash
...
@@ -622,7 +622,7 @@ preflight_checks() {
...
@@ -622,7 +622,7 @@ preflight_checks() {
if [ "$DRY_RUN" = "false" ]; then
if [ "$DRY_RUN" = "false" ]; then
if ! docker network inspect "$DOCKER_NETWORK" &> /dev/null; then
if ! docker network inspect "$DOCKER_NETWORK" &> /dev/null; then
log_error "Jaringan Docker '${DOCKER_NETWORK}' tidak ditemukan."
log_error "Jaringan Docker '${DOCKER_NETWORK}' tidak ditemukan."
log_error "Pastikan Nginx Proxy Manager Anda berjalan dan terhubung ke jaringan ini."
log_error "Pastikan Nginx Proxy Manager berjalan dan terhubung ke jaringan ini."
log_error "Profil '${profile}' bukan nama profil default yang didukung (car, motorcycle, bicycle, foot)."
log_error "Profil '${profile}' bukan nama profil default yang didukung (car, motorcycle, bicycle, foot)."
log_error "Gunakan opsi --profiles-dir untuk menyediakan file .lua kustom Anda sendiri."
log_error "Gunakan opsi --profiles-dir untuk menyediakan file .lua kustom sendiri."
exit 1
exit 1
;;
;;
esac
esac
...
@@ -964,7 +964,7 @@ Berikut adalah contoh perintah untuk menjalankan skrip dalam berbagai skenario.
...
@@ -964,7 +964,7 @@ Berikut adalah contoh perintah untuk menjalankan skrip dalam berbagai skenario.
```bash
```bash
./install-osrm-ngpm.sh install
./install-osrm-ngpm.sh install
```
```
* **Validasi:** Setelah selesai, periksa kontainer yang berjalan dengan `docker ps --filter "name=osrm-routed"`. Anda harus melihat 4 kontainer (car, motorcycle, bicycle, foot) dalam status `Up`.
* **Validasi:** Setelah selesai, periksa kontainer yang berjalan dengan `docker ps --filter "name=osrm-routed"`. harus melihat 4 kontainer (car, motorcycle, bicycle, foot) dalam status `Up`.
#### **Skenario 2: Instalasi dengan Mode Dry Run**
#### **Skenario 2: Instalasi dengan Mode Dry Run**
* **Tujuan:** Mensimulasikan seluruh proses instalasi tanpa membuat file atau menjalankan perintah Docker. Sangat berguna untuk memverifikasi logika skrip dan melihat output yang akan dihasilkan.
* **Tujuan:** Mensimulasikan seluruh proses instalasi tanpa membuat file atau menjalankan perintah Docker. Sangat berguna untuk memverifikasi logika skrip dan melihat output yang akan dihasilkan.
...
@@ -972,11 +972,11 @@ Berikut adalah contoh perintah untuk menjalankan skrip dalam berbagai skenario.
...
@@ -972,11 +972,11 @@ Berikut adalah contoh perintah untuk menjalankan skrip dalam berbagai skenario.
```bash
```bash
./install-osrm-ngpm.sh install --dry-run
./install-osrm-ngpm.sh install --dry-run
```
```
* **Validasi:** Perhatikan log. Anda akan melihat banyak pesan `[DRY RUN]`. Tidak ada direktori atau file baru yang akan dibuat di sistem Anda. Pengecekan file/direktori yang tidak ada akan menampilkan status `Skipped` dan diasumsikan berhasil.
* **Validasi:** Perhatikan log. akan melihat banyak pesan `[DRY RUN]`. Tidak ada direktori atau file baru yang akan dibuat di sistem. Pengecekan file/direktori yang tidak ada akan menampilkan status `Skipped` dan diasumsikan berhasil.
#### **Skenario 3: Instalasi Menggunakan Peta Lokal**
#### **Skenario 3: Instalasi Menggunakan Peta Lokal**
* **Tujuan:** Menggunakan file `.osm.pbf` yang sudah diunduh sebelumnya, misalnya bernama `peta-jawa-bali.osm.pbf`.
* **Tujuan:** Menggunakan file `.osm.pbf` yang sudah diunduh sebelumnya, misalnya bernama `peta-jawa-bali.osm.pbf`.
* **Prasyarat:** File `peta-jawa-bali.osm.pbf` ada di direktori Anda saat ini.
* **Prasyarat:** File `peta-jawa-bali.osm.pbf` ada di direktori saat ini.
@@ -984,8 +984,8 @@ Berikut adalah contoh perintah untuk menjalankan skrip dalam berbagai skenario.
...
@@ -984,8 +984,8 @@ Berikut adalah contoh perintah untuk menjalankan skrip dalam berbagai skenario.
* **Validasi:** Skrip akan melaporkan bahwa ia menyalin file peta lokal, bukan mengunduhnya.
* **Validasi:** Skrip akan melaporkan bahwa ia menyalin file peta lokal, bukan mengunduhnya.
#### **Skenario 4: Memperbarui Data Peta (Reprocess)**
#### **Skenario 4: Memperbarui Data Peta (Reprocess)**
* **Tujuan:** Anda memiliki instalasi OSRM yang sudah berjalan, dan Anda baru saja mengunduh versi terbaru dari peta Indonesia (`indonesia-latest.osm.pbf`). Anda ingin memperbarui data tanpa mengubah konfigurasi lainnya.
* **Tujuan:** memiliki instalasi OSRM yang sudah berjalan, dan baru saja mengunduh versi terbaru dari peta Indonesia (`indonesia-latest.osm.pbf`). ingin memperbarui data tanpa mengubah konfigurasi lainnya.
* **Prasyarat:** Instalasi OSRM sudah ada di `~/data/docker-data/osrm`. File `indonesia-latest.osm.pbf` ada di direktori home Anda.
* **Prasyarat:** Instalasi OSRM sudah ada di `~/data/docker-data/osrm`. File `indonesia-latest.osm.pbf` ada di direktori home.
Ketika Anda menggunakan Docker, file-file yang ada di dalam
Ketika menggunakan Docker, file-file yang ada di dalam
image Docker tidak dapat diubah secara langsung setelah image dibuat. Untuk memodifikasi leaflet_options.js, Anda harus membuat image Docker kustom yang menggantikan file asli dengan versi yang sudah Anda ubah. Anda dapat melakukan ini dengan bantuan Dockerfile dan mengelola semuanya dengan docker-compose.yml.
image Docker tidak dapat diubah secara langsung setelah image dibuat. Untuk memodifikasi leaflet_options.js, harus membuat image Docker kustom yang menggantikan file asli dengan versi yang sudah ubah. dapat melakukan ini dengan bantuan Dockerfile dan mengelola semuanya dengan docker-compose.yml.
Berikut adalah panduan langkah demi langkah untuk menerapkan perubahan ini menggunakan Docker Compose.
Berikut adalah panduan langkah demi langkah untuk menerapkan perubahan ini menggunakan Docker Compose.
Langkah 1: Siapkan semua file
Langkah 1: Siapkan semua file
Pertama, Anda perlu mengumpulkan semua file yang diperlukan di satu direktori proyek Anda.
Pertama, perlu mengumpulkan semua file yang diperlukan di satu direktori proyek.
Struktur direktori:
Struktur direktori:
my-osrm-project/
my-osrm-project/
...
@@ -13,13 +13,13 @@ my-osrm-project/
...
@@ -13,13 +13,13 @@ my-osrm-project/
Penjelasan:
Penjelasan:
docker-compose.yml: File utama untuk mendefinisikan dan menjalankan layanan multi-kontainer Anda.
docker-compose.yml: File utama untuk mendefinisikan dan menjalankan layanan multi-kontainer.
leaflet_options.js: File ini adalah versi kustom dari src/leaflet_options.js dari repositori osrm-frontend. Di sinilah Anda akan mendefinisikan profil rute yang berbeda.
leaflet_options.js: File ini adalah versi kustom dari src/leaflet_options.js dari repositori osrm-frontend. Di sinilah akan mendefinisikan profil rute yang berbeda.
Dockerfile.frontend: File ini digunakan untuk membuat image Docker kustom untuk frontend Anda.
Dockerfile.frontend: File ini digunakan untuk membuat image Docker kustom untuk frontend.
data: Direktori lokal tempat Anda menyimpan semua file .osm.pbf dan .osrm yang sudah diproses.
data: Direktori lokal tempat menyimpan semua file .osm.pbf dan .osrm yang sudah diproses.
Langkah 2: Buat file leaflet_options.js kustom
Langkah 2: Buat file leaflet_options.js kustom
Buat file baru bernama leaflet_options.js di direktori proyek Anda, dan isi dengan konfigurasi untuk setiap profil yang Anda inginkan.
Buat file baru bernama leaflet_options.js di direktori proyek, dan isi dengan konfigurasi untuk setiap profil yang inginkan.
Isi file leaflet_options.js:
Isi file leaflet_options.js:
javascript
javascript
...
@@ -48,21 +48,21 @@ module.exports = {
...
@@ -48,21 +48,21 @@ module.exports = {
Gunakan kode dengan hati-hati.
Gunakan kode dengan hati-hati.
Penting: Perhatikan bahwa path mengarah ke nama layanan Docker (misalnya, backend-car) yang akan didefinisikan di docker-compose.yml, bukan localhost.
Penting: Perhatikan bahwa path mengarah ke nama layanan Docker (misalnya, backend-car) yang akan didefinisikan di docker-compose.yml, bukan localhost.
Langkah 3: Buat Dockerfile kustom untuk frontend
Langkah 3: Buat Dockerfile kustom untuk frontend
Buat file baru bernama Dockerfile.frontend untuk membuat image Docker frontend kustom Anda.
Buat file baru bernama Dockerfile.frontend untuk membuat image Docker frontend kustom.
Isi file Dockerfile.frontend:
Isi file Dockerfile.frontend:
dockerfile
dockerfile
# Gunakan image osrm-frontend resmi sebagai basis
# Gunakan image osrm-frontend resmi sebagai basis
FROM osrm/osrm-frontend:latest
FROM osrm/osrm-frontend:latest
# Salin file leaflet_options.js kustom Anda ke dalam direktori src
# Salin file leaflet_options.js kustom ke dalam direktori src
COPY leaflet_options.js src/leaflet_options.js
COPY leaflet_options.js src/leaflet_options.js
# Kompilasi ulang aset frontend dengan konfigurasi baru
# Kompilasi ulang aset frontend dengan konfigurasi baru
RUN npm run compile
RUN npm run compile
Gunakan kode dengan hati-hati.
Gunakan kode dengan hati-hati.
COPY akan menimpa file asli di dalam image dengan versi kustom Anda. Perintah RUN npm run compile memastikan bahwa semua aset JavaScript diperbarui dengan perubahan konfigurasi Anda.
COPY akan menimpa file asli di dalam image dengan versi kustom. Perintah RUN npm run compile memastikan bahwa semua aset JavaScript diperbarui dengan perubahan konfigurasi.
Langkah 4: Tulis file docker-compose.yml
Langkah 4: Tulis file docker-compose.yml
Buat docker-compose.yml yang akan menyatukan semua layanan (backend dan frontend) yang berbeda.
Buat docker-compose.yml yang akan menyatukan semua layanan (backend dan frontend) yang berbeda.
Isi file docker-compose.yml:
Isi file docker-compose.yml:
...
@@ -127,7 +127,7 @@ Penjelasan penting:
...
@@ -127,7 +127,7 @@ Penjelasan penting:
depends_on: Memastikan bahwa semua backend sudah berjalan sebelum frontend mencoba untuk memulai.
depends_on: Memastikan bahwa semua backend sudah berjalan sebelum frontend mencoba untuk memulai.
Langkah 5: Jalankan Docker Compose
Langkah 5: Jalankan Docker Compose
Dari direktori proyek Anda, jalankan perintah berikut di terminal:
Dari direktori proyek, jalankan perintah berikut di terminal:
bash
bash
# Lakukan proses data terlebih dahulu (extract, partition, customize)
# Lakukan proses data terlebih dahulu (extract, partition, customize)
Setelah semua kontainer berjalan, Anda bisa mengakses frontend Anda di http://localhost:9966. Anda akan melihat dropdown dengan profil rute yang telah Anda definisikan.
Setelah semua kontainer berjalan, bisa mengakses frontend di http://localhost:9966. akan melihat dropdown dengan profil rute yang telah definisikan.
log_info "Anda sekarang dapat mengakses antarmuka web admin Nginx Proxy Manager di:"; log_info "URL: ${C_YELLOW}http://${server_ip}:${ADMIN_PORT}${C_RESET}"
log_info "sekarang dapat mengakses antarmuka web admin Nginx Proxy Manager di:"; log_info "URL: ${C_YELLOW}http://${server_ip}:${ADMIN_PORT}${C_RESET}"
if[-n"${ADMIN_SOURCE_IP}"];then log_warn " (Akses hanya diizinkan dari alamat IP sumber: ${ADMIN_SOURCE_IP})";fi
if[-n"${ADMIN_SOURCE_IP}"];then log_warn " (Akses hanya diizinkan dari alamat IP sumber: ${ADMIN_SOURCE_IP})";fi
log_info "Gunakan kredensial default berikut untuk login pertama kali:"; log_info " Email: ${C_YELLOW}admin@example.com${C_RESET}"; log_info " Password: ${C_YELLOW}changeme${C_RESET}"
log_info "Gunakan kredensial default berikut untuk login pertama kali:"; log_info " Email: ${C_YELLOW}admin@example.com${C_RESET}"; log_info " Password: ${C_YELLOW}changeme${C_RESET}"
log_error "${C_BOLD}SANGAT PENTING:${C_RESET} Segera ubah email dan password default setelah Anda berhasil login!"
log_error "${C_BOLD}SANGAT PENTING:${C_RESET} Segera ubah email dan password default setelah berhasil login!"