vagrant - It costs 3 mins to read

Vọc thử Vagrant

Số là vừa dọn dẹp sạch sẽ ổ cứng và reinstall lại OS cho con Macbook của mình, mà hễ cứ cài lại máy là y như rằng phải setup lại một đống thứ, đặc biệt là môi trường để dev (mình sử dụng Ruby 2.3, Rails, Redis, Postgres 9,4, Node.js…), rất oải. Chưa kể nếu làm việc trong một team, cần một môi trường lập trình đồng nhất để hạn chế lỗi hay sự bất đồng bộ có thể xảy ra thì việc thiết lập các máy tính của mỗi thành viên trong team một cách thủ công là hết sức tốn kém về mặt thời gian. Vagrant ra đời là để giải quyết vấn đề đó. Vagrant build on top các virtual machine như Virtual Box, VMWare… Vagrant còn kết hợp tốt với các provision tools như Puppet, Chef, Ansible để tự động cài đặt và cấu hình các phần mềm, công cụ cần thiết trên máy ảo. Nhờ Vagrant mà chúng ta có thể xây dựng một môi trường giả lập một cách nhanh chóng, tiện dụng, hiệu quả và có thể chia sẻ để dùng chung cho cả team.

Cài đặt Vagrant hết sức đơn giản, vào trang https://www.vagrantup.com/downloads.html và tải về phiên bản dành cho hệ điều hành của mình (Trước đó, bạn cần cài đặt phần mềm Virtual Machine trước đã, mình khuyến nghị dùng VirtualBox). Lựa một boxes mà mình cần dùng làm nền tảng tại https://atlas.hashicorp.com/boxes/search, thường các boxes được chia sẻ và có nhiều lượt sử dụng chỉ bao gồm hệ điều hành và một số tinh chỉnh nhỏ để mọi người có thể tuỳ biến dựa theo nhu cầu của mình. Ở đây mình chọn ubuntu/trusty64 (Official UBuntu 14.04 LTS), cũng có nhiều boxes cài sẵn PHP, Apache, Nginx, MySQL, WordPress này nọ nhưng mình không cần lắm.

vagrant init hashicorp/precise64
vagrant up

Lần đầu tiên chạy Vagrant up sẽ khá lâu, vì Vagrant sẽ tải box, hệ điều hành về, cài đặt và tuỳ chỉnh cho bạn. Những lần sau thì bạn cứ vagrant up rồi vagrant ssh là sử dụng bình thường, thậm chí có thể quên luôn sự tồn tại của VirtualBox. Khi dùng chán chê rồi thì vagrant destroy hoặc vagrant halt để tắt VM và giải pháp tài nguyên hệ thống mà vagrant chiếm giữ (Máy mình khi start box Ubuntu của vagrant vẫn chạy vi vu, không thấy ảnh hưởng gì nhiều nên cũng không phải destroy luôn.). Để xoá hẳn một box không dùng nữa thì ta xài lệnh vagrant box remove

Ngoài ra, còn một số lệnh thường dùng như:

Synced Folders

Một chức năng quan trọng trong Vagrant, theo mình nghĩ Vagrant chỉ nên dùng để cài đặt các phần mềm, công cụ tối cần thiết để dùng chung cho cả team. Mỗi người đều có IDE/Editor ưa thích, tốt hơn là nên để IDE/Editor nằm ngoài VM và dùng chức năng Synced Folders để đồng bộ hoá folder chứa code.

Đọc thêm cách sử dụng của Synced Folders tại đây.

Cơ bản là chúng ta sẽ thêm Synced Folders (bao nhiêu tuỳ thích) vào Vagrantfile theo cấu trúc sau:

config.vm.synced_folder "/path/on/host", "/path/on/guest"

(Với host là máy thật, còn guest là máy ảo chạy vagrant)

Provisioning

Ở thời điểm này thì mình chưa dùng tới chức năng Provisioning do vẫn còn xa lạ với các provisioner như Puppet, Chef, Ansible. Thay vào đó sau khi khởi chạy một box của Vagrant, mình lại vào trong guest, cài đặt và cấu hình một cách thủ công. Automate hoàn toàn quá trình cài đặt phần mềm trong máy ảo lại là chức năng quan trọng và nổi bật nhất của Vagrant. Và đây chính là phần khó nhất và gây đau đầu nhất của Vagrant (Có thời gian mình sẽ thử tìm hiểu thêm về Chef hoặc Ansible).

Basic Usage

Forwarded Port

Để máy host có thể connect tới dịch vụ đang chạy trên máy guest, bạn phải cấu hình forwarded port trong file Vagrantfile, ví dụ của mình là forward cổng 3000 (Rails), 5432 (Postgres) và 6379 (Redis) để có thể truy cập vào localhost trên máy host bằng trình duyệt web.

config.vm.network "forwarded_port", guest: 3000, host: 3000
config.vm.network "forwarded_port", guest: 5432, host: 5432
config.vm.network "forwarded_port", guest: 6379, host: 6379

Đọc thêm

Tôi đã từ bỏ sử dụng Vagrant