■ AWS, ■ Linux

[AWS] 아마존 웹 서비스에 Dokku (Mini Heroku)를 배포해보자! pt.2 (3)

이제 해당 앱을 새로운 도메인에 연결해 보겠습니다.

그러기 위해선 도메인관련 플러그인을 다시 설치해야합니다.

즉 test.ranking.com -> mydomain.com 으로 연결하는 과정입니다.

https://github.com/wmluke/dokku-domains-plugin

이번엔 도메인플러그인을 설치합니다. 즉 서브도메인과 새로운 도메인을 매핑하는 역할을 하는 플러그인입니다.

 

 

1

 

설치를 완료하면 아래와 같이 domains라는 새로운 명령어가 추가됩니다.

사용법은 간단합니다.

sudo dokku domains:set test mydomain.com mydomain2.com

이런식으로 적어주면 됩니다. 위와같이 여러개의 도메인도 띄어쓰기를 통해 설정할 수 있습니다.

그리고 dnsimple.com같은 dns 관련 서비스 업체에 ALIAS를 통해서 연결시킬수 있습니다.

Standard
aws
■ AWS, ■ Linux

[AWS] 아마존 웹 서비스에 Dokku (Mini Heroku)를 배포해보자! pt.2 (2)

이번엔 dokku plugin을 통해서 mongodb를 설치해보도록 하겠습니다.

https://github.com/progrium/dokku/wiki/Plugins

에 들어가면 dokku와 연동되는 플러그인 목록이 있습니다.

https://github.com/jeffutter/dokku-mongodb-plugin

그중 위 주소로 되어 있는 몽고디비를 설치해보도록 하겠습니다.

 

 

2

 

다음과 같이 git mongodb를 클론합니다.

그리고 sudo dokku plugins-install 명령어를 통해 git에 클론한 mongodb를 설치합니다.

 

3

 

 

좀 오래 기다리면 다음처럼 프로그램이 설치됩니다.

 

4

 

몽고디비가 성공적으로 설치되었습니다.

그럼 이제 몽고디비가 dokku plugin으로 성공적으로 설치되었는지 확인해 보겠습니다.

 

5

 

mongodb명령이 새로 생긴 것을 볼 수 있습니다.

이제 docker ps 명령어를 통해서 실행하고 있는 컨테이너를 확인합니다.

근데 아래와 같이 mongodb는 꺼져있는 것을 확인할 수 있습니다. 그럼 mongodb:start를 통해 다시 시작시킵니다.

6
아래와 같이 새로운 몽고디비 컨테이너가 만들어진 것을 확인할 수 있습니다.

 

7

현재 앱은 production모드에 설정값이 최적화 되어있기 때문에 노드 환경을 production으로 바꾸어 줍니다.

8

 

이제 mongodb명령을 통해 디비를 만들어 보도록 하겠습니다.
위에서 보면 mongodb:create <app> <database>를 통해 만들수 있다고 나와있습니다.

9

 

그럼 아래와 같은 성공했다는 문구가 나옵니다.

 

10

 

디비이름은 앞에서 설정한 이름에 노드 환경이 붙습니다.

그리고 몽고디비를 현재 앱과 연결시킵니다.

11

 

process.env.MONGO_URL

이제 위와 같은 몽고디비를 노드의 환경변수 값을 참조해서 사용할 수 있습니다.

다음으로는 레디스 캐시 디비를 설치해보도록 하겠습니다.

https://github.com/luxifer/dokku-redis-plugin

레디스플러그인은 여러개가 있는데 저는 해당 플러그인을 설치해보도록 하겠습니다.

몽고디비 설치와 매우 흡사합니다. 먼저 git를 clone해서 플러그인을 받아야합니다.

이하 설명은 생략하도록 하겠습니다.

Standard
■ AWS, ■ Linux, ■ MongoDB, ■ Node.js

[AWS] 아마존 웹 서비스에 Dokku (Mini Heroku)를 배포해보자! pt.2 (1)

이제 Dokku를 설치했으니 실제 배포를 해보겠습니다.

여기선 node.js를 배포해보도록 하겠습니다. express 나 기타 node.js server를 생성합니다.

이후 터미널을 통해 해당 app.js가 있는 폴더로 들어옵니다. 그리고 아래와 같이 git를 이용해서 remote를 추가시켜줍니다.

여기서 remote의 의미는 해당 git 데이터들을 push할때 올릴 remote server를 의미합니다.

git remote add dokku dokku@<도쿠_서버_주소>:<앱_이름>

이제 git를 통해 업로드를 해보도록 하겠습니다.

 

12

 

 

