ลองใช้ Vagrant สร้าง VM Virtual Box เพื่อทดสอบก่อน Deploy ลง Server จริง
#vagrant , #vm , #virtualbox , #lab
วันนี้ได้ลองใช้ Vagrant + Virtual Box อีกรอบ ปัดฝุ่นความรู้เพื่อที่จะเอาไปสร้าง Server Linux บนเครื่องตัวเองไว้ทดสอบ Docker Container กับ Ansible ก่อน Deploy งานตัวเองขึ้น Server จริง
Setup Lab
ลง Vagrant ตาม Instruction ของ Official Website
https://developer.hashicorp.com/vagrant/downloads#linux

The Code
Vagrantfile
Vagrant.configure("2") do |config| config.vm.box = "hashicorp-education/ubuntu-24-04" config.vm.box_version = "0.1.0"
# Install Docker and dependencies # install-dependencies.sh from https://developer.hashicorp.com/vagrant/tutorials/get-started/provision#update-your-vagrantfile config.vm.provision "shell", name: "install-dependencies", path: "./install-dependencies.sh"
# Define Nginx VM config.vm.define "nginx" do |nginx| nginx.vm.hostname = "nginx" nginx.vm.network "private_network", ip: '192.168.56.11' nginx.vm.network "forwarded_port", guest: 80, host: 8082
nginx.vm.provision "shell", name: "start-nginx", inline: <<-SHELL docker run -d -p 80:80 --restart always --name "nginx" nginx SHELL endendจากนั้นลอง
vagrant upเพื่อสร้าง VM ขึ้นมา
Explain
เลือก Box ที่จะใช้สร้าง VM (คล้ายๆ Docker Image)
config.vm.box = "hashicorp-education/ubuntu-24-04"Provision เป็น เหมือน setup หลังสร้าง VM
config.vm.provision "shell", name: "install-dependencies", path: "./install-dependencies.sh"สร้าง VM ด้วย block
# Define Nginx VM config.vm.define "nginx" do |nginx| nginx.vm.hostname = "nginx" nginx.vm.network "private_network", ip: '192.168.56.11' nginx.vm.network "forwarded_port", guest: 80, host: 8082
nginx.vm.provision "shell", name: "start-nginx", inline: <<-SHELL docker run -d -p 80:80 --restart always --name "nginx" nginx SHELL endเราสามารถ set IP ของ VM และสามารถ access ผ่านเหมือนมี server อยู่ในวง LAN เราได้เลย
nginx.vm.network "private_network", ip: '192.168.56.11'ส่วน Forward Port ตรงนี้จะ Tricky หน่อย
nginx.vm.network "forwarded_port", guest: 80, host: 8082guest: 80 คือพอร์ตใน VM
host: 8082 คือพอร์ตบนเครื่อง host ที่ forward ไปยัง VM:80
เข้าได้ผ่าน http://localhost:8082 (หรือ IP ของเครื่อง host)
ถ้าจะเข้าโดยใช้ IP ของ VM 192.168.56.11 ให้ใช้ http://192.168.56.11:80 (ไม่ใช่ :8082)
⚠️ ถ้ามี config.vm.define หลาย block
host port สามารถชนกันได้ ต้องระวังตรงนี้
Other Commands
Stop VM
vagrant haltPause/Resume VM
vagrant suspend/resumeDelete VM
vagrant destroyใส่ -f เพื่อไม่ให้ถามก่อนลบ
Delete Box
vagrant box remove hashicorp-education/ubuntu-24-04Up only service
vagrant up nginxRun only single provision
vagrant up --provision-with start-nginx