Vargrant

Giới thiệu về Vagrant

Vagrant là một công cụ giúp chúng ta tạo ra các môi trường một cách dễ dàng bằng các cấu hình. Việc tạo ra các máy ảo, cài đặt web server thậm chí cấu hình mạng, chưa bao giờ trở nên dễ dàng như thế chỉ với một vài câu lệnh. Sau đó, chúng ta có thể chia sẻ các cấu hình này và bất kỳ ai cũng có thể có được một máy ảo y hệt như máy bạn đã cài đặt.

Cài đặt Vagrant

  • Bước 1: download Vagrant tại https://www.vagrantup.com/downloads.html. Tùy vào bạn đang chạy hệ điều hành nào mà chọn phiên bản phù hợp.

  • Bước 2: Sau khi download xong thì cài đặt nó. Chú ý là nó sẽ tự động cài VirtualBox luôn nếu máy mình chưa cài. Cần phải có Virtual Box nhé.

Tạo máy ảo dùng Vagrant

  • Bước 1: Tạo một folder để chứa máy ảo cần tạo. Ví dụ: vagrantdemo
  • Bước 2: Gõ lệnh vagrant init hashicorp/precise32 . Lệnh vagrant init sẽ tạo ra một file Vagrantfile mà chúng ta sẽ dùng nó để cấu hình môi trường. Thông số hashicorp/precise32 là tên máy ảo mà chúng ta sẽ tạo. Cụ thể, nó là Ubuntu 12.04 LTS 32-bit.
$ vagrant init hashicorp/precise32
  • Bước 3: Gõ lệnh vagrant up. Lệnh này sẽ kiểm tra xem chúng ta đã có box hashicorp/precise32 chưa, nếu chưa nó sẽ down từ vagrant cloud về. Sau đó, nó sẽ tạo máy ảo từ box đó. Box ở đây có thể hiểu như là một sandbox, tất cả máy ảo tạo ra đều sẽ lấy từ box này, điều này đảm bảo là chúng ta luôn có một ‘read only’ image giống nhau cho tất cả các máy ảo.
$ vagrant up
  • Bước 4: Login vào máy ảo bằng lệnh vagrant ssh
$ vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)

 * Documentation:  https://help.ubuntu.com/
New release '14.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

 Welcome to your Vagrant-built virtual machine.
Last login: Fri March 27 8:22:31 2015 from 192.168.1.81

Cài đặt Apache dùng Vagrant

Sau khi đã có thể login vào máy ảo rồi. Chúng ta có thể cài đặt Apache vào máy ảo này như bình thường. Tuy nhiên, cách đó không thú vị bằng cách chúng ta gõ lệnh trong file cấu hình, rồi để cho vagrant làm thay cho ta. Để cài đặt Apache dùng Vagrant, theo các bước sau:

  • Bước 1: Tạo một file boot.sh như bên dưới. Lưu ý là lưu file boot.sh này ở cùng thư mục của Vagrantfile nhé.
#!/usr/bin/env bash
apt-get update
apt-get install -y apache2
if ! [ -L /var/www ]; then
    rm -rf /var/www
    ln -fs /vagrant /var/www
fi
  • Bước 2: Mở file Vagrantfile và chỉnh lại như sau
Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/precise32"
  config.vm.provision :shell, path: "boot.sh"
end
  • Bước 3: Gõ lệnh vagrant up, vagrant sẽ đọc file cấu hình này và cài apache cho chúng ta. Lưu ý là nếu máy ảo đang chạy rồi, thì chúng ta dùng lệnh vagrant reload –provision nhé
$ vagrant up
hoặc
$ vagrant reload --provision
  • Bước 4: Login vào máy ảo dùng SSH và kiểm tra xem Apache có hoạt động không bằng lệnh wget. Nếu ta thấy nội dung website hiển thị lên nghĩa là đã cài xong Apache.
$ vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)

 * Documentation:  https://help.ubuntu.com/
New release '14.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

 Welcome to your Vagrant-built virtual machine.
Last login: Fri March 27 8:25:31 2015 from 192.168.1.81
vagrant@precise32:~$ wget -qO- 127.0.0.1

Shared folder

Có một điều khá thú vị là thư mục vagrantdemo lúc nãy chúng ta tạo ra nó sẽ được sync với thư mục trong máy ảo. Ví dụ nếu ta tạo ra 1 thư mục mới là test, sau đó, login vào máy ảo dùng SSH, ta sẽ thấy thư mục đó trong máy ảo ở đường dẫn /vagrant/test

$ mkdir test
$ vagrant ssh
Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic-pae i686)

 * Documentation:  https://help.ubuntu.com/
New release '14.04.1 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

 Welcome to your Vagrant-built virtual machine.
Last login: Fri March 27 8:27:31 2015 from 192.168.1.81
vagrant@precise32:~$ cd /vagrant
vagrant@precise32:/vagrant$ ll
total 7
drwxrwxrwx  1 vagrant vagrant    0 Dec 26 09:14 ./
drwxr-xr-x 23 root    root    4096 Dec 26 08:44 ../
drwxrwxrwx  1 vagrant vagrant    0 Dec 26 09:14 test/
drwxrwxrwx  1 vagrant vagrant    0 Dec 26 08:43 .vagrant/
-rwxrwxrwx  1 vagrant vagrant 3071 Dec 26 08:36 Vagrantfile*
vagrant@precise32:/vagrant$