이제 업로드가 된줄..알았지만 Invalid namespace name (app) 이라는 메세지와 함께 업로드가 거부됩니다. 이유는 dokku의 진짜 실체인 docker버전 때문입니다. docker버전이 업데이트 되면서 최소 4자 이상, 30자 이내의 이름만 사용할수 있게 되기 때문에 app이란 container를 만들수가 없게 됩니다.

 

https://github.com/progrium/dokku/issues/533

해당 경로로 들어가게 되면 이러한 이슈에 대한 해결책이 나와있습니다. 여기서는 docker를 다운그래이드 하도록 하겠습니다.

sudo apt-get remove --purge lxc-docker
sudo apt-get install lxc-docker-0.9.0

위 두명령어를 통해 현재 버전의 docker를 지우고 0.9.0버전의 docker를 설치합니다.

다음으로 아까 실패했던 배포를 다시 시도해 보도록 하겠습니다.

13

 

보는 바와 같이 업로드후 디플로이까지 성공적으로 마쳤습니다.

이제 커맨드보단 우리가 보기 편한 SourceTree를 통해 GUI git를 이용해 보도록 하겠습니다.

위 이미지를 보면 dokku@rankting.com:test 와같은 이름으로 git의 주소가나와있습니다.

해당 주소를 통해 소스트리에서 clone시키면 됩니다.

 

14

이제 기존의 폴더 대신 소스트리에 연결된 워킹카피를 이용하시면됩니다.

다시 ubuntu서버로 돌아와서 다음과 같이 입력해서 실제 container가 잘만들어지고 실행되는지 확인해봅니다.

15

 

보면 49153 -> 5000 으로 리다이렉트 되고 있습니다.

즉 실제 test의 node어플리케이션은 49153포트를 가진다는 것을 알수 있습니다. (맨 앞에는  nginx가 80포트로 자리잡고 해당 서브도메인에 맞도록 라디이렉트 시켜주고 있습니다. 즉 프록시의 역할을 하고 있습니다.)

이제 접속을 시도해 보지만 접속이 되지 않습니다. (현재 노드앱은 자체 mongodb, redis서버의 주소로 접속을 시도하고 있는 앱입니다.)

16

 

따라서 help를 확인해서 logs라는 명령어를 알아낼수 있습니다.

이제 log를 확인해서 어떤 문제가 있는지 보도록 하겠습니다.

 

17

역시나 몽고디비 접속이 되지않고 있습니다.

다음 포스팅에선 dokku plugin을 통해 mongodb와 redis를 연결시켜 보도록 하겠습니다.

Standard
aws
■ AWS

[AWS] 아마존 웹 서비스에 Dokku (Mini Heroku)를 설치해보자! pt. 1 (3)

이제 도메인 연결을 통해서 고정ip로 접속하는 것이 아닌 우리가 보기 쉬운 도메인으로 접속하도록 만들어 보겠습니다.

따라서 도메인설정을 위해서 AWS의 서비스중 Route53을 이용해 보도록 하겠습니다.

이번엔 대시보드에서 Route53을 선택합니다.

 

18

 

 

이어 Hosted Zones를 선택합니다.

 

19

 

해당 서비스로 들어오게 되면 Create Hosted Zone 버튼이 있습니다. 해당 버튼을 이용해서 IP <-> mydomain.com 과 연결시켜 보도록 하겠습니다.

20

 

그럼 이제 rankting.com (mydomain.com)이라는 Hosted Zone으로 들어올 수 있습니다. 이어서 Create Record Set이라는 버튼을 통해서 레코드를 만들어보겠습니다. 여기서 만들 레코드는 A레코드란 것입니다. 이것은 해당 도메인을 통해 아이피를 반환하는 레코드입니다.

21

 

아래 54.199.164.57 이라는 Elastic IP (고정IP)와 rankting.com을 연결합니다. 또한 subdomain을 *로도 연결시킵니다.

 

22

이제 rankting.com으로 접속하면 54.199.164.57로 접속이…될까요?

 

아닙니다.. 아직 접속은 되지 않습니다. 그것은 rankting.com을 구입한 registrar에 Route53을 등록해주어야 최종 접속이 완료된 것입니다.

위 그림에서 보면 Route53의 NS는

ns-1769.awsdns-29.co.uk.
ns-36.awsdns-04.com.
ns-1296.awsdns-34.org.
ns-962.awsdns-56.net.

이렇게 4가지로 나와있습니다. 해당 registrar에 위 주소를 입력하면 됩니다.

하루이틀 있으면 해당 도메인이 연결될 것입니다.

다음으로는 Dokku가 rankting.com이라는 도메인을 알아야 합니다. 즉 Dokku에 원하는 도메인이 연결되도록 설정해 보도록 하겠습니다.

