로컬 VM 구성하기

Jul 24, 2015 • Node.js서버강좌 - 1


video tutorial

들어가는 말

따라하면서 배우는 NGUI 유니티 게임 프로그래밍 내용 중 136페이지 이상을 차지한 내용이 네트워크 작업이었다. 네트워크 작업을 하는 환경구축이 어려울까봐 WPN-XM을 소개했다. 1 하지만 해당 환경은 windows 사용자에게만 해당하는 내용이었고 유연하지도 못했다. 이 글을 통해 쉽게 환경을 구축하도록 설명하겠다. 2


필요사항

VirtualBox3와 Vagrant4를 먼저 설치해야만 진행이 가능하다. 환경에 따라 설치 버전을 제공하므로 어렵지 않게 설치 할 수 있을 것이다.


설치방법

  1. lemp레포지토리로 이동하여 DownloadZip버튼으로 다운받거나 git으로 클론(복제)한다.
  2. 해당 폴더로 이동하여 OS 환경에 따라 명령을 입력하거나 파일을 실행한다.
OS 명령
windows startserver.bat 실행
osx 터미널에서 vagrant up 실행 5

처음 실행한다면 ubuntu 이미지를 다운받기 때문에 시간이 필요할 수 있다.

정상적으로 실행이 되었다면 터미널 창에 아래와 같은 내용이 표시되기 시작할 것이다.

Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
--(중략)--
************
==> default: 127.0.0.1                  : ok=37   changed=22   unreachable=0    failed=0

해당 내용은 마지막 줄이 가장 중요하다. failed=0인지 확인한다.


설치 확인

올바로 작동하는 확인하기 위해서는 브라우저의 주소창에 http://localhost:8080을 입력한다. 아래 그림처럼 Welcome to Nginx 메시지가 보일 것이다.

WelcomeToNginx

구성된 DB를 phpMyAdmin으로 직접 확인할 수 있다. http://localhost:8080/phpmyamin을 입력한 후 아래 표처럼 Username과 Password를 입력하면 로그인할 수 있다.

입력사항 내용
Username root
Password 1234

failed 대응

같은 환경을 구성하는 것이지만 가끔 failed=1 혹은 그 이상일 때가 있다. 이때는 어떤 조치보다도 가상 머신(Virtual Machine, VM)을 제거하고 다시 띄우는 것이 빠르다.

이 과정에서 진행되는 명령은 VM 정지, VM 제거, VM 시작이다.

  • Windows 환경 stopserver.bat –> destroyserver.bat –> startserver.bat 순으로 실행한다.

  • OSX 환경 터미널에서 vagrant halt –> vagrant destroy –> vagrant up순으로 명령 입력.

VM 제거 시 정말로 VM을 제거할 지 묻는 경우 y를 입력하면 된다.


원리 이해

가상 머신을 다음과 같이 wikipedia에서 설명한다.

가상 머신(Virtual Machine, VM)은 컴퓨팅 환경을 소프트웨어로 구현한 것, 즉 컴퓨터를 에뮬레이션하는 소프트웨어다.

즉 컴퓨터안의 컴퓨터가 VM인 것이다. VM을 실제로 작동시키는 소프트웨어가 VirtualBox다. 클릭 몇 번으로 Windows나 Linux 환경을 구성할 수 있다.

하지만 여러대의 VM을 운영하거나 혹은 같은 VM을 생성할 때 사람이 설치하면 실수할 수 있고 생산적이지 못하다. 그래서 절차에 따라서 VM을 구성해주는 Vagrant를 사용하는 것이다. Vagrant는 Vagrantfile에 나온 내용에 따라서 설치를 진행한다.

우리가 사용한 Vagrantfile을 살펴보면 아래와 같다.

    Vagrant.configure(2) do |config|
      config.vm.box = "ubuntu/trusty64"
      config.vm.hostname = "lempUbuntu"
    
      config.vm.box_check_update = false
    
      config.vm.network "forwarded_port", guest: 80, host: 8080
      config.vm.network "forwarded_port", guest: 3306, host: 6306

      config.vm.provision "shell", path: "ansible/install_lemp.sh"
    end   

config부분을 살펴보면 ubuntu/trusty64를 사용하여 lempUbuntu라고 명명된 VM을 생성하게 된다. 그리고 VM의 80번 3306번 포트를 호스트(사용된 컴퓨터)의 8080번, 6306번 포트에 연결한다. 그리고 마지막으로 ansible/install_lemp.sh파일을 실행한다.

그런데 Vagrantfile 어디에 mariadb, PHP, nginx, phpMyAdmin을 설치하는 과정은 없다. 이것은 마지막에 실행된 ansible/install_lemp.sh파일이 관장한다.

앞서서 살펴본 Vagrant가 VM을 생성하도록 한다면 Chef, Puppet, Ansible과 같은 프로그램은 VM안에 어플리케이션이나 환경을 구축하는데 사용된다. 여기서는 그중에서 Ansible을 활용했다.

Ansible은 플레이북(Playbook)이란 설정 파일을 통해서 어떤 작업을 할지 명시할 수 있다. 6 ansible/install_lemp.sh파일은 ansible을 VM내부에 설치하고 ansible/lemp_install.yml 플레이북에 따라 필요한 어플리케이션을 설치한다.


맺음말

앞서 진행한 일을 한마디로 요약하면 Vagrant로 VM을 구성하고 Ansible을 통해서 어플리케이션을 설치했다. 한번 설치할 때 해줘야하는 설정도 많고 함께 설치할 것들도 많다보니 서버 하나 띄우는 일이 꽤나 어려운 일로 받아드려질 수 있다. 하지만 Vagrant와 Ansible 등의 프로그램을 통해서 많이 편해졌다.

이 글을 통해서 서버에 관심이 생겼다면 Vagrant나 Ansible 등을 더 익혀보길 권한다. 하지만 강좌 진행을 위한 기본 환경 설정을 갖춘다는 점에서는 이걸로 족하므로 스트레스받지 않길 바란다.


  1. 소개는 했지만 실제 문서 작성을 osx 환경에서 진행하여 사용하지는 않았었다. 

  2. 사실은 책 후반부가 허술하다고 생각되어 연재되는 강좌로 만회하고자 한다. 

  3. VirtualBox는 VM을 실제로 작동시키는 소프트웨어이다. 

  4. Vagarant는 간소화된 VM관리 도구이다. VM의 생성, 변경, 삭제 등에 매우 유용하다. 

  5. control + space를 누르고 terminal혹은 터미널로 입력한다. 폴더로 이동 하려면 파인더의 해당 폴더를 터미널에 끌어다 놓으면 된다. 

  6. Vagrantfile에 직접적으로 Ansible을 사용할 수 있지만 Windows 환경에서는 올바로 작동하지 않아서 VM내부에서 실행하도록 했다.