Commit 320f0bcf by Bambang Adrian

chore(doc): update some terms and details

parent 27f0ddab
......@@ -82,7 +82,7 @@ sudo ./install-miniconda.sh --no-mamba -v
```
**4. Instalasi untuk Grup Pengguna yang Berbeda**
Jika tim Anda menggunakan grup `datascientists` bukan `condausers`.
Jika tim menggunakan grup `datascientists` bukan `condausers`.
```bash
sudo ./install-miniconda.sh --group datascientists
```
......@@ -97,7 +97,7 @@ Outputnya minimalis, hanya menampilkan pesan peringatan, kesalahan, dan ringkasa
```
[WARNING] User <username> telah ditambahkan ke group condausers
[WARNING] Anda perlu LOGOUT dan LOGIN kembali agar perubahan group berlaku
[WARNING] perlu LOGOUT dan LOGIN kembali agar perubahan group berlaku
[WARNING] Atau jalankan: newgrp condausers
[WARNING] Python 3.14 tidak tersedia di channel conda-forge
[WARNING] Menggunakan Python 3.12 sebagai fallback
......@@ -114,7 +114,7 @@ Shared Group : condausers
==========================================
⚠️ PENTING: Jika ini pertama kali user ditambahkan ke group,
Anda perlu LOGOUT dan LOGIN kembali, atau jalankan:
perlu LOGOUT dan LOGIN kembali, atau jalankan:
newgrp condausers
Next steps:
......@@ -423,7 +423,7 @@ if ! groups "$USER" | grep -q "\b$SHARED_GROUP\b"; then
log " Menambahkan user $USER ke group $SHARED_GROUP"
sudo usermod -a -G "$SHARED_GROUP" "$USER"
warn "User $USER telah ditambahkan ke group $SHARED_GROUP"
warn "Anda perlu LOGOUT dan LOGIN kembali agar perubahan group berlaku"
warn "perlu LOGOUT dan LOGIN kembali agar perubahan group berlaku"
warn "Atau jalankan: newgrp $SHARED_GROUP"
else
log " User $USER sudah ada di group $SHARED_GROUP"
......@@ -558,7 +558,7 @@ echo "Shared Group : $SHARED_GROUP"
echo "=========================================="
echo
echo "⚠️ PENTING: Jika ini pertama kali user ditambahkan ke group,"
echo " Anda perlu LOGOUT dan LOGIN kembali, atau jalankan:"
echo " perlu LOGOUT dan LOGIN kembali, atau jalankan:"
echo " newgrp $SHARED_GROUP"
echo
echo "Next steps:"
......
......@@ -14,7 +14,7 @@
### 1. Abstrak
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
* **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.
* **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 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
**Skenario 1: Validasi Rencana Instalasi (Menggunakan Dry Run)**
* **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**:
```bash
./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
==> Memeriksa dependensi yang dibutuhkan...
[SUKSES] Semua dependensi ditemukan.
......@@ -107,7 +107,7 @@ Skrip ini dibangun di atas beberapa prinsip inti untuk memastikan keandalan dan
**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.
* **Perintah**:
```bash
./install-compose-rootless.sh -c
......@@ -163,7 +163,7 @@ set -euo pipefail
readonly SCRIPT_NAME="$(basename "$0")"
readonly GITHUB_REPO="docker/compose"
readonly ROOTLESS_PLUGIN_DIR="${HOME}/.docker/cli-plugins"
# Sesuaikan direktori ini jika Anda menggunakan ~/.local/bin
# Sesuaikan direktori ini jika menggunakan ~/.local/bin
readonly COMPAT_SYMLINK_DIR="${HOME}/bin"
# --- Variabel Default untuk Argumen ---
......@@ -325,7 +325,7 @@ setup_compat_symlink() {
execute_cmd mkdir -p "$COMPAT_SYMLINK_DIR"
execute_cmd ln -sf "$install_path" "$symlink_path"
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
log_success "Symlink 'docker-compose' berhasil dibuat di ${symlink_path}"
}
......@@ -457,22 +457,22 @@ Docker Compose version v2.40.0
### 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`.
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**:
* **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/`).
* **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.
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 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
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:
......@@ -485,7 +485,7 @@ Dengan ini, saya menyatakan bahwa skrip `install-compose-rootless.sh` versi 2.1,
### Langkah Selanjutnya yang Direkomendasikan
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.
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.
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**: 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.
\ No newline at end of file
......@@ -339,7 +339,7 @@ final_instructions() {
printf " ${COLOR_GREEN}docker context use rootless${COLOR_NC}\n\n"
printf "Setelah itu, verifikasi instalasi dengan:\n"
printf " ${COLOR_GREEN}docker run hello-world${COLOR_NC}\n\n"
printf "Anda sekarang mengelola Docker dengan:\n"
printf "sekarang mengelola Docker dengan:\n"
printf " ${COLOR_GREEN}systemctl --user status docker${COLOR_NC}\n"
printf "${COLOR_YELLOW}======================================================${COLOR_NC}\n"
fi
......@@ -376,13 +376,13 @@ main "$@"
2. **Berikan Izin Eksekusi**: `chmod +x install-docker-rootless.sh`
3. **(Opsional) Lakukan Dry-Run**: Verifikasi tindakan yang akan dilakukan tanpa mengubah sistem.
```bash
sudo ./install-docker-rootless.sh -u nama_pengguna_anda --dry-run
sudo ./install-docker-rootless.sh -u nama_pengguna_--dry-run
```
4. **Jalankan Instalasi**: Jika output dry-run sesuai harapan, jalankan instalasi sebenarnya.
```bash
sudo ./install-docker-rootless.sh -u nama_pengguna_anda
```
5. **Tindakan Wajib Pasca-Instalasi**: **LOG OUT** dari sesi Anda dan **LOG IN KEMBALI**. Ini krusial agar `PATH` baru dikenali oleh shell Anda.
5. **Tindakan Wajib Pasca-Instalasi**: **LOG OUT** dari sesi dan **LOG IN KEMBALI**. Ini krusial agar `PATH` baru dikenali oleh shell.
---
......@@ -427,7 +427,7 @@ rootless
### **6. Verifikasi & Manajemen Pasca-Instalasi**
Setelah Anda log in kembali sebagai pengguna target:
Setelah log in kembali sebagai pengguna target:
1. **Pilih Konteks Docker (Penyiapan Satu Kali)**:
```bash
......@@ -437,7 +437,7 @@ Setelah Anda log in kembali sebagai pengguna target:
```bash
docker run hello-world
```
Anda akan melihat pesan "Hello from Docker!", menandakan semuanya berfungsi.
akan melihat pesan "Hello from Docker!", menandakan semuanya berfungsi.
3. **Manajemen Service**: Gunakan perintah `systemctl` dengan flag `--user`. **Jangan gunakan `sudo`**.
* Periksa status: `systemctl --user status docker`
* Hentikan service: `systemctl --user stop docker`
......@@ -448,10 +448,10 @@ Setelah Anda log in kembali sebagai pengguna target:
### **7. Penyelesaian Masalah (Troubleshooting)**
* **Error "Cannot connect to the Docker daemon"**:
* **Penyebab**: Anda belum menjalankan `docker context use rootless` pada sesi baru Anda.
* **Penyebab**: belum menjalankan `docker context use rootless` pada sesi baru.
* **Solusi**: Jalankan perintah `docker context use rootless` sekali.
* **Perintah `docker` tidak ditemukan**:
* **Penyebab**: Anda belum log out dan log in kembali, sehingga `PATH` baru belum diterapkan.
* **Penyebab**: belum log out dan log in kembali, sehingga `PATH` baru belum diterapkan.
* **Solusi**: Log out dan log in kembali.
* **Error binding port di bawah 1024**:
* **Penyebab**: Ini adalah batasan keamanan dari Rootless Mode. Pengguna non-root tidak diizinkan untuk bind ke port istimewa (< 1024).
......
......@@ -205,13 +205,13 @@ main "$@"
Salin kode di atas dan simpan ke dalam file bernama `install-docker.sh`.
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
chmod +x install-docker.sh
```
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:**
```bash
......@@ -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.
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**:
Setelah log in kembali, buka terminal dan jalankan perintah berikut **tanpa `sudo`**:
```bash
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.
......
......@@ -23,7 +23,7 @@
### **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**
......@@ -235,7 +235,7 @@ Struktur direktori di bawah `~/data/docker-data/osrm` akan terlihat seperti ini
```bash
docker network ls --filter name=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.
```bash
......@@ -252,7 +252,7 @@ Struktur direktori di bawah `~/data/docker-data/osrm` akan terlihat seperti ini
```
http://download.geofabrik.de/asia/indonesia-latest.osm.pbf
```
* **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
#### **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.
```bash
# Di home direktori /home/sysadmin
......@@ -280,20 +280,20 @@ chmod +x install-osrm-ngpm.sh
#### **Langkah 2: Eksekusi Skrip**
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
# Jalankan instalasi dengan semua pengaturan default
./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.
#### **Langkah 3: Konfigurasi Nginx Proxy Manager**
Setelah skrip selesai dan kontainer `osrm-routed-*` berjalan, Anda harus mengkonfigurasi NGPM.
Setelah skrip selesai dan kontainer `osrm-routed-*` berjalan, harus mengkonfigurasi NGPM.
1. **Login** ke antarmuka web Nginx Proxy Manager Anda.
1. **Login** ke antarmuka web Nginx Proxy Manager.
2. Navigasi ke `Hosts` -> `Proxy Hosts`.
3. Klik `Add Proxy Host`.
4. **Tab Details:**
......@@ -304,7 +304,7 @@ Setelah skrip selesai dan kontainer `osrm-routed-*` berjalan, Anda harus mengkon
* **Block Common Exploits:** `Enabled` (Direkomendasikan).
* **Websockets Support:** `Enabled` (Penting untuk beberapa fitur OSRM).
5. **Tab Locations:**
* Klik `Add Location` sebanyak jumlah profil yang Anda deploy (4 kali dalam kasus ini).
* Klik `Add Location` sebanyak jumlah profil yang deploy (4 kali dalam kasus ini).
* **Konfigurasi Lokasi 1 (Car):**
* **Path:** `/osrm/car`
* **Forward Hostname / IP:** `osrm-routed-car` (Ini adalah nama kontainer Docker)
......@@ -342,13 +342,13 @@ curl "https://route.geotency.com/osrm/motorcycle/route/v1/driving/106.8271, -6.1
curl "https://route.geotency.com/osrm/bicycle/route/v1/cycling/106.8271,-6.1754;106.8282,-6.1765?overview=false"
```
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`)**
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
#!/bin/bash
......@@ -622,7 +622,7 @@ preflight_checks() {
if [ "$DRY_RUN" = "false" ]; then
if ! docker network inspect "$DOCKER_NETWORK" &> /dev/null; then
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."
all_checks_passed=false
else
log_verbose "Docker network '${DOCKER_NETWORK}' found."
......@@ -697,7 +697,7 @@ EOF
;;
*)
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
;;
esac
......@@ -964,7 +964,7 @@ Berikut adalah contoh perintah untuk menjalankan skrip dalam berbagai skenario.
```bash
./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**
* **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.
```bash
./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**
* **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.
* **Perintah:**
```bash
./install-osrm-ngpm.sh install --map-file ./peta-jawa-bali.osm.pbf --work-dir ~/data/docker-data/osrm-jawa-bali
......@@ -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.
#### **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.
* **Prasyarat:** Instalasi OSRM sudah ada di `~/data/docker-data/osrm`. File `indonesia-latest.osm.pbf` ada di direktori home Anda.
* **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.
* **Perintah:**
```bash
./install-osrm-ngpm.sh reprocess --map-file ~/indonesia-latest.osm.pbf
......
Ketika Anda 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.
Ketika menggunakan Docker, file-file yang ada di dalam
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.
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:
my-osrm-project/
......@@ -13,13 +13,13 @@ my-osrm-project/
Penjelasan:
docker-compose.yml: File utama untuk mendefinisikan dan menjalankan layanan multi-kontainer Anda.
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.
Dockerfile.frontend: File ini digunakan untuk membuat image Docker kustom untuk frontend Anda.
data: Direktori lokal tempat Anda menyimpan semua file .osm.pbf dan .osrm yang sudah diproses.
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 akan mendefinisikan profil rute yang berbeda.
Dockerfile.frontend: File ini digunakan untuk membuat image Docker kustom untuk frontend.
data: Direktori lokal tempat menyimpan semua file .osm.pbf dan .osrm yang sudah diproses.
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:
javascript
......@@ -48,21 +48,21 @@ module.exports = {
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.
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:
dockerfile
# Gunakan image osrm-frontend resmi sebagai basis
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
# Kompilasi ulang aset frontend dengan konfigurasi baru
RUN npm run compile
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
Buat docker-compose.yml yang akan menyatukan semua layanan (backend dan frontend) yang berbeda.
Isi file docker-compose.yml:
......@@ -127,7 +127,7 @@ Penjelasan penting:
depends_on: Memastikan bahwa semua backend sudah berjalan sebelum frontend mencoba untuk memulai.
Langkah 5: Jalankan Docker Compose
Dari direktori proyek Anda, jalankan perintah berikut di terminal:
Dari direktori proyek, jalankan perintah berikut di terminal:
bash
# Lakukan proses data terlebih dahulu (extract, partition, customize)
......@@ -144,4 +144,4 @@ docker compose run --rm backend-bike osrm-extract -p /opt/bicycle.lua /data/indo
docker compose up --build -d
Gunakan kode dengan hati-hati.
Setelah semua kontainer berjalan, Anda bisa mengakses frontend Anda di http://localhost:9966. Anda akan melihat dropdown dengan profil rute yang telah Anda definisikan.
\ No newline at end of file
Setelah semua kontainer berjalan, bisa mengakses frontend di http://localhost:9966. akan melihat dropdown dengan profil rute yang telah definisikan.
\ No newline at end of file
......@@ -10,7 +10,7 @@ set -euo pipefail
readonly SCRIPT_NAME="$(basename "$0")"
readonly GITHUB_REPO="docker/compose"
readonly ROOTLESS_PLUGIN_DIR="${HOME}/.docker/cli-plugins"
# Sesuaikan direktori ini jika Anda menggunakan ~/.local/bin
# Sesuaikan direktori ini jika menggunakan ~/.local/bin
readonly COMPAT_SYMLINK_DIR="${HOME}/bin"
# --- Variabel Default untuk Argumen ---
......@@ -172,7 +172,7 @@ setup_compat_symlink() {
execute_cmd mkdir -p "$COMPAT_SYMLINK_DIR"
execute_cmd ln -sf "$install_path" "$symlink_path"
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
log_success "Symlink 'docker-compose' berhasil dibuat di ${symlink_path}"
}
......
......@@ -195,7 +195,7 @@ final_instructions() {
printf " ${COLOR_GREEN}docker context use rootless${COLOR_NC}\n\n"
printf "Setelah itu, verifikasi instalasi dengan:\n"
printf " ${COLOR_GREEN}docker run hello-world${COLOR_NC}\n\n"
printf "Anda sekarang mengelola Docker dengan:\n"
printf "sekarang mengelola Docker dengan:\n"
printf " ${COLOR_GREEN}systemctl --user status docker${COLOR_NC}\n"
printf "${COLOR_YELLOW}======================================================${COLOR_NC}\n"
fi
......
......@@ -189,7 +189,7 @@ if ! groups "$USER" | grep -q "\b$SHARED_GROUP\b"; then
log " Menambahkan user $USER ke group $SHARED_GROUP"
sudo usermod -a -G "$SHARED_GROUP" "$USER"
warn "User $USER telah ditambahkan ke group $SHARED_GROUP"
warn "Anda perlu LOGOUT dan LOGIN kembali agar perubahan group berlaku"
warn "perlu LOGOUT dan LOGIN kembali agar perubahan group berlaku"
warn "Atau jalankan: newgrp $SHARED_GROUP"
else
log " User $USER sudah ada di group $SHARED_GROUP"
......@@ -324,7 +324,7 @@ echo "Shared Group : $SHARED_GROUP"
echo "=========================================="
echo
echo "⚠️ PENTING: Jika ini pertama kali user ditambahkan ke group,"
echo " Anda perlu LOGOUT dan LOGIN kembali, atau jalankan:"
echo " perlu LOGOUT dan LOGIN kembali, atau jalankan:"
echo " newgrp $SHARED_GROUP"
echo
echo "Next steps:"
......
......@@ -245,7 +245,7 @@ check_and_configure_sysctl() {
choice="y"
log_warn "Opsi '--yes' aktif, konfigurasi sysctl akan dilakukan secara otomatis."
else
read -p "Apakah Anda ingin skrip ini mengkonfigurasinya secara otomatis? (memerlukan sudo) [y/N]: " -r choice
read -p "Apakah ingin skrip ini mengkonfigurasinya secara otomatis? (memerlukan sudo) [y/N]: " -r choice
fi
echo
......@@ -495,7 +495,7 @@ display_post_install_summary() {
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}TINDAKAN SEGERA:${C_RESET} Segera ubah email dan password default setelah Anda berhasil login untuk mengamankan instalasi Anda!"
log_error "${C_BOLD}TINDAKAN SEGERA:${C_RESET} Segera ubah email dan password default setelah berhasil login untuk mengamankan instalasi!"
echo -e "${C_GREEN}===================================================================${C_RESET}"
}
......
......@@ -158,7 +158,7 @@ check_and_configure_sysctl() {
return
fi
read -p "Apakah Anda ingin skrip ini secara otomatis mengkonfigurasinya untuk Anda? (y/N): " -r choice
read -p "Apakah ingin skrip ini secara otomatis mengkonfigurasinya untuk? (y/N): " -r choice
echo
if [[ ! "$choice" =~ ^[Yy]$ ]]; then
log_error "Aksi dibatalkan oleh pengguna. Mohon konfigurasikan sysctl secara manual untuk melanjutkan."
......@@ -339,10 +339,10 @@ post_install_summary() {
fi
local server_ip; server_ip=$(hostname -I | awk '{print $1}')
log_success "================= ${C_BOLD}INSTALASI SELESAI${C_RESET}${C_GREEN} ================="
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
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!"
log_success "=========================================================="
}
......
......@@ -110,7 +110,7 @@ check_and_install_package() {
else
execute_cmd "dnf install -y $package_name"
if ! rpm -q "$package_name" &>/dev/null; then
log_error "Gagal menginstal paket '$package_name'. Pastikan repositori Anda dikonfigurasi dengan benar."
log_error "Gagal menginstal paket '$package_name'. Pastikan repositori dikonfigurasi dengan benar."
fi
fi
else
......@@ -133,9 +133,9 @@ show_help() {
echo " --help Menampilkan bantuan ini."
echo ""
echo "Penting:"
echo " 1. Pastikan Anda memiliki SSH Key yang terpasang untuk pengguna Anda di server."
echo " 2. Pastikan pengguna Anda memiliki hak sudo."
echo " 3. SELALU UJI koneksi SSH Anda di sesi baru SEBELUM menutup sesi saat ini."
echo " 1. Pastikan memiliki SSH Key yang terpasang untuk pengguna di server."
echo " 2. Pastikan pengguna memiliki hak sudo."
echo " 3. SELALU UJI koneksi SSH di sesi baru SEBELUM menutup sesi saat ini."
echo " 4. Sangat disarankan untuk menjalankan dengan '--dry-run' terlebih dahulu."
exit 0
}
......@@ -321,7 +321,7 @@ restart_ssh_service() {
verify_ssh_connection() {
log_info "Memverifikasi koneksi SSH pada port baru '$NEW_SSH_PORT'..."
if $DRY_RUN; then
log_info "(Dry Run) Untuk memverifikasi, Anda harus mencoba login dari mesin klien:"
log_info "(Dry Run) Untuk memverifikasi, harus mencoba login dari mesin klien:"
log_info " ssh -p $NEW_SSH_PORT $CURRENT_USER@<SERVER_IP>"
log_success "Verifikasi koneksi SSH berhasil (dry run)."
else
......@@ -332,7 +332,7 @@ verify_ssh_connection() {
log_success "Daemon SSH mendengarkan di port $NEW_SSH_PORT."
log_warn "Sangat disarankan untuk menguji koneksi dari sesi klien baru:"
log_warn " ssh -p $NEW_SSH_PORT $CURRENT_USER@<SERVER_IP>"
log_warn "JANGAN LOGOUT DARI SESI INI SEBELUM ANDA BERHASIL LOGIN DARI SESI BARU!"
log_warn "JANGAN LOGOUT DARI SESI INI SEBELUM BERHASIL LOGIN DARI SESI BARU!"
fi
}
......@@ -388,7 +388,7 @@ main() {
# Periksa konflik AllowUsers dan AllowGroups
if [ -n "$ALLOW_USERS_LIST" ] && [ -n "$ALLOW_GROUPS_LIST" ]; then
log_error "Anda tidak dapat menggunakan --allow-users dan --allow-groups secara bersamaan. Pilih salah satu."
log_error "tidak dapat menggunakan --allow-users dan --allow-groups secara bersamaan. Pilih salah satu."
fi
log_info "Memulai proses hardening SSH untuk Rocky Linux 10..."
......@@ -421,7 +421,7 @@ main() {
verify_ssh_connection
log_success "Proses hardening SSH selesai!"
log_warn "MOHON SEGERA UJI KONEKSI SSH DENGAN PORT BARU DARI TERMINAL LAIN. JANGAN TUTUP SESI INI SAMPAI ANDA YAKIN BISA LOGIN!"
log_warn "MOHON SEGERA UJI KONEKSI SSH DENGAN PORT BARU DARI TERMINAL LAIN. JANGAN TUTUP SESI INI SAMPAI YAKIN BISA LOGIN!"
log_info "Untuk menguji: ssh -p $NEW_SSH_PORT $CURRENT_USER@<IP_SERVER_ANDA>"
if $DRY_RUN; then
log_warn "Karena ini adalah mode dry run, tidak ada perubahan yang diterapkan. Tidak perlu menguji koneksi."
......
......@@ -114,7 +114,7 @@ check_and_install_package() {
else
execute_cmd "dnf install -y $package_name"
if ! rpm -q "$package_name" &>/dev/null; then
log_error "Gagal menginstal paket '$package_name'. Pastikan repositori Anda dikonfigurasi dengan benar."
log_error "Gagal menginstal paket '$package_name'. Pastikan repositori dikonfigurasi dengan benar."
fi
fi
else
......@@ -138,8 +138,8 @@ show_help() {
echo " --help Menampilkan bantuan ini."
echo ""
echo "Penting:"
echo " 1. Pastikan port SSH yang Anda tentukan benar dan sedang digunakan oleh SSH server Anda."
echo " 2. SELALU masukkan alamat IP Anda sendiri di --ignore-ip untuk menghindari terkunci."
echo " 1. Pastikan port SSH yang tentukan benar dan sedang digunakan oleh SSH server."
echo " 2. SELALU masukkan alamat IP sendiri di --ignore-ip untuk menghindari terkunci."
echo " 3. Sangat disarankan untuk menjalankan dengan '--dry-run' terlebih dahulu."
exit 0
}
......@@ -151,7 +151,7 @@ validate_port() {
log_error "Port SSH '$port' tidak valid. Port harus angka antara 1024 dan 65535."
fi
if ((port < 1024)); then
log_warn "Menggunakan port SSH di bawah 1024 tidak direkomendasikan kecuali Anda yakin."
log_warn "Menggunakan port SSH di bawah 1024 tidak direkomendasikan kecuali yakin."
fi
}
......@@ -240,7 +240,7 @@ enable_start_fail2ban() {
verify_fail2ban_jail() {
log_info "Memverifikasi status Fail2Ban SSH jail..."
if $DRY_RUN; then
log_info "(Dry Run) Anda perlu menjalankan: sudo fail2ban-client status sshd"
log_info "(Dry Run) perlu menjalankan: sudo fail2ban-client status sshd"
log_success "Verifikasi status Fail2Ban jail berhasil (dry run)."
else
execute_cmd "sudo fail2ban-client status sshd"
......@@ -341,7 +341,7 @@ main() {
# 6. Verifikasi Konfigurasi Jail
verify_fail2ban_jail
log_success "Konfigurasi Fail2Ban selesai! Server Anda sekarang lebih terlindungi dari serangan brute-force SSH."
log_success "Konfigurasi Fail2Ban selesai! Server sekarang lebih terlindungi dari serangan brute-force SSH."
log_warn "MOHON SEGERA UJI FAIL2BAN DENGAN SENGAJA MELAKUKAN UPAYA LOGIN GAGAL DARI IP YANG TIDAK DIABAIKAN."
if $DRY_RUN; then
log_warn "Karena ini adalah mode dry run, tidak ada perubahan yang diterapkan. Tidak perlu menguji fungsi."
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment