Cùng tìm hiểu về Vagrant

by Thien

on Jul 1/15 at 07:32

I. Giới thiệu

Chúng ta thường dùng những môi trường giả lập như Xampp, Wamp,... để phát triển một ứng dụng web trên môi trường window. Tuy nhiên, khi triển khai ứng dụng web lên server thực sự thì môi trường trên server (linux) lại khác biệt hoàn toàn so với môi trường giả lập mà chúng ta sử dụng. Vì thế sẽ có những lỗi phát sinh không mong muốn. Những lỗi này có thể mang để những đánh giá không đúng từ phía khách hàng về ứng dụng web của bạn.

II. Vagrant là gì?

Vagrant là một nền tảng giúp bạn dễ dàng tạo ra một môi trường phát triển ứng dụng hiện đại.

Với Vagrant bạn có thể cấu hình một máy ảo trong một vài bước đơn giản để làm một server linux(hay môi trường nào khác) trên máy tính của bạn.

Nó sẽ giúp ứng dụng của bạn tránh những lỗi không cần thiết khi deploy và dễ dàng hơn khi làm việc cùng với team.

III. Lợi ích của Vagrant

  1. Tạo môi trường phát triển ứng dụng web giống với môi trường deploy.
  2. Vagrant giúp bạn tạo ra môi trường làm việc cho team (Vagrantfile), do đó giúp bạn làm việc với team một cách dễ dàng và hiệu quả.
  3. Tiết kiệm thời gian cài đặt phần mềm, giảm thiểu các lỗi xảy ra ở một môi trường nhất định.
  4. Đồng bộ hóa với windown. Vagrant cho phép bạn đồng bộ hóa thư mục trên máy ảo linux và window, do đó giúp bạn dễ dàng chỉnh sửa code mà không cần phải lên máy ảo.
  5. Đa nền tảng, với hệ thống boxes đa dạng và phong phú, bạn dễ dàng thử với nhiều OS kháng nhau cũng như distribution khác nhau. Ngoài ra, với việc sử dụng các provision tool, bạn dễ dàng cài đặt phần mềm trên nhiều dòng OS khác nhau.

IV. Cài đặt Vagrant

  1. Virtualbox

Để sử dụng được Vagrant bạn cần cài một trong các ứng dụng chạy máy ảo như Virtualbox, VMwave, AWS,...

  1. Vagrant

Download vagrant tại đây . Nên download bản 1.6 trở lên, vì có support docker. Sau đó cài vào máy tính của bạn.

V. Sử dung Vagrant

Giả sử bạn muốn tạo một máy ảo linux (ở đây tôi chọn ubuntu 14.04 trusty). Bạn chỉ cần chạy những câu lệnh sau:

$ vagrant init ubuntu14 https://oss-binaries.phusionpassenger.com/vagrant/boxes/latest/ubuntu-14.04-amd64-vbox.box

Phân tích

  • Câu lệnh vagrant init là để tạo ra file Vagrantfile.
  • ubuntu14 là đặt tên image ubuntu.

Kết quả: bạn sẽ thấy có một file Vagrantfile được tạo ra.

Khởi động máy ảo

$ vagrant up

Sau khi khởi động xong máy ảo, bạn sẽ thấy bên Virtualbox sẽ có một máy ảo được tạo ra:

Như vậy là bạn đã có được một máy ảo linux. Quá nhanh và rất đơn giản phải không? (-_-)

Bây giờ bạn có thể dùng công cụ ssh để login vào máy ảo hoặc dùng câu lệnh:

$ vagrant ssh

Vagrantfile

Vagrantfile là file định nghĩa những gì cần thiết để khởi động máy ảo. Bạn có thể tùy chỉnh những thay đổi trong Vagrantfile để có được máy ảo như mong muốn.

Đây là cấu hình cơ bản nhất của Vagrantfile. Trong đó, bạn có thể thay đổi OS (linux, fedora, CentOS, window) nếu muốn chỉ cần thay đổi cấu hình tại config.vm.box_url.

Cấu hình network cho máy ảo:

#setting ipaddress for VM
config.vm.network :private_network, ip: "192.168.33.10"

#forward port
config.vm.network :forwarded_port, quest: 80, host: 8080

Với cấu hình này, bạn có thể truy cập trên browser từ máy PC tại: http://192.168.33.10:8080

Cấu hình đồng bộ thư mục giữa máy ảo và window:

#sync folder
config.vm.synced_folder "./app", "/var/www/html", type: "nfs"
config.vm.synced_folder "./log", "/var/log/apache2", type: "nfs"

Bạn có thể tiến hành đồng bộ nhiều thư mục giữa máy ảo và window.

config.vm.synced_folder "./app", "/var/www/html", type: "nfs" là đồng bộ ứng dụng trên window của bạn với máy ảo.

config.vm.synced_folder "./log", "/var/log/apache2", type: "nfs" là đồng bộ thư mục log của apache2 trên máy ảo với window, giúp bạn khỏi phải truy cập vào máy ảo mà vẫn có thể xem được log.

Cấu hình hostname và đăng ký hostname vào file host của window:

Ở trên có nghĩa là bạn tạo một hostname cho máy ảo là example.com và bạn đăng ký nó vào file host của window. Như vậy, bạn chỉ cần truy cập tại http://example.com trên browser của window.

Provisioner

Provisioners trong vagrant cho phép bạn tự động cài đặt ứng dụng và cấu hình ứng dụng trên máy ảo.

Bạn có thể chạy trực tiếp với các lệnh Bash script inline:

config.vm.provision "shell", inline: <<-SCRIPT
    #bash script
    SCRIPT

Hoặc bạn cũng có thể chạy thông qua chef_solo:

config.vm.provision :chef_solo do |chef|
   chef.cookbooks_path = ["site-cookbooks"]
   chef.add_recipe "base"      
end

The Chef Solo provisioner allows you to provision the guest using Chef, specifically with Chef Solo.

Bạn có thể tham khảo thêm tại đây

Nếu như bạn gặp cái lỗi định mệnh này sau khi chạy vagrant:

Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3`,dmode=777,fmode=777 var_www_saigonphp /var/www/saigonphp
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant`,dmode=777,fmode=777 var_www_saigonphp /var/www/saigonphp

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

Thì bạn có thể fix nó như sau: một là bạn move toàn bộ code bạn vào thư mục html của apache hoặc nginx hai là bạn phải cài plugin này với lệnh sau:

vagrant vbguest
vagrant plugin install vagrant-vbguest 

sau đó bạn chạy lệnh up và ssh lệnh như bên trên để kết nối máy ảo, sau khi login được máy ảo bạn chạy lệnh sau:

sudo ln -s /opt/VBoxGuestAdditions-4.3.10/lib/VBoxGuestAdditions /usr/lib64/VBoxGuestAdditions

Sau đó thoát ra và reload vagrant để hưởng thành quả, chú ý rằng có thể nhiều phiên bản VBoxGuestAdditions khác nhau

VI. Kết luận

Sử dụng Vagrant giúp chúng ta tiết kiệm khá nhiều thời gian cho việc phát sinh lỗi không mong muốn trong quá trình deploy ứng dụng và làm việc team.

VII. Tài liệu tham khảo