■ 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
■ Node.js

[Node.js] Failed to load c++ bson extension, using pure JS version. 에러

node를 실행하고 다음과 같은 에러가 날때가 있다.

Failed to load c++ bson extension, using pure JS version.

bson 확장자를 읽는 것을 실패했다.

이때 우리를 위한 node-gyp라는 놈을 통해 리빌딩해보자.

node-gyp rebuild

를 통해서 bson을 정상적으로 읽을수 있도록 해야한다.

Standard
■ AWS, ■ Linux, ■ Node.js

[AWS] Node.js 설치 시 유용한 링크 모음

AWS, 혹은 리눅스 시스템에 node.js를 구축하는데 유용한 사이트들을 링크하였다.

 

1. installing node.js at the linux system. (RedHat)

http://guruble.wordpress.com/2014/04/12/linux-%EC%97%90%EC%84%9C-node-js-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0/

 

2. installing node.js at the linux system. (Ubuntu)

http://blog.naver.com/sungback/90195379759

http://coolkim.tistory.com/472

 

3. connect EC2 as FTPS

http://gomp.tistory.com/172

 

4. set git at the linux system.

http://blog.naver.com/mannunt/70176286698

 

5. Total solution.

bitnami 의 MEAN STACK AMI설치.

https://aws.amazon.com/marketplace/pp/B00GXYEEA4

Standard
■ AWS, ■ Node.js

[AWS] 아마존 웹 서비스에 Node.js 서버 구축 방법

AWS에 Node.js 서버를 구축하기 위해선 여러가지 절차가 필요하다.

먼저 개략적으로 큰 플로우는

1. AMI를 통한 EC2 인스턴스 생성 (EBS 또한 생성)

2. 보안그룹을 설정. (inbound 방화벽을 기본 22포트(ssh)에서 80포트(http)를 추가한다.)

2. 인스턴스상에서 Node.js, Mongodb, imagemagick, redis, git 등을 설치한다.

3. 필요에 따라서 FTP포트를 열고 80포트를 Node.js 메인 서버의 포트로 설정한다

4. 고정IP를 할당한다. Route53을통해 도메인을 연결한다.

5. S3를 필요에 맞게 세팅하고, CloudFont를 통해 CDN을 만든다.

6. mongodb의 admin을 설정한다. 사용자 계정 및 비번등을 설정한다.

7. mongodb replica set 및 sharding을 설정한다. (이땐 여러개의 EC2인스턴스가 필요하다.) 규모에 따라서 샤딩은 하지 않을수도 있으나 replica set은 필수로 한다. 또한 이때는 EC2의 인스턴스를 같은 region내에서 available zone을 다르게 해야한다.

이상 다음과 같은 플로우를 통해 기본적인 설정을 마칠수있다.

여기서 알아야할 부분은 EBS인데 EC2연동 여부와 상관없이 과금된다는 점과, 같은 region내에서 available zone (이하 az)가 다른 경우라도 전용선으로 서로 연결이 되어있기 때문에 내부 az간 통신은 과금되지 않는다.

추가적으로 알아볼 것은 EC2인스턴스와 EBS의 관계이다.

EC2인스턴스는 말그대로 인스턴스이다. 프로그래밍으로 치면 클래스를 통해 만든 인스턴스 변수와 같다는 말이다. 이뜻은 EC2인스턴스는 휘발성으로서, 영구적인 데이터는 저장하지 않고 그대신 EBS를 통해서 저장해야한다. EBS는 Elastic Block Store란 가상 하드디스크를 의미한다.

간단히 말하면 EC2에 무엇인가 저장했다면 그것은 휘발성인 메모리에 저장한 것이고, EBS를 통해 저장했다면 EBS라는 하드디스크에 저장하여 영구적으로 보존이 가능하다는 의미이다.

다음으로 AMI이다. 이것은 Amazon Machine Image라는 것으로 말그대로 우리가 윈도우 불법 복제를 통해 ISO등으로 구울때 사용했던 것과 비슷한 맥락이라고 보면된다. 즉 AMI를 미리 세팅하고 바로 내가 원하는 EC2인스턴스를 생성할수 있다는 의미이다.

Standard