레일즈 프로젝트를 AWS EC2 인스턴스로 배포하기 위한 과정을 정리해보았다.

AWS EC2 인스턴스에 Passenger 젬을 먼저 설치 하고 Passenger 젬을 통해서 Nginx를 설치한 후 동작시키는 과정이다.

(EC2 인스턴스는 프리티어인 아마존 리눅스 t2.micro타입을 사용했다)


로컬에서 작업한 Rails 프로젝트가 Github에 미리 올려져있다고 가정한다.



1. 아마존 AWS로 들어가서 리전(서울) 선택 후 EC2를 선택




2. 좌측메뉴에 Instance 선택




3. 제일 첫번째의 Amazon Linux AMI 2016.03.3 (HVM), SSD Volume Type 선택




4. 기본 선택되어있는 프리티어인 t2.micro를 선택 후 아래 Review and Launch 클릭




5. Edit security groups를 선택






6. Add Rule을 누르고 새로 생긴거에 Type을 HTTP를 선택. Port Ramge가 80포트인걸 확인하고 다시 아래의 Review and Launch를 눌러 돌아감.





7. Luanch 클릭. 그러면 키페어 선택창이 뜸






8. create new key pair 선택 후 key이름 설정해줌. 나는 key_cherry 이렇게 했음. 그 후 Download key pair로 .pem파일을 받음.





9. Launch instance 누르고 나서 View instance도 눌러줌. 그럼 처음 Instance 눌렀던 화면이 뜸. 



10. 이름이 없으니 name도 지어주자. cherry_election으로 했음. 인스턴스를 구분하기 위한 이름으로 없어도 상관은 없음.

초기화하는데 시간이 걸림. 끝나면 Instance state와 Status Check가 running / 2/2 checks passed 라고 됨. 서버에 접속하기 위해 Public IP를 확인 해 둘 것.



(맥의 경우)

11. terminal 에서 키파일 권한바꿔주고

$ chmod 400 Downloads/key_cherry.pem

그 다음 다음으로 접속

$ ssh -i Downloads/key_cherry.pem ec2-user@52.78.109.126

(아까 키파일 경로 지정해주고, 52.78.109.126는 ec2 instance의 Public IP. 각자의 public ip를 대신 쓰면 된다.)


(윈도우의 경우)

11-1. terminal대신 putty를 이용하여 원격 접속할껀데 .pem파일을 이용해 .ppk파일을 생성해 줄 필요가 있음.

http://trend21c.tistory.com/1295 참고


11-2. ec2-user 아이디로 접속 됨





12. 옵셔널이긴 한데, sudo yum update 으로 업뎃. y/n/D 나오면 y 누르고 엔터



13. $ sudo yum search git

14. $ sudo yum install git-all.noarch



15. $ git clone https://github.com/seobew/cherry_election.git

(git clone + 앞서 깃에서 작업한거에서 주소(깃에서 Clone or download 누르면 나오는 주소))



