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

[AWS] EC2, MEAN Stack 설정

1. AMI을 설정.
bitnami 의 MEAN STACK AMI설치.

https://aws.amazon.com/marketplace/ordering?ref=cns_srchrow&productId=8d2e2f09-c4e2-49a6-ab98-60221ebc1d35

만약 my-key.pem 파일의 권한을 주지 않았다면 sudo chmod 400 k.pem 을 줘야한다.

 

2. 아파치 종료
bitmani폴더를 기준으로 ./stack/ctlscript.sh (start|stop|restart) apache를 통해 stop 옵션으로 제거. * 몽고디비는 켜져있음.

 

3. 80 port -> node서버 port 리다이렉션

sudo iptables -A PREROUTING -t nat -i eth0 -p tcp –dport 80 -j REDIRECT –to-port 8080

sudo iptables -A PREROUTING -t nat -i eth0 -p tcp –dport 80 -j REDIRECT –to-port 8080

 

4. 권한주기.

sudo chmod 777 /home/bitnami
connect EC2 as FTPS

http://gomp.tistory.com/172

* 권한을 주면 ssh서버 설정을 다시 해야한다.

 

5. git를 통해 clone한다.
sudo git clone {repositoty path} 를 통해 앱을 가져온다.

 

6. starting node server.
forever -w start server.js & watch 옵션인 -w 를 쓰면 nodemon 기능 수행.
&기호는 백그라운드로 실행
sudo netstat -ap 를 이용해 process id를 확인하고
sudo kill psid로 없앨수 있다.

 

7. 몽고디비 비번설정.

http://wiki.bitnami.com/Components/mongoDB

mongo admin –username root –password MY_PASS

로 접속가능.

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