Laravel 앱 자동 deploy

deployment
Standard

써놓고 보니 좀 웃긴 제목이다. 지금도 잊혀지지않는 십년전 그 SK 부장의 영어단어 섞어쓰기처럼 한국어도 아니고 영어도 아닌 말이 되어버렸지만, 프로그래머 세계에서 통용되는 표현이라 생각하삼. 어쨌든 오늘 이야기의 주제는, 로컬 개발 내용을 자동으로 프로덕션 서버로 deploy 시키기이다. Laravel Forge 를 사용하는 방법도 하나가 되겠지만, Laravel 을 사용하지 않는 사용자이거나, 무료로 솔루션을 찾는 사용자(= 나?)라면 dploy.io 써비스도 옵션이 될 수 있다. 단, 무료는 1개 repository 만 지원하고 그 이상을 원할 경우 한달에 15불씩 낸다. 흠. Laravel Forge 는 한달에 10불. 어쨌든. 시나리오는 아래와 같다.

나의 맥에서 GitHub 의 repository 로 “git push” 를 하면 해당 commit 내용이 DigitalOcean 에 있는 production server 로 자동 deploy 된다.

어 짱인데? 싶으면 계속 읽고, 아니면 지나쳐 주삼. 준비물은 아래와 같다.

  • GitHub 계정과 1개의 repository
  • dploy.io 계정
  • DigitalOcean 계정 (클라우드 호스팅)
  • git 으로 버젼 컨트롤 하며 작업중인 프로젝트

dploy.io 는 무료이므로 계정을 만들고 로그인을 한다. 아래는 로그인 후의 스크린 샷이다.

Screen Shot 2015-01-14 at 4.56.41 AM

아래 스크린샷 처럼, GitHub 리파지토리를 연결시켜보자. 물론 Bitbucket 사용하는 사람은 그걸로 선택해서, 원하는 리파지토리를 선택하면 된다. 연결시에는 OAuth 를 위해 GitHub 으로 이동해서 dploy.io 사용을 허락할지 물어본다. 이 단계를 마치면 해당 GitHub 의 리파지토리에 Webhook 이 자동으로 생성된다. (GitHub 의 리파지토리 Settings 메뉴를 누르고 Webhooks & Services 섭메뉴를 누르면 확인할 수 있다.)

Screen Shot 2015-01-14 at 4.58.03 AM

아래는 GitHub 리파지토리 연결이 되는 도중의 스크린샷이다.

Screen Shot 2015-01-14 at 4.58.54 AM

완료후 설정아이콘을 누르면, 자동으로 파일들을 deploy 하기 위해서 Environment 와 서버 설정을 하라는 화면이 아래처럼 나온다.

Screen Shot 2015-01-14 at 5.05.21 AM

Hosting Server 옵션으로 여러가지가 있는데, 이 글을 쓰고 있는 현재 DigitiaOcean 을 사용중이므로 이를 선택했다. 그러면 아래와 같은 화면이 나온다. 화면이 길어서 스크린샷을 2개로 나눠 올렸는데, Dropet 선택부 하단에 회색 이탤릭체로 나온 부분에 copy the key 라는 링크를 누르면 퍼블릭키가 나온다. 이 퍼블릭키를 카피해서, DigitalOcean 서버의 ~/.ssh/authorized_keys 에 추가해야만 dploy.io 가 deploy 할 서버로 SSH 연결이 가능해진다. (다시말해, 내 대신 dploy.io 가 GitHub 의 리파지토리 내용을 DigitalOcean 서버에 git pull 할 수 있게 한다.)

Screen Shot 2015-01-14 at 5.34.27 AM

Screen Shot 2015-01-14 at 5.37.50 AM

deploy할 서버의 위치등 모든 내용을 정확히 입력후, 저장하면 아래와 같이 Deploy 준비가 되었다는 메시지가 나온다.

Screen Shot 2015-01-14 at 6.17.47 AM

이제 디테일한 내용들은 각자의 환경에 맞춰 정해주면 된다. 내 경우, Post Deployment Commands 에 chown -R www-data:www-data * 을 집어넣어 파일 소유자를 일괄 변경한다. 그럼 오늘은 여기까지만. ^^