16. rvm 설치 (https://rvm.io/ 에서 가져온 명령어)

$ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3


16-1. 마저 터미널에 치기

$ \curl -sSL https://get.rvm.io | bash -s stable


16-2. 마저 터미널에 치기

$ source ~/.profile



17. 이젠 rvm이 설치된거임. rvm은 루비온 레일즈를 깔기위한 프로그램이었음. 루비 버전 2.2.5를 설치

$ rvm install 2.2.5




18. 시간 좀 걸림. 설치가 끝나면 프로젝트 폴더로 이동해서(꼭 필요한지 잘 모르겠지만)


21. bundle install 명령어를 쓰고싶지만 지금 bundle이 설치가 안된 상황. 그래서 먼저

$ gem install bundle

로 번들부터 설치하고, 이후

$ bundle install



22. 서버를 켜주는 passenger 젬을 설치

$ gem install passenger



19. nginx를 깔기 전에 비번 셋팅하고 가자(루트권한으로 작업하기 위해)

$ sudo passwd



20-0. 관리자 권한으로 passenger를 까는게 안좋다는 얘기가 있어 다른 방법으로 깔아보기

20-2번의 $ passenger-install-nginx-module 대신 

$ rvmsudo passenger-install-nginx-module --no-rdoc --no-ri

뒤의 옵션은 없어도 무방하다. (도큐먼트, api등을 깔지 않아 조금 더 빠르다고 한다)

세부적인 설치 전 설정은 아래(20-1~20-2)와 동일하다

20-1 패스워드 변경 후, 관리자권한 접속

$ su









20-2. 이제 관리자 권한에서

$ passenger-install-nginx-module

로 하면 바로 안깔림. 몇개 해결해야될 문제들이 있음.

$ sudo yum search curl

로 찾아서

$ sudo yum install libcurl-devel.x86_64

y 로 확인해주면 설치 완료

$ sudo chmod o+x "/home/ec2-user"

방금 이것도 루트로 접속한 클라우드 서버 터미널에서 입력

다음도 입력

$ sudo dd if=/dev/zero of=/swap bs=1M count=1024

$ sudo mkswap /swap

$ sudo swapon /swap

이제 다시 설치

$ passenger-install-nginx-module

루비만 선택하고 엔터 누르다가 1,2 선택에선 1번 선택

Please specify a prefix directory[/opt/nginx]: 라는 물음엔 그냥 엔터



21. 설치완료.






22. 내용 수정을 위해 vi로 작업. sudo로 해야 수정 가능.

$ sudo vi /opt/nginx/conf/nginx.conf

(vi에서 line number를 확인하기 위해 :set nu 명령어 입력했음)


22-1. 내용을 붙여넣을껀데 위치는 37번째 줄.

#gzip on;

(여기)


저 사이 (여기)에다가 다음을 복붙


server {

listen 80;

server_name example.com;

passenger_enabled on;

root /var/www/my_awesome_rails_app/public;

}


여기서 좀 수정이 필요.

example.com을 내 도메인으로(아직 도메인 없으면 상관없음)

밑에 루트 옆 경로를

   /home/ec2-user/<프로젝트 폴더명>/public;

으로 수정하고 저장 ( ex: /home/ec2-user/cherry_election/public; )


23. 이제 rake db:migrate 할껀데(배포버전의 rake 명령어는 항상 뒤에 RAILS_ENV=production를 붙여줘야 배포환경에서 적용된다. ex:migrate, drop, seed 등), 지금 젬이 덜깔려서 안될꺼임.

수정을 할 땐 여기 linux에서 하지말고 github에 수정한 코드를 올려서 pull로 내려받는 식으로 진행하는걸 권장


24. 로컬 레일즈 프로젝트에서 Gemfile에서 다음 줄을 주석 해제

gem 'therubyracer', platforms: :ruby

수정 후 bundle install


25. 그 다음 깃헙에 변경사항 올리기(c9 터미널에서 명령어 입력)

$ git status

$ git add .

$ git commit -m "gem 'therubyracer', platforms: :ruby"

$ git push origin master


26. linux에서 다시 pull (linux터미널에서)

$ git pull origin master


27. $ bundle install


28. $ rake db:migrate RAILS_ENV=production


29. $ rake secret 을 입력 후 나오는 코드를 복사해두기


30. $ cd config로 이동한 다음에 다음과 같이 입력

$ export SECRET_KEY_BASE=(여기에 아까 복붙)

이 방법이 됐어야 했는데..

안되므로 다른 방법으로 해 봄.


31. $ cd config 폴더로 이동


32. $ vi secrets.yml 로 파일 수정


33. 

production:

secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>


원래 이렇게 돼있던 자리에 <%= %> 이 구문 대신 아까 rake secret으로 생성했던 코드를 입력하기.


34. 저장 후 빠져나와서 다시 프로젝트 폴더로


35. 서버를 재시작 할껀데,

$ touch tmp/restart.txt

명령어를 쓰면 됨. 하지만 제일 처음엔 tmp디렉토리가 없다고 나오므로 만들어주기

$ mkdir tmp (처음 한번만 입력)

$ touch tmp/restart.txt (이후엔 이 명령어 만으로 재시작)


36. 이제 서버 돌아감.

http://52.78.109.126/ 으로 접속 가능.









+ Recent posts