앞서 Dokku설치확인을 위해

/home/dokku 라는 폴더로 들어갔었습니다. 해당 폴더안에는 VHOST, HOSTNAME등의 파일이 있을 것입니다. 이 파일들의 내용을 변경해주면 됩니다.

VHOST, HOSTNAME두 파일에 vi 혹은 cat 리다이렉션을 통해서 rankting.com 이라고 입력해줍니다.

23

이런식으로 sudo 를 통해 권한을 가지고 수정합니다.

다음으로 서버와 클라이언트의 인증을 동기화 시키도록 하겠습니다. 앞에서 ssh프로그램을 통해서 EC2에 접속했었습니다. 하지만 배포할때 git를 이용하기 때문에 인증시 해당 pem파일이 없이도 접속이 가능해야 합니다.

cat ~/.ssh/id_rsa.pub | ssh -i <pem파일받은경로>/<pem파일이름.pem> ubuntu@rankting.com “sudo sshcommand acl-add dokku progrium”

이런식으로 입력해줍니다. 중요한 것은 이것은 현재 클라이언트(ubuntu서버가 아님)에 있는 공개키를 ssh와 pem파일을 통한 인증을 통해서 해당 서버가 앞으로 접속할 클라이언트를 알게 하고 인증이 되었다는 것을 말해주기 위함입니다. 마지막으로 해당 dokku와 클라이언트의 인증이 잘 동기화 되었는지 확인합니다.

ssh dokku@rankting.com

24

위와 같이 접속후 바로 닫혀버리면 성공한 것입니다.

다음으로는 실제 Dokku에 배포를 해보도록 하겠습니다.

Standard
aws
■ AWS, ■ Linux

[AWS] 아마존 웹 서비스에 Dokku (Mini Heroku)를 설치해보자! pt.1 (2)

지난 시간에는 AWS에 EC2 인스턴스생성과 Elastic IP주소를 할당하였습니다.

이번에는 실질적으로 Linux 서버에 Dokku를 설치해보도록 하겠습니다.

Dokku를 설치하기에 앞서 기본적인 소개를 하자면 Dokku는 Docker라는 가상화 기술을 활용하여 만든 PaaS 구축 서비스 입니다. 따라서 EC2 같은  IaaS에 PaaS를 구축할 수 있도록 해준다고 보면 됩니다.

그럼 IaaS에서 PaaS로 거듭나보도록 하겠습니다.

먼저 ssh를 통해서 EC2에 접속합니다.

다운받은 pem파일을 참조해야 합니다. 이때 pem 파일의 권한을 설정해 주셔야 합니다.

$ chmod 400 <다운받은경로>/<pem파일>

 

다음으로 ssh접속을 합니다.

$ ssh -i <다운받은경로>/<pem파일> ubuntu@<Elastic IP>

 

만일 known_hosts에 등록이 안되어있다면 등록할 것인지 물어볼 것입니다. 그럼 그대로 등록하시고 접속하면 됩니다.

성공적으로 접속이 되었다면 이제 Dokku를 설치해 보도록 하겠습니다.

$ wget -qO- https://raw.github.com/progrium/dokku/v0.2.1/bootstrap.sh | sudo DOKKU_TAG=v0.2.1 bash

 

다음처럼 wget을 통해서 dokku의 bootstrap 쉘스크립트를 다운받고 DOKKU_TAG를 0.2.1로 설정하여 최신버전의 Dokku를 설치합니다.

25

 

자 이렇게 설치가 되고있습니다. 그런데 아래처럼 설치가 중간에 되다 마는군요.

26

 

setting up git, setting up make에서 진행이 되지 않았습니다. 왜그럴까 고심했는데 한번더 설치시 했던 명령어를 쳐주면 잘 되는군요. (14.04버전 기준입니다.)

$ wget -qO- https://raw.github.com/progrium/dokku/v0.2.1/bootstrap.sh | sudo DOKKU_TAG=v0.2.1 bash

 

이렇게 다시한번 쳐주면 정상적으로 설치가 완료됩니다. 대략 5분여 정도 걸립니다.

27

 

그럼 실제 잘 설치가 되었는지 확인해보겠습니다.

28

 

현재 경로 (wget을 통해 dokku를 설치한 현재경로)에 보시면 다운받은 dokku가 보입니다. 해당 파일의 bootstrap.sh를 통해 설치를 한 것입니다.

다시 $home으로 가서 보면 dokku가 설치되어있습니다. 해당 폴더에 들어가면 VHOST, HOSTNAME, VERSION등의 파일이 나옵니다. 또한 이 폴더에 각 프로젝트가 올라오게 될 것입니다.

