Upload
kth-
View
15.547
Download
6
Embed Size (px)
DESCRIPTION
H3 2012 발표자료 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기 -KTH 강소리
Citation preview
내 컴에선 잘 되던데?Vagrant로 서버와동일한 개발환경 꾸미기기술전략팀 | 강소리
@curioe 강소리입니다
@curioe 강소리입니다
ravash
디버깅의 6단계
디버깅의 6단계
디버깅의 6단계
디버깅의 6단계
1. 에러라고? 그럴 리 없어 ······················ 부정
디버깅의 6단계
디버깅의 6단계
1. 에러라고? 그럴 리 없어 ······················ 부정2. 내 컴에선 잘 되던데? 회피························
디버깅의 6단계
디버깅의 6단계
1. 에러라고? 그럴 리 없어 ······················ 부정2. 내 컴에선 잘 되던데? ························ 회피3. 그럴리가 없을텐데 ···························· 의심
디버깅의 6단계
디버깅의 6단계
1. 에러라고? 그럴 리 없어 ······················ 부정2. 내 컴에선 잘 되던데? ························ 회피3. 그럴리가 없을텐데 ···························· 의심4. 왜 그렇게 되었지? 분석····························
디버깅의 6단계
디버깅의 6단계
1. 에러라고? 그럴 리 없어 ······················ 부정2. 내 컴에선 잘 되던데? ························ 회피3. 그럴리가 없을텐데 ···························· 의심4. 왜 그렇게 되었지? ···························· 분석 5. 헉... 알았다! 각성···································
디버깅의 6단계
디버깅의 6단계
1. 에러라고? 그럴 리 없어 ······················ 부정2. 내 컴에선 잘 되던데? ························ 회피3. 그럴리가 없을텐데 ···························· 의심4. 왜 그렇게 되었지? ···························· 분석 5. 헉... 알았다! ··································· 각성6. 이게 어떻게 동작했던거지? @.@ 반성·········
디버깅의 6단계
디버깅의 6단계
1. 에러라고? 그럴 리 없어 ······················ 부정2. 내 컴에선 잘 되던데? ························ 회피2. 내 컴에선 잘 되던데? ························ 회피3. 그럴리가 없을텐데 ···························· 의심4. 왜 그렇게 되었지? ···························· 분석 5. 헉... 알았다! ··································· 각성6. 이게 어떻게 동작했던거지? @.@ ········· 반성
왜 내 컴에서만 잘 되는 걸까?
개발 환경 불일치
Image - http://futurist.se/gldt/page/3/
왜 내 컴에서만 잘 되는 걸까?
개발 환경 불일치
왜 내 컴에서만 잘 되는 걸까?
프로젝트마다 다 달라
Image - http://itprojectguide.blogspot.kr/2007/02/project-variation.html
해결책은 있어요
해결책은 있어요
Image - http://www.flickr.com/photos/86979666@N00/7623744678/
해결책은 가상화
해결책은 가상화
해결책은 가상화
로컬에 서버 VM 설치
Image - http://www.flickr.com/photos/catch2205/4361365020/sizes/o/in/photostream/
해결책은 가상화
해결책은 가상화
해결책은 가상화
쓰기 불편한 것은 마찬가지
로컬 가상머신을 손쉽게 빌드하자
로컬 가상머신을 손쉽게 관리하자.
개발과 실서버의 일치를 위해
개발과 실서버의 일치를 위해로컬 가상머신을 손쉽게 관리하자.
vagrant up
$ vagrant up
Vagrant를 소개합니다.
Vagrant
개발과 실서버의 일치를 위해 로컬 가상머신을 손쉽게 관리하자.
Vagrant를 소개합니다.
Vagrant
@mitchellh오픈소스 MIT 라이센스Ruby현재 1.0.5 << 1.0.0 - 2012.03.07 << 0.1.0 - 2010.03.07
Vagrant를 소개합니다.
Vagrant로 로컬에 VM 실행하기
Ubuntu VM
우분투 10.04
Vagrant로 로컬에 우분투 VM 실행하기
준비물
Vagrant로 로컬에 우분투 VM 실행하기
VirtualBox 설치
http://virtualbox.org
Vagrant로 로컬에 우분투 VM 실행하기
Vagrant 설치
http://downloads.vagrantup.com
Vagrant로 로컬에 우분투 VM 실행하기
$ vagrantUsage: vagrant [-v] [-h] command [<args>]
-v, --version Print the version and exit. -h, --help Print this help.
Available subcommands: box destroy gem halt init package provision reload resume ssh ssh-config status suspend up
Command Line Interface
GUI 없어요
Vagrant로 로컬에 우분투 VM 실행하기
lucid32 ↵@work$ vagrant box add ↵
http://files.vagrantup.com/lucid32.box@work$
미리 빌드된 우분투 10.04 가상머신 이미지
내 로컬에서의 별칭
Vagrant로 로컬에 우분투 VM 실행하기
@work$ mkdir project@work$ cd project@project$
http://files.vagrantup.com/lucid32.box
@work$ vagrant box add lucid32
Vagrant로 로컬에 우분투 VM 실행하기
@work$ mkdir project@work$ cd project
http://files.vagrantup.com/lucid32.box
@work$ vagrant box add lucid32
@project$ vagrant init lucid32@project$
방금 우분투 가상머신 별칭
Vagrant로 로컬에 우분투 VM 실행하기
@work$ mkdir project@work$ cd project
http://files.vagrantup.com/lucid32.box
@work$ vagrant box add lucid32
@project$ vagrant up@project$
@project$ vagrant init lucid32
Vagrant로 로컬에 우분투 VM 실행하기
@project$ vagrant sshLinux lucid32 2.6.32-38-generic #83-Ubuntu SMP Wed Jan 4 11:13:04 UTC 2012 i686 GNU/LinuxUbuntu 10.04.4 LTS
Welcome to Ubuntu! * Documentation: https://help.ubuntu.com/New release 'precise' available.Run 'do-release-upgrade' to upgrade to it.
Welcome to your Vagrant-built virtual machine.Last login: Fri Sep 14 07:26:29 2012 from 10.0.2.2
vagrant@lucid32:~$ Linux lucid32 2.6.32-38-generic #83-Ubuntu SMP Wed Jan 4 11:13:04 UTC 2012 i686 GNU/Linuxvagrant@lucid32:~$
uname -na
Vagrant로 로컬에 우분투 VM 실행하기
@work$ mkdir project@work$ cd project
http://files.vagrantup.com/lucid32.box
@work$ vagrant box add lucid32
@project$ vagrant up@project$
@project$ vagrant init lucid32
Vagrant 기본 지식
h3@work$ mkdir projecth3@work$ cd project
http://files.vagrantup.com/lucid32.box
@work$ vagrant box add lucid32
@project$ vagrant up@project$ vagrant init lucid32
요 명령만 알아도
충분해요.
Vagrant 기본 지식
BOX
@work$ vagrant box add <name> <url>
VM 이미지 다운로드
Vagrant 기본 지식
기본 설정을 가진 VM 템플릿 이미지
Box
Vagrant 기본 지식
메모리파일시스템네트워크
기본 설정을 가진 VM 템플릿 이미지
Box
Vagrant 기본 지식
$ vagrant box add lucid32 http://~~$ cd ~/.vagrant.d/box@$[HOME]/.vagrant.d/box$ ls -aldrwxr-xr-x Oct 31 17:07 lucid32
Ubuntu VMUbuntu Ubuntu VM
Ubuntu VM
Ubuntu VM
Ubuntu VM
Vagrant 기본 지식
box 다운로드
공식http://files.vagrantup.com/[box이름].box
- lucid32, lucid64, precise32, precise64
3rd partyhttp://vagrantbox.es
Vagrant 기본 지식
@project$ vagrant init <box-name>
Vagrantfile
Vagrant 프로젝트 설정 파일
Vagrant 기본 지식
# -*- mode: ruby -*-# vi: set ft=ruby :Vagrant::Config.run do |config| # Every Vagrant virtual environment requires a box to build off of. config.vm.box = "lucid32" # The url from where the 'config.vm.box' box will be fetched if it # doesn't already exist on the user's system. config.vm.box_url = "http://files.vagrantup.com/lucid32.box" # Forward a port from the guest to the host, which allows for outside # computers to access the VM, whereas host only networking does not. config.vm.forward_port 8080, 8088 # Share an additional folder to the guest VM. The first argument is # an identifier, the second is the path on the guest to mount the # folder, and the third is the path on the host to the actual folder. config.vm.share_folder "v-showcase", "/service", "spring-mvc-showcase" # Update Server config.vm.provision :shell do |shell| shell.inline = "apt-get update --fix-missing" endend
$ vagrant init lucid32
Vagrant로 개발 환경 구성하기
미니 개발 상황극
Vagrant로 개발 환경 구성하기
개발자 5명서버: 우분투 10.04
SW: 자바6, 메이븐2(톰캣)소스위치: /service
포트: 8080
Vagrant로 개발 환경 구성하기
우분투 ! =윈도우 2맥 2 우분투 110.04
12.04
문제 #1
서버 로컬
Vagrant로 개발 환경 구성하기
자바 1.6.0_24메이븐 2.2.1
문제 #2
서버 로컬
자바 1.7
자바 1.6.0_24메이븐 2.2.1
설치환경 문서 공유; 버전 제각각 위험
Vagrant로 개발 환경 구성하기
localhost:8080/spring-mvc-showcase
문제 #3
Address already in use
8080
Vagrant로 개발 환경 구성하기
소프트웨어 다운로드 + 설치 + 설정
문제 #4
( ) * 5
Vagrant로 개발 환경 구성하기
“Vagrant 를 사용해보자”
Vagrant로 개발 환경 구성하기
@work$ cd project@project$ lsVagrantfile@project$ vagrant up@project$
Vagrant로 개발 환경 구성하기
우분투윈도우 2맥 2 우분투 110.04
12.04
문제 #1 해결
서버 로컬Ubuntu VM
Ubuntu VM
Ubuntu VM
= =
Vagrant로 개발 환경 구성하기
@project$ git clone https://github.com/SpringSource/spring-mvc-showcase@project$@project$ lsVagrantfile spring-mvc-showcase
Vagrant로 개발 환경 구성하기
$ vagrant ssh vagrant@lucid32:~$ sudo apt-get install openjdk-6-jdkvagrant@lucid32:~$ sudo apt-get install maven2vagrant@lucid32:~$vagrant@lucid32:~$ java -versionjava version "1.6.0_24"OpenJDK Runtime Environment (IcedTea6 1.11.5) (6b24-1.11.5-0ubuntu1~10.04.2)OpenJDK Client VM (build 20.0-b12, mixed mode, sharing)vagrant@lucid32:~$vagrant@lucid32:~$ mvn -versionApache Maven 2.2.1 (rdebian-1)Java version: 1.6.0_24Java home: /usr/lib/jvm/java-6-openjdk/jreDefault locale: en_US, platform encoding: ANSI_X3.4-1968OS name: "linux" version: "2.6.32-38-generic" arch: "i386" Family: "unix"
Vagrant로 개발 환경 구성하기
$ vagrant package
Vagrant로 개발 환경 구성하기
box 공유curioe$ vagrant packagecurioe$
Vagrant로 개발 환경 구성하기
box 공유curioe$ vagrant packagecurioe$
Vagrant로 개발 환경 구성하기
box 공유curioe$ vagrant packagecurioe$
tebica$ vagrant box add newbox http://kthcorp.com/package.box
Vagrant로 개발 환경 구성하기
box 공유curioe$ vagrant packagecurioe$
tebica$ vagrant init newboxtebica$ vagrant uptebica$
tebica$ vagrant box add newbox http://kthcorp.com/package.box
Vagrant로 개발 환경 구성하기
소프트웨어 다운로드 + 설치 + 설정
문제 #2, #4 동시 해결
환경이 설치된 box 공유버전 설정 모두 동일
1명만
Vagrant로 개발 환경 구성하기
미니 개발 상황극 (계속)
“VM쓰라고?”“로그인해서 개발해야해?”“내가 쓰는 에디터 쓰고 싶은데!”
거룩한 전쟁
돌발상황
에막스 지옥! 진리의 젯브레인!이클립스 완전구려!
SublimeText 2가 대세
Vim이 최고!싸우자
구글 행아웃에서싸우자!
Vagrant로 개발 환경 구성하기
파일 동기화
config.vm.share_folder “v-data”,“/service”, “spring-mvc-showcase”
$ vagrant reload
Vagrant로 개발 환경 구성하기
파일 동기화
Host
VM
spring-mvc-showcase
service
Vagrant로 개발 환경 구성하기
에막스 지옥! 진리의 젯브레인!이클립스 완전구려!
SublimeText 2가 대세
Vim이 최고!싸우자
구글 행아웃에서싸우자!
프로젝트는 무사 진행
Vagrant로 개발 환경 구성하기
포트 포워딩
config.vm.forward_port 8080, 8088
Outside(Host(
VM(:8080( :8088(
$ vagrant reload
Vagrant로 개발 환경 구성하기
localhost:
문제 #3 해결
8080
/spring-mvc-showcase
8088
8088
Vagrant로 개발 환경 구성하기
SSH
$ vagrant ssh
$ ssh vagrant@localhost -p 2222
Outside(Host(
VM(:22( :2222(
Vagrant로 개발 환경 구성하기
$ git add Vagrantfile$ git commit -m ‘개발 환경 설정’$ git push
Vagrant로 개발 환경 구성하기
설치 환경 문서로 공유설치 환경 자체가 공유
서버 OS != 로컬 OS서버 OS == 로컬 OS
소프트웨어 버전 불일치소프트웨어 버전 전부 일치개발자마다 개발 환경 구축설치는 단 한명이!쓰고 있는 포트 충돌손쉬운 포트 포워딩
Vagrant로 개발 환경 구성하기
$ vagrant destroy
Vagrant로 개발 환경 구성하기
“사실은 더 복잡해요”
분산 환경 구성하기
Vagrant::Config.run do |config| config.vm.define :web do |web_config| web_config.vm.box = "web" web_config.vm.forward_port 80, 8080 end
config.vm.define :db do |db_config| db_config.vm.box = "db" db_config.vm.forward_port 3306, 3306 endend
Multi-VM
분산 환경 구성하기
Vagrant::Config.run do |config| config.vm.define :web do |web_config| web_config.vm.box = "web" web_config.vm.forward_port 80, 8080 end
config.vm.define :db do |db_config| db_config.vm.box = "db" db_config.vm.forward_port 3306, 3306
endend
Host-Only 네트워킹
web_config.vm.network :hostonly, "10.11.12.13"
db_config.vm.network :hostonly, "10.11.12.14"
Vagrant 사용
일반적인 사용법
1. box 는 사내 웹서버에 업로드
2. 프로젝트 내에 Vagrantfile을 포함
3. Vagrant 사용
$ git add Vagrantfile$ git commit -m ‘개발 환경 설정’
$ vagrant box add ~
$ vagrant up
Vagrant 사용
facebook/tornado
https://github.com/facebook/tornado/blob/master/maint/vm/ubuntu10.04/Vagrantfile
프로비저닝
조금 아쉬워요
소프트웨어 버전 업데이트box는 이미 배포 완료
프로비저닝
프로비저닝
Image - http://www.scalarium.com/features/automation/
프로비저닝
프로비저닝
config.vm.provision :{provisioner}
puppetchefshell
Chef 프로비저닝
Chef Server 프로비저닝
Chef 프로비저닝
Chef Server 프로비저닝
VM
Chef 프로비저닝
Chef Server 프로비저닝config.vm.provision :chef_client do |chef| chef.chef_server_url = "http://cocina.kthcorp.com" chef.validation_key_path = "chef/validation.pem" chef.run_list = ["role[baas]"]end
Chef 프로비저닝
“Chef 서버 없어도 실망 마세요~”
Chef Solo 프로비저닝
Chef 프로비저닝
VM
Chef 프로비저닝
Chef Solo 프로비저닝
https://github.com/curioe/vagrant_sample
!"" cookbooks #"" apache2 #"" apt #"" php !"" php_sample
config.vm.provision :chef_solo do |chef| chef.cookbooks_path = "cookbooks" chef.add_recipe "php_sample"end
Chef 프로비저닝
Vagrant로 VM을 관리하자
Vagrant
개발과 실서버의 일치를 위해 로컬 가상머신을 손쉽게 관리하자.
vagrant up
프로젝트를 새로 시작할 때
vagrant up
$ vagrant up$ vagrant up$ vagrant up
vagrant up
프로젝트에 새 동료가 참여할 때
vagrant up
$ vagrant up$ vagrant up$ vagrant up
vagrant up
서버와 동일한개발 환경을 꾸미기 위해
vagrant up
$ vagrant up$ vagrant up$ vagrant up
고마워요, 레퍼런스
레퍼런스https://speakerdeck.com/mitchellh/develop-and-test-configuration-management-scripts-with-vagrant
https://speakerdeck.com/u/lewg/p/consistent-local-development-with-vagrant-and-chef