web application을 배포할 때, FTP를 사용해서 코드를 웹서버에 덮어 씌우고 데몬을 껐다켜서 코드를 활성화시켜왔다. 이런 식으로는 코드관리를 어렵고 수정한 코드에 문제가 생기면 백업본을 찾아야 하는등 어려움이 많았다. 그래서 Git을 이용해 웹애플리케이션을 배포하는 방법을 생각해본다.
Object:
local(windows)
코드수정 --> web-server로 수정된 git정보 전송(push)
web-server(ubuntu)
수정된 코드 반영하기 위해 웹앱 재시작.
Todo :
ssh를 이용해 웹서버와 통신
server에 접속할수 있는 ssh key가 windows에 존재해야합니다. Amazon EC2를 서버로 사용할 시에 접속 private key(pem)를 처음생성되서 다운받습니다. 이 key는 putty 클라이언트를 이용해 사용하기도 하죠. 여튼 이 key를 git이 사용하겠금 해야 합니다. 윈도우용 git을 다운받으면 bash를 이용해 조작합니다. 이 bash에 홈에 보통 /c/Users/Home 이런식으로 되어있습니다. 여기에 .ssh라는 숨김 폴더가 있습니다. 이곳에 키를 보관하고 설정을해놓으면됩니다.
이렇게 되어있습니다. pem확장자로 파일명은 보안을 위해 일부러 지웠습니다. 이 파일을 이용해 ssh로 server접속이 가능합니다.
server 쪽에서는 ~/.ssh에 autholized_keys란 파일에 client의 public key를 가지고 있어 private key를 확인하고 접속시킬수 있습니다.
$ssh -i xxx.pem ubuntu@123.122.21.11
이런식으로 ssh로 server에 접속할수 있습니다. 이것이 되는지 확인하면 이제 server에 git 저장소를 만들고 그곳에 지금해놓은 것들을 넣어야합니다.
아, 이렇게 ssh를 접속하면 되는데 나중에 git으로 ssh접근을 할때는 key파일을 추가하는 옵션이 없어서 ssh 접속에 별명을 만들어놔 그 별명을 사용하면 정해놓은 곳으로 정해놓은 key로 접속할 수 있어야합니다. 그것은 ~/.ssh 폴더에 config파일을 만들어놓으면됩니다. 그러면 ssh접속할때 알아서 그 파일을 보고 별명을 찾아서 그에 맞는 옵션값을 설정합니다.
server에 저장소만들기.
git 저장소를 만드는것은 서버에서 마음드는곳에 디렉토리를 하나만들고, 저는 /opt/myproject.git에 만들게요. 그리고 그 디렉토리를 git저장소로 사용하겠다. 선포합니다.
$mkdir myproject.git
$cd myproject.git
$git init --bare
저장소로 사용되는곳은 .git으로 끝내는게 관례라네요. 이렇게 저장소를 만들어놓고 지금까지 개발하고있던 코드들을 서버로 옮깁니다. ssh의 파일전송 명령을 이용합니다.
$ scp -r gitdirectory nickname:/opt/my_project.git
이렇게 하면 서버의 /opt/git에 gitdirectory가 전송되면서 서버와 local이 같은 코드를 가지고 있게 됩니다.
local과 server와 동기화.
그렇다면 이제 local에서 clone을 만들어서 개발중인 코드를 동기화 시킬수 있습니다. local에서
$git clone nickname:/opt/git/my_project.git/gitdirectory
이렇게 명령어를 입력하면 gitdirectory라는 git remote가 웹서버인 디렉토리가 생깁니다. 이제 이곳에서 코드를 수정하고 커밋하고 푸쉬하면 서버의 gitdirectory도 같이 동기화가 됩니다.
그렇다면 다음엔 local에서 push했을때 저절로 웹서버를 껏다켜 새로운코드를 적용할수 있도록 하는것을 배워보겠습니다.
Object:
local(windows)
코드수정 --> web-server로 수정된 git정보 전송(push)
web-server(ubuntu)
수정된 코드 반영하기 위해 웹앱 재시작.
Todo :
ssh를 이용해 웹서버와 통신
server에 접속할수 있는 ssh key가 windows에 존재해야합니다. Amazon EC2를 서버로 사용할 시에 접속 private key(pem)를 처음생성되서 다운받습니다. 이 key는 putty 클라이언트를 이용해 사용하기도 하죠. 여튼 이 key를 git이 사용하겠금 해야 합니다. 윈도우용 git을 다운받으면 bash를 이용해 조작합니다. 이 bash에 홈에 보통 /c/Users/Home 이런식으로 되어있습니다. 여기에 .ssh라는 숨김 폴더가 있습니다. 이곳에 키를 보관하고 설정을해놓으면됩니다.
이렇게 되어있습니다. pem확장자로 파일명은 보안을 위해 일부러 지웠습니다. 이 파일을 이용해 ssh로 server접속이 가능합니다.
server 쪽에서는 ~/.ssh에 autholized_keys란 파일에 client의 public key를 가지고 있어 private key를 확인하고 접속시킬수 있습니다.
$ssh -i xxx.pem ubuntu@123.122.21.11
아, 이렇게 ssh를 접속하면 되는데 나중에 git으로 ssh접근을 할때는 key파일을 추가하는 옵션이 없어서 ssh 접속에 별명을 만들어놔 그 별명을 사용하면 정해놓은 곳으로 정해놓은 key로 접속할 수 있어야합니다. 그것은 ~/.ssh 폴더에 config파일을 만들어놓으면됩니다. 그러면 ssh접속할때 알아서 그 파일을 보고 별명을 찾아서 그에 맞는 옵션값을 설정합니다.
이렇게 config파일에 작성해놓으면 됩니다. 그렇면
$ssh nickname
으로 간단하게 hostname에 접속가능합니다.
server에 저장소만들기.
git 저장소를 만드는것은 서버에서 마음드는곳에 디렉토리를 하나만들고, 저는 /opt/myproject.git에 만들게요. 그리고 그 디렉토리를 git저장소로 사용하겠다. 선포합니다.
$mkdir myproject.git
$cd myproject.git
$git init --bare
저장소로 사용되는곳은 .git으로 끝내는게 관례라네요. 이렇게 저장소를 만들어놓고 지금까지 개발하고있던 코드들을 서버로 옮깁니다. ssh의 파일전송 명령을 이용합니다.
$ scp -r gitdirectory nickname:/opt/my_project.git
이렇게 하면 서버의 /opt/git에 gitdirectory가 전송되면서 서버와 local이 같은 코드를 가지고 있게 됩니다.
local과 server와 동기화.
그렇다면 이제 local에서 clone을 만들어서 개발중인 코드를 동기화 시킬수 있습니다. local에서
$git clone nickname:/opt/git/my_project.git/gitdirectory
이렇게 명령어를 입력하면 gitdirectory라는 git remote가 웹서버인 디렉토리가 생깁니다. 이제 이곳에서 코드를 수정하고 커밋하고 푸쉬하면 서버의 gitdirectory도 같이 동기화가 됩니다.
그렇다면 다음엔 local에서 push했을때 저절로 웹서버를 껏다켜 새로운코드를 적용할수 있도록 하는것을 배워보겠습니다.