다음 장에선 Route53을 통해 도메인관련 세팅을 완료 후 VHOST, HOSTNAME를 통해 도메인 설정을 해보도록 하겠습니다.

Standard
■ AWS, ■ Linux

[AWS] 아마존 웹 서비스에 Dokku (Mini Heroku)를 설치해보자! pt.1 (1)

슬로그업에선 주로 MEAN Stack 기술을 가지고 개발을 하고 있습니다.

특히 Node.js PaaS는 여러 유명한 서비스들이 있지만 그중 Heroku를 많이 사용하고 있습니다.

하지만 무료버전은 1시간이 지나면 서버가 죽고, 새로운 inbound가 생길때 다시 서버를 연결하여 접속하기 때문에 꽤 불편합니다.

더욱이 가장 큰 문제는 현재 슬로그업에서 개발중인 서비스는 국내용이기 때문에 국내서버가 필요하지만 heroku는 아시아쪽은 지원하지 않고 있습니다.

(또한 mongoHQ, RedisToGo 같은 데이터베이스 서비스도 마찬가지 입니다.)

따라서 AWS EC2, 그중 Tokyo에 서비스를 하는 방향으로 결정하였습니다.

그러나 Heroku의 simple함에 익숙해져 있던 터라 Ec2와 같은 IaaS는 PaaS를 따라갈수 없었습니다.

결국 Dokku를 이용하여 Mini Heroku의 구축을 결심하게 됩니다. (실제 Dokku개발자 또한 Dokku를 Mini-Heroku라고 소개하고 있습니다.)

현재  AWS에서는 1년간 가장낮은 사양의 서버 이지만 충분히 개발에 무리가 없는 EC2 서버나 S3버켓등을 무료로 제공해 주고 있습니다.

먼저 무료 EC2 인스턴스를 이용하여 설치를 진행해 볼 것입니다.

 

먼저 http://aws.amazon.com에 접속 후 로그인 합니다.

이후 https://console.aws.amazon.com 개발자 콘솔에 들어간후 EC2를 선택합니다.

그럼 아래와 같은 EC2 대시보드가 뜰것입니다. 그리고 가운데 보이는 Launch Instance를 눌러 EC2인스턴스를 만듭니다.

30

 

기본적으로 Dokku는 Ubuntu 환경에서 작동합니다. 또한 14.04 버전을 추천하고 있기 때문에 Ubuntu Server 14.04 LTS 버전을 선택합니다.

31

 

 

다음으로 General purpose t2.micro (Free tier eligible) 인스턴스를 선택합니다. 더 높은 사양의 서버를 원하시면 각 region 및 type별 금액과 사양을 비교해 보시고 선택하시면 됩니다.

32

 

이후 모든 세팅값을을 기본으로 두고 Next버튼을 누릅니다.

이때 Step4에 있는 Add Storage에 Volume Type을 General Purpose(SSD)로 선택합니다. Provisioned IOPS(SSD)의 경우 IOPS를 보장하는 Volume인데 추가 비용이 들어갑니다. (IOPS는 참고로 Input/output Operations Per Second를 의미하며 초당 IO의 액세스 수를 의미합니다. 보통 70~200사이의 IOPS가 나옵니다.)

33

 

다음으로 Security Group을 설정해야합니다. 이후에 Mongodb, redis port등을 오픈할 것이므로  ssh, http, all Tcp 등을 추가합니다. (source는 모두 anywhere로 선택합니다, 보안상 문제가 있을수 있기 때문에 실제 live시에는 필요한 포트만 설정해야합니다.)

34

 

다음으로는 Key Pair설정이 필요합니다. ssh로 접근할때 인증의 수단이 됩니다. EC2에서는 아이디 비밀번호 대신 저런 key pair형태 (공개키방식)로 제공하기 때문에 다운받은  pem파일이 없어지면 해당 인스턴스는 더이상 접근이 불가능 합니다.

 

35

이제 마지막으로 Launch버튼을 눌러 instance를 활성화 시킵니다.

 

 

간단하게 EC2인스턴스를 생성하였습니다.

이제 Elastic IP를 지정하여 고정 IP를 할당하도록 하겠습니다.

EC2메뉴중 왼편의 NETWORK & SECURITY에 들어가면 Elastic IPs가 보입니다.

 

36

 

이후에 Allocate new Address를 선택하고 IP를 만든 후 Associate Address를 통해 방금 만든 인스턴스에 연결시킵니다. (여기서 Elastic IP가 어느 인스턴스에도 Associate되지 않았다면 추가 금액이 발생합니다.)

 

37

이제 기본 스트레칭은 끝났습니다. 다음장에서 본격적으로 Dokku를 설치해 보도록 하겠습니다.

 

Standard