Skip to content

Commit 0227ca1

Browse files
committed
add vagrant
1 parent 41877c6 commit 0227ca1

1 file changed

Lines changed: 258 additions & 0 deletions

File tree

Lines changed: 258 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,258 @@
1+
---
2+
slug: tutorial-vahrant
3+
title: Tutorial Vagrant
4+
authors: topekox
5+
tags: [vagrant, virtual machine]
6+
---
7+
8+
![Vagrant](https://developer.hashicorp.com/_next/image?url=https%3A%2F%2Fwww.datocms-assets.com%2F2885%2F1679087784-devdot-vagrant_dm.png&w=1080&q=75&dpl=dpl_5fCoEp5gTPgcR1GKEAEP8bJHQtXJ)
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

Comments
 (0)