이제 VirtualBox를 이용하여 가상 머신을 생성하고 이 안에 운영체제를 설치하고 개발 환경을 만들 차례입니다.

vagrant 는 위의 작업을 자동화 해주는 기능을 제공하며 홈스테이드는 이 기능을 이용하여 라라벨의 개발 환경을 가상 머신에 미리 구성해 놓은 애플리케이션입니다.

 

vagrant 는 커맨드 방식으로 사용해야 하므로 시작 메뉴에서 실행을 선택하여 cmd.exe 를 입력하여 윈도의 커맨드 창을 띄워서 진행합니다.  Mac OS X 나 리눅스 사용자는 터미널을 띄우면 됩니다.

 

라라벨 box 생성

Box 는 vagrant 에서 사용할 수 있는 패키지 포맷으로 특정 목적에 맞도록 미리 생성된 가상 머신 이미지를 의미합니다.

필요한 박스를 검색하려면 vagrant 제작사의 박스 공유 페이지(https://atlas.hashicorp.com/boxes/search)에서 할 수 있습니다.

독자들의 PC내 vagrant 에 박스를 추가하려면 box add 명령어를 사용하면 됩니다. cmd.exe 에 다음 vagrant 명령어를 입력하여 라라벨 박스를 만듭니다.

vagrant box add laravel/homestead
CODE

 

가상 머신의 종류를 물어보면 1번 virtualbox 를 선택하고 엔터를 입력합니다.

다운로드가 시작되는데 꽤 오랜 시간(30분 이상)이 소요되므로 차를 한잔 하고 와도 됩니다.

설치가 완료되면 "box : Successfully addedd box 'laravel/homestead' 라는 메시지가 표시됩니다.

환경 구성

이제 가상 머신 생성과 설정은 끝났고 Homestead 로 개발 환경을 구성할 순서입니다. 윈도 사용자는 시작 메뉴에서 Git 프로그램 그룹을 찾아서 Git-Bash 를 실행하며 OS X 사용자는 터미널을 열어서 bash 쉘을 띄웁니다.

윈도 프로그램에 Git-Bash 가 없을 경우 git 설치 폴더로 이동한 후에 Git Bash.lnk 를 실행합니다.

 

cd 명령어로 homestread 프로젝트를 다운받을 경로로 이동합니다. 이 디렉터리에서 앞으로 가상 머신을 구동하고 종료하게 되며 저는 사용자 홈 디렉터리인 c:\Users\lesstif\ 폴더에서 작업을 진행하였으며 사용자의 홈 디렉터리는 ~/ 로 표현할수 있습니다.

cd ~/
CODE

윈도 사용자는 다른 경로에 홈 스테드를 다운로드할 경우 폴더 경로 구분자를 cd d:/laravel 처럼 유닉스 형식 구분자(/) 를 사용해야 하는 것에 주의하세요.

 

다운받을 경로로 이동했다면 git 으로 소스를 체크 아웃 합니다.

git clone https://github.com/laravel/homestead.git Homestead
CODE

 

이제 cd Homestead 명령으로 폴더로 이동하고 릴리스 태그를 확인하기 위해 다음 명령어를 실행합니다.

git tag -l


v4.0.1
v4.0.2
v4.0.3
v4.0.4
v4.0.5
v5.0.0
v5.0.1
CODE

마지막 버전(예: v5.0.1) 을 확인하고 해당 버전을 체크아웃합니다.

git checkout v5.0.1
CODE


checkout 이 되어 있지 않으면 다음과 같은 에러가 발생합니다.

Homestead settings file not found in C:/Users/lesstif/Homestead


이제 bash init.sh 명령어를 입력하면 사용자의 홈 디렉터리에 .homestead 폴더가 생성되고 초기 설정 파일이 생성됩니다.

 

이제 에디터로 사용자의 홈 디렉터리의 .homestead 폴더에 있는 Homestead.yaml 를 열어 봅시다.

 

IP 와 메모리 설정

먼저 맨 위를 보면 다음과 같은 내용이 있습니다.

ip: "192.168.10.10"
memory: 2048
cpus: 1
provider: virtualbox
CODE
  • ip : 가상 머신의 ip 주소으로 웹 브라우저로 테스트할 때나 가상 머신에 ssh 로 연결할 때 이 ip에 연결하면 되며 기본 값은 192.168.10.10 입니다.
  • memory : 가상  머신이 사용하는 메모리로 메가 단위이며 기본 설정은 2G입니다.
  • cpus : 가상 머신에 할당한 cpu 의 갯수로 기본 설정은 1입니다.
  • provider : 가상 머신에 연결하기 위한 vagrant provider 로 virtualbox 를 사용하고 있습니다.

 

ssh 키 쌍 설정

가상 머신에 연결할 때 사용할 ssh 키쌍을 설정하며 기본 값은 .ssh폴더내에 id_rsa(개인키) 공개키(id_rsa.pub) 파일입니다.

authorize: ~/.ssh/id_rsa.pub
keys:
    - ~/.ssh/id_rsa
CODE

 

키 쌍이 없는 독자들은 git-bash 에서 다음 명령어를 사용하여 키 쌍을 생성하면 되며 -C 옵션 뒤에는 사용자의 이메일 주소를 입력하면 됩니다.

"Enter passphrase :" 프롬프트에는 개인키를 보호할 암호를 입력하며 그냥 엔터를 치면 개인키를 암호로 보호하지 않으므로 유출될 경우 보안 문제가 발생할 수 있습니다.

 

ssh-keygen -t rsa -C "you@homestead"
CODE

 

공유 폴더 지정

folders 키워드는 가장 중요한 설정중 하나로 가상 머신과 공유할 디렉터리를 지정합니다. 기본 값인 ~/Code 는 사용자의 홈 디렉터리 밑에 Code 디렉터리를 의미하며 윈도 사용자일 경우 C:\Users\로그인명\Code 가 됩니다.

보통 Code 디렉터리가 없으므로  윈도 탐색기 또는 Mac OS 의 Finder 를 사용하여 홈 디렉터리 밑에 만들어 주어야 합니다.

map 에 설정한 디렉터리가 to 에 지정된 가상 머신의 디렉터리 경로와 매핑한다는 의미로 탐색기에서 C:\Users\로그인명\Code 에 laravel 이라는 디렉터리를 생성하면 자동으로 가상 머신의 /home/vagrant/Code/laravel 가 생성이 됩니다.

 

이 기능을 사용하여 윈도에서 에디터로 작성한 파일은 저장과 동시에 가상 머신에 반영되므로 FTP 나 git 등으로 웹 서버에 파일을 반영할 필요가 없습니다.

folders:
    - map: ~/Code
      to: /home/vagrant/Code
CODE

 

웹 사이트 설정

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public
CODE

sites 키워드는 웹 서버의 가상 호스트(Virtual Host)와 DocumentRoot 를 지정하는 중요한 키워드입니다. map 에 있는 도메인 이름으로 요청이 들어오면 to 에 있는 경로로 서비스를 하겠다는 의미입니다.

즉 브라우저에서 http://homestead.app 로 연결하면 웹 서버는 /home/vagrant/Code/Laravel/public 에 있는 컨텐츠를 서비스하게 됩니다.

homestead.app 은 DNS(Domain Name Service) 에 없으므로 웹 브라우저가 찾을 수 있도록 고정 hosts 파일에 등록해야 합니다. OS X와 리눅스는 /etc/hosts, 윈도는 C:\Windows\System32\drivers\etc\hosts 파일을 열어서 다음 내용을 추가해 줍니다. (관리자 권한이 필요합니다.)

192.168.10.10  homestead.app
CODE

 

sites 항목에서는 또 페이스북이 개발한 PHP 가상 머신인 HHVM 의 설정 여부를 지정할 수 있으며 다음과 같이 hhvm : true 를 설정하면 php-fpm 엔진대신 HHVM 을 사용하게 됩니다.

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public
	  hhvm : true
CODE

여러 개의 가상 호스트가 있을 경우 가상 호스트별로 HHVM 또는 php-fpm 사용 여부를 지정할 수 있습니다.

sites:
    - map: homestead.app
      to: /home/vagrant/Code/Laravel/public
	  hhvm : true
    - map: service2.app
      to: /home/vagrant/Code/service2/public
	  hhvm : false
CODE

 HHVM 사용시 phpinfo(); 함수를 호출하면 HipHop 이라는 문자만 출력하게 되므로 자세한 정보를 얻고 싶은 독자는 github 에서 hhvminfo.php (http://git.io/3dQYYg) 를 다운받으면 됩니다.

 

Box 구동/중지

이제 설정이 완료되었습니다. 박스를 구동하려면 먼저 Homestead 폴더로 이동합니다. 

 .homestead 폴더가 아닌 Homestead 폴더로 이동해야 합니다.

 

이제 Homestead 폴더에서 vagrant up 명령어를 사용하면 됩니다.

[c:\Users\lesstif\Homestead]vagrant up

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'laravel/homestead' is up to date...
==> default: Setting the name of the VM: homestead
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 80 => 8000 (adapter 1)
    default: 443 => 44300 (adapter 1)
    default: 3306 => 33060 (adapter 1)
    default: 5432 => 54320 (adapter 1)
    default: 22 => 2222 (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
==> default: php5-fpm start/running, process 1981
==> default: Running provisioner: shell...
    default: Running: inline script
==> default: Updating to version 1cb427ff5c0b977468643a39436f3b0a356fc8eb.
==> default:     Downloading: connection...
==> default:     Downloading: 100%
==> default: Use composer self-update --rollback to return to version b296e654eb
3e136ca6fa08fa3bcb1d4782c13f8b
==> default: Running provisioner: shell...
    default: Running: C:/Users/lesstif/AppData/Local/Temp/vagrant-shell20150429-
10164-ua31q3.sh
CODE

다음 에러가 발생하며 박스가 구동되지 않는다면 ssh 키 쌍이 생성되지 않은 것입니다. 위 항목의 ssh 키 쌍 생성 여부 및 사용자의 홈 디렉터리의 .ssh 폴더밑에 id_rsa.pub 파일이 있는지 확인해 보세요.

C:/Users/lesstif/Homestead/scripts/homestead.rb:76:in `read': No such file or directory - C:/Users/lesstif/.ssh/id_rsa.pub (Errno::ENOENT)
from D:/laravel/Homestead/scripts/homestead.rb:76:in `block in configure'
from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.7.2/plugins/kernel_v2/config/vm_provisioner.rb:72:in `call'
from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.7.2/plugins/kernel_v2/config/vm_provisioner.rb:72:in `add_config'
from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.7.2/plugins/kernel_v2/config/vm.rb:311:in `provision'
from D:/laravel/Homestead/scripts/homestead.rb:74:in `configure'
from D:/laravel/Homestead/Vagrantfile:18:in `block in <top (required)>'
from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.7.2/lib/vagrant/config/v2/loader.rb:37:in `call'

 

박스를 일시 중지하려면 vagrant suspend 명령어를 사용하면 됩니다.

[c:\Users\lesstif\Homestead]vagrant suspend
==> default: Saving VM state and suspending execution...
CODE

중지된 박스를 재개하려면 vagrant up 명령어를 사용할 수 있습니다.

[c:\Users\lesstif\Homestead]vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Checking if box 'laravel/homestead' is up to date...
==> default: Resuming suspended VM...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection refused. Retrying...
==> default: Machine booted and ready!
CODE

 

박스를 종료시키고 가상 머신을 끄려면 vagrant halt 명령어를 사용하면 됩니다.

[c:\Users\lesstif\Homestead]vagrant halt

==> default: Attempting graceful shutdown of VM...
CODE


구동/중지 스크립트

vagrant upvagrant halt 명령어는 Homestead 폴더에서 명령행 방식으로 실행해야 하므로 불편할 수 있으므로 윈도 사용자라면 다음과 같이 batch 파일을 작성하여 편리하게 사용할 수 있습니다.

독자들의 Homestead 환경에 맞게 경로를 수정한 후에 각각 vup.bat, vhalt.bat 로 저장한 후에 PATH 가 걸린 폴더에 넣어 줍니다.

vup.bat

@ECHO ON
cd /D C:\Users\lesstif\Homestead
vagrant up 
POWERSHELL

이제 cmd.exe 를 열고 임의의 경로에서 vup 명령어로 홈스테드를 구동하고 vhalt 명령어로 홈스테드를 중지할 수 있습니다.

vhalt.bat

@ECHO ON
cd /D C:\Users\lesstif\Homestead
vagrant halt
POWERSHELL

 

 

가상 머신에 ssh 연결

가상 머신에 ssh 로 연결하려면 vagrant ssh 명령어를 사용하거나 아니면 직접  ssh vagrant@192.168.10.10 에 연결하면 됩니다. ssh 개인키대신 암호를 사용할 경우 로그인 암호는 vagrant 가 됩니다. 

[c:\Users\lesstif\Homestead] vagrant ssh
 
[c:\Users\lesstif\Homestead] ssh vagrant@192.168.10.10
CODE

혹은 SecureCRT 나 putty 같은 GUI 기반의 ssh client 에 위의 로그인 정보를 설정하고 사용해도 됩니다.

이제 홈스테드 설정을 마쳤으니 데이타베이스에 연결해 보도록 하겠습니다.