|
| 1 | +--- |
| 2 | +slug: tutorial-vahrant |
| 3 | +title: Tutorial Vagrant |
| 4 | +authors: topekox |
| 5 | +tags: [vagrant, virtual machine] |
| 6 | +--- |
| 7 | + |
| 8 | + |
| 9 | + |
| 10 | +## 1️⃣ Apa itu Vagrant? |
| 11 | + |
| 12 | +Vagrant adalah tool baris perintah (CLI) untuk membangun dan mengelola lingkungan mesin virtual secara otomatis. |
| 13 | + |
| 14 | +* **Dulu**: Kalau mau buat server Ubuntu di VirtualBox, kita harus download ISO, klik-klik menu, setting RAM manual, instal OS, baru bisa pakai. |
| 15 | +* **Sekarang (Vagrant)**: Kamu cuma butuh satu file teks (*Vagrantfile*), ketik satu perintah, dan Server siap dalam hitungan menit. |
| 16 | + |
| 17 | +<!-- truncate --> |
| 18 | + |
| 19 | +## 2️⃣ Komponen Utama Vagrant |
| 20 | + |
| 21 | +Sebelum praktik, kita wajib tahu istilah penting di Vagrant: |
| 22 | + |
| 23 | +* **Provider**: Aplikasi yang menjalankan VM (Contoh: Oracle VirtualBox, VMware, atau Docker). |
| 24 | +* **Box**: Sebutan untuk template atau file gambar OS yang sudah jadi (semacam ISO mini). Kita bisa cari ribuan Box di Vagrant Cloud. |
| 25 | +* **Vagrantfile**: File konfigurasi (berbasis bahasa Ruby) yang menentukan spesifikasi VM (RAM, IP, Port, dll). |
| 26 | + |
| 27 | +## 3️⃣ Persiapan |
| 28 | + |
| 29 | +Pastikan kita sudah download dua tools ini: |
| 30 | + |
| 31 | +* **Hypervisor**: Download [VirtualBox](https://www.virtualbox.org/wiki/Downloads) / [Vmware](https://www.vmware.com/) / Docker / Hyper-V / KVM (sebagai mesinnya). |
| 32 | +* **Vagrant**: [Download Vagrant](https://developer.hashicorp.com/vagrant/install) (sebagai sopirnya). |
| 33 | + |
| 34 | +## 4️⃣ Contoh: Membuat Server Ubuntu |
| 35 | + |
| 36 | +Buka Terminal/PowerShell, lalu ikuti langkah ini: |
| 37 | + |
| 38 | +* ### Langkah 1: Buat Folder lokasi Project |
| 39 | + |
| 40 | +```bash |
| 41 | +mkdir belajar-vagrant |
| 42 | +cd belajar-vagrant |
| 43 | +``` |
| 44 | + |
| 45 | +* ## Langkah 2: Download Box Ubuntu |
| 46 | + |
| 47 | +Pada praktek ini, kita akan pakai Ubuntu 22.04 (Jammy Jellyfish). |
| 48 | + |
| 49 | +```bash |
| 50 | +vagrant init ubuntu/jammy64 |
| 51 | +``` |
| 52 | + |
| 53 | +Perintah ini akan membuat file bernama `Vagrantfile` di direktori anda. Di dalam file ini kita dapat melakukan konfigurasi Vagrant, contoh konfigurasi untuk membuat folder yang terhubung (sinkron) antara komputer asli (Host) dan mesin virtual (Guest), yang jika folder "data" di komputer host belum ada, Vagrant akan otomatis membuatnya saat kamu menjalankan perintah `vagrant up`. |
| 54 | + |
| 55 | +``` |
| 56 | +config.vm.synced_folder "data", "/vagrant_data", create:true |
| 57 | +``` |
| 58 | + |
| 59 | +:::tip |
| 60 | +Gunakann repository lain seperti `bento/ubuntu-22.04` berbasis ubuntu 22.04 yang sudag dioptimasi, ringan, minim bug saat mounting folder. |
| 61 | +::: |
| 62 | + |
| 63 | +* ### Langkah 3: Menjalankan Mesin |
| 64 | + |
| 65 | +Vagrant akan otomatis mengunduh image Ubuntu (jika belum ada), mengatur VirtualBox, dan menyalakan mesinnya. |
| 66 | + |
| 67 | +```bash |
| 68 | +vagrant up |
| 69 | +``` |
| 70 | + |
| 71 | +* *Vagrant akan download OS (hanya sekali) dan menyalakannya.* |
| 72 | + |
| 73 | +* ### Langkah 4: Masuk ke Server |
| 74 | + |
| 75 | +Masuk ke dalam Ubuntu (SSH), kita tidak perlu username/password manual, cukup ketik: |
| 76 | + |
| 77 | +```bash |
| 78 | +vagrant ssh |
| 79 | +``` |
| 80 | + |
| 81 | +## 5️⃣ Perintah Dasar Vagrant |
| 82 | + |
| 83 | +| Perintah | Fungsi | |
| 84 | +| --- | --- | |
| 85 | +| `vagrant up` | Menyalakan VM (dan membuatnya jika belum ada). | |
| 86 | +| `vagrant status` | Cek apakah VM sedang jalan atau mati. | |
| 87 | +| `vagrant halt` | Mematikan VM (seperti Shut Down). | |
| 88 | +| `vagrant suspend` | Menidurkan VM (seperti Sleep/Hibernate). | |
| 89 | +| `vagrant reload` | Restart VM (wajib dilakukan jika kamu edit `Vagrantfile`). | |
| 90 | +| `vagrant destroy` | Menghapus seluruh VM (bersih, hemat disk!). | |
| 91 | + |
| 92 | +## 6️⃣ Fitur: Shared Folder |
| 93 | + |
| 94 | +Vagrant secara otomatis menghubungkan folder proyekmu di Windows ke folder `/vagrant` di dalam VM. Jadi, kamu bisa ngoding di VS Code (Windows) dan hasilnya langsung jalan di Ubuntu (VM) tanpa perlu copy-paste. |
| 95 | + |
| 96 | +Mari kita langsung praktikkan fitur ini. Kita akan membuat skenario di mana kita menulis kode di Windows, tapi file tersebut dibaca dan dijalankan oleh Ubuntu. |
| 97 | + |
| 98 | +### Langkah 1: Siapkan Struktur Folder |
| 99 | + |
| 100 | +Di komputer aslimu (Host), buat folder proyek baru dan masuk ke dalamnya: |
| 101 | + |
| 102 | +```bash |
| 103 | +mkdir projek-web |
| 104 | +cd projek-web |
| 105 | +mkdir data # Ini folder yang akan disinkronkan |
| 106 | +``` |
| 107 | + |
| 108 | +### Langkah 2: Konfigurasi Vagrantfile |
| 109 | + |
| 110 | +Buat/edit `Vagrantfile` di dalam folder `projek-web` tadi, lalu masukkan kode berikut: |
| 111 | + |
| 112 | +```ruby |
| 113 | +Vagrant.configure("2") do |config| |
| 114 | + # Kita gunakan Ubuntu |
| 115 | + config.vm.box = "ubuntu/jammy64" |
| 116 | + |
| 117 | + # IMPLEMENTASI SYNCED FOLDER |
| 118 | + # "data" = folder di Windows |
| 119 | + # "/var/www/html" = folder di dalam Ubuntu (tempat standar file web) |
| 120 | + config.vm.synced_folder "data", "/var/www/html", create: true |
| 121 | + |
| 122 | + # Agar kita bisa buka webnya dari browser Windows |
| 123 | + config.vm.network "forwarded_port", guest: 80, host: 8080 |
| 124 | + |
| 125 | + # Install Web Server otomatis (Provisioning) |
| 126 | + config.vm.provision "shell", inline: <<-SHELL |
| 127 | + sudo apt-get update |
| 128 | + sudo apt-get install -y apache2 |
| 129 | + SHELL |
| 130 | +end |
| 131 | +``` |
| 132 | + |
| 133 | +### Langkah 3: Jalankan Mesin |
| 134 | + |
| 135 | +Ketik perintah: |
| 136 | + |
| 137 | +```bash |
| 138 | +vagrant up |
| 139 | +``` |
| 140 | + |
| 141 | +Vagrant akan membuat mesin, menginstal Apache, dan menyambungkan folder data di Windows ke `/var/www/html` di Ubuntu. |
| 142 | + |
| 143 | +### Langkah 4: Uji Coba |
| 144 | + |
| 145 | +1. Buka Windows Explorer, masuk ke folder projek-web/data. |
| 146 | +2. Buat file baru bernama `index.html`. |
| 147 | +3. Isi dengan kode simpel: `<h1>Halo dari Windows, jalan di Ubuntu!</h1>`. |
| 148 | +4. Sekarang buka browser di Windows (Chrome/Edge) dan ketik: `localhost:8080`. |
| 149 | + |
| 150 | +**Hasilnya**: Kamu akan melihat tulisan tersebut muncul! Padahal file aslinya ada di Windows, tapi yang menyajikan filenya adalah server Apache yang ada di dalam Ubuntu. |
| 151 | + |
| 152 | +:::tip |
| 153 | +**Tips Penting untuk Shared Folder**: |
| 154 | + |
| 155 | +* VirtualBox Guest Additions: Agar fitur ini lancar, pastikan plugin Guest Additions terinstal. Kamu bisa menginstalnya secara otomatis dengan perintah: `vagrant plugin install vagrant-vbguest`. |
| 156 | +* Permissions: Jika folder di Ubuntu tidak bisa ditulisi, kamu bisa menambah perintah di Vagrantfile: `owner: "www-data"`, `group: "www-data"` agar server web punya izin akses. |
| 157 | +* Real-time: Semua perubahan file yang kamu lakukan di VS Code (Windows) akan langsung terupdate di Ubuntu tanpa perlu restart apa pun. |
| 158 | +::: |
| 159 | + |
| 160 | +## 7️⃣ Contoh Implementasi |
| 161 | + |
| 162 | +### Skenario 1: Setup Nginx Otomatis |
| 163 | + |
| 164 | +Di bagian ini, kita menggunakan fitur **Provisioning**. Vagrant akan menjalankan perintah terminal secara otomatis tepat setelah mesin menyala. |
| 165 | + |
| 166 | +```ruby |
| 167 | +Vagrant.configure("2") do |config| |
| 168 | + config.vm.box = "ubuntu/jammy64" |
| 169 | + |
| 170 | + # Skrip instalasi otomatis |
| 171 | + config.vm.provision "shell", inline: <<-SHELL |
| 172 | + sudo apt-get update |
| 173 | + sudo apt-get install -y nginx |
| 174 | + # Menyalakan Nginx saat boot |
| 175 | + sudo systemctl enable nginx |
| 176 | + sudo systemctl start nginx |
| 177 | + SHELL |
| 178 | +end |
| 179 | +``` |
| 180 | + |
| 181 | +**Cara Cek**: Setelah vagrant up, ketik vagrant ssh lalu jalankan systemctl status nginx. Kamu akan melihat Nginx sudah aktif tanpa perlu kamu instal manual. |
| 182 | + |
| 183 | +### Skenario 2: Setting IP Address Statis (Private Network) |
| 184 | + |
| 185 | +Secara default, VM hanya bisa diakses via port forwarding (misal l`ocalhost:8080`). Dengan Private Network, VM kamu akan punya IP sendiri seolah-olah ada perangkat fisik lain di jaringan rumahmu. |
| 186 | + |
| 187 | +```ruby |
| 188 | +Vagrant.configure("2") do |config| |
| 189 | + config.vm.box = "ubuntu/jammy64" |
| 190 | + |
| 191 | + # Menentukan IP Statis (Gunakan range 192.168.56.x untuk VirtualBox) |
| 192 | + config.vm.network "private_network", ip: "192.168.56.10" |
| 193 | +end |
| 194 | +``` |
| 195 | + |
| 196 | +**Cara Cek**: Setelah `vagrant up`, buka browser di Windows/Host kamu, lalu ketik `http://192.168.56.10`. Jika Nginx sudah terinstal (skenario 1), halaman "Welcome to Nginx" akan langsung muncul. Dokumentasi Jaringan. |
| 197 | + |
| 198 | +### Skenario 3: Integrasi dengan Docker |
| 199 | + |
| 200 | +Ada dua cara: menginstal Docker di dalam VM Ubuntu, atau menggunakan Docker sebagai pengganti VirtualBox. |
| 201 | + |
| 202 | +* **Cara 1**: Di sini kita akan menginstal Docker di dalam Ubuntu agar kamu punya lingkungan kontainer yang terisolasi. |
| 203 | + |
| 204 | +**`Vagrantfile`**: |
| 205 | + |
| 206 | +```ruby |
| 207 | +Vagrant.configure("2") do |config| |
| 208 | + config.vm.box = "ubuntu/jammy64" |
| 209 | + |
| 210 | + config.vm.provision "shell", inline: <<-SHELL |
| 211 | + # Instalasi Docker Standar |
| 212 | + sudo apt-get update |
| 213 | + sudo apt-get install -y docker.io |
| 214 | + # Agar user 'vagrant' bisa jalankan docker tanpa 'sudo' |
| 215 | + sudo usermod -aG docker vagrant |
| 216 | + SHELL |
| 217 | +end |
| 218 | +``` |
| 219 | + |
| 220 | +**Cara Cek**: Masuk ke VM dengan `vagrant ssh,` lalu ketik `docker ps`. Kamu sudah bisa menjalankan `docker run hello-world` di sana. |
| 221 | + |
| 222 | +* **Cara 2**: Pastikan Docker Desktop sudah terinstal dan berjalan di Windows/Host kamu. Kamu bisa mengunduhnya di Docker Official Site. |
| 223 | + |
| 224 | + * **`Vagrantfile`**: |
| 225 | + |
| 226 | +```ruby |
| 227 | +Vagrant.configure("2") do |config| |
| 228 | + # Kita beri tahu Vagrant untuk menggunakan Docker, bukan VirtualBox |
| 229 | + config.vm.provider "docker" do |d| |
| 230 | + # Menggunakan image Ubuntu resmi dari Docker Hub |
| 231 | + d.image = "ubuntu:jammy" |
| 232 | + |
| 233 | + # Menjaga container tetap hidup (agar tidak langsung mati setelah start) |
| 234 | + d.remains_running = true |
| 235 | + |
| 236 | + # Mengaktifkan fitur TTY agar kita bisa masuk lewat SSH/Terminal |
| 237 | + d.has_ssh = true |
| 238 | + end |
| 239 | + |
| 240 | + # Setting Port Forwarding (Browser Host:8080 -> Container:80) |
| 241 | + config.vm.network "forwarded_port", guest: 80, host: 8080 |
| 242 | + |
| 243 | + # Instalasi Nginx otomatis di dalam Container |
| 244 | + config.vm.provision "shell", inline: <<-SHELL |
| 245 | + apt-get update |
| 246 | + apt-get install -y nginx |
| 247 | + service nginx start |
| 248 | + SHELL |
| 249 | +end |
| 250 | +``` |
| 251 | + |
| 252 | +Cara menjalankan: |
| 253 | + |
| 254 | +```bash |
| 255 | +vagrant up --provider=docker |
| 256 | +``` |
| 257 | + |
| 258 | +*Vagrant akan mengunduh image Ubuntu dari Docker Hub dan menyalakannya dalam hitungan detik.* |
0 commit comments