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, ■ 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