Amazon Web Services에 접속하여 회원 가입을 한다.
- 회원 가입을 할 때, 해외 결제가 되는 카드가 필요하다.
- 카드 등록 시 결제되는 1달러는 카드가 유효한지 검사하는 가결제이므로 곧 환불 처리 된다.
- 본인의 GitHub에 프로젝트 Repository가 있어야 한다.
- 개인 프로젝트가 없는 사람은 fake_insta를 fork 해서 사용하자.
각종 중요한 정보들이 외부에 노출되지 않도록 관리해주는 gem이 figaro이다.
Gemfile에 figaro를 추가한다.
gem 'figaro'
bundle install
명령어로 gem을 설치한다.
$ bundle install
아래의 명령어를 입력하여 figaro를 설치한다.
$ bundle exec figaro install
설치가 완료되면 config
폴더 안에 application.yml
파일이 생성된 것을 확인할 수 있다.
Lightsail을 검색하거나 '컴퓨팅' 항목에서 Lightsail을 찾는다.
Lightsail 인스턴스를 생성한다.
설정은 다음과 같이 한다.
- 인스턴스 위치가
도쿄, 영역 A (ap-northeast-1a)
로 되어 있는지 확인한다. 아니라면리전 및 영역 변경
을 통하여 설정한다. - 인스턴스 이미즈는
Linux/Unix
>OS 전용
>Ubuntu
로 지정한다. - 다른 항목은 그대로 두고 아래쪽의 생성 버튼을 클릭한다.
다음과 같이 대기중으로 표시되었다가, 실행 중으로 변경되면 인스턴스가 생성이 완료된 것이다.
생성된 인스턴스의 우측 상단에 터미널(console) 모양의 아이콘을 클릭하면, 생성한 인스턴스에 접속(ssh)할 수 있다.
- 인스턴스를 생성한 순간부터 과금이 될 수 있다. 과금 유의사항을 항상 자세히 읽어보기를 권장하며, 사용하지 않을 인스턴스는 바로 삭제를 해주는 것이 좋다.
git clone
명령어로 Auto Server Setup Script를 가져온다. 지금 보고 있는 이 문서의 repository에 포함되어 있다.
$ git clone https://github.com/zzulu/yay-you-are-on-aws.git
실행에 앞서 편의를 위하여 현재 폴더를 변경하자.
$ cd ~/yay-you-are-on-aws
서버 설정을 매우 편리하게 해주기 위하여 script를 작성하였다. 아까 받은 Script를 실행하면 모든 설정이 자동으로 될 것이다. sh
명령어를 사용하여 실행해보자. 우선 rbenv.sh
먼저.
$ sh ./scripts/rbenv.sh
rbenv.sh
에서 많은 것들을 설치하였는데, 그것들을 사용하기 위하여 shell을 refresh 해주자. 가끔 프로그램을 설치하고 컴퓨터를 재부팅 해주는 것과 같은 이유이다.
$ exec $SHELL
rbenv.sh
를 통해 우리는 Rails 설치 및 실행에 필요한 모든 프로그램과 rbenv
를 설치해주었다. Ruby의 경우 rbenv를 통해 직접 설치해주어야 한다.
$ rbenv install 2.3.5
$ rbenv global 2.3.5
$ gem install bundler
$ rbenv rehash
마지막으로 rails까지 설치를 완료하자.
$ gem install rails -v 4.2.9
Web Server인 Nginx와 Application Server인 Passenger를 설치하는 script를 실행하자.
$ sh ./scripts/nginx.sh
1. 사용할 프로젝트 선택
에서 선택한 프로젝트를 Lightsail Instance로 가져온다. 여기서는 classtak의 fake_insta를 가져오지만 각자 개인의 프로젝트를 가져와도 된다.
$ cd ~
$ git clone https://github.com/classtak/fake_insta.git
$ sudo vi /etc/nginx/passenger.conf
passenger_ruby
부분을 다음과 같이 수정한다.
passenger_ruby /home/ubuntu/.rbenv/shims/ruby;
$ sudo vi /etc/nginx/nginx.conf
아래의 내용을 찾아, include
로 시작하는 줄을 주석 해제한다.
##
# Phusion Passenger
##
# Uncomment it if you installed ruby-passenger or ruby-passenger-enterprise
##
include /etc/nginx/passenger.conf;
파일을 하나 더 수정해야한다.
$ sudo vi /etc/nginx/sites-enabled/default
파일의 내용을 다음과 같이 수정한다. fake_insta
는 3.4.
에서 가져온 프로젝트 이름으로 대체될 수 있다.
server {
listen 80;
listen [::]:80 ipv6only=on;
server_name example.com;
passenger_enabled on;
rails_env production;
root /home/ubuntu/fake_insta/public;
# Add index.php to the list if you are using PHP
# index index.html index.htm index.nginx-debian.html;
## Comment the following block
# location / {
# # First attempt to serve request as file, then
# # as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
# }
}
설정 파일 편집이 완료되었으면 작성이 잘 되었는지 테스트하기 위하여 아래의 명령어를 입력한다.
$ sudo nginx -t
만약 문제가 없다면, 아래의 명령어를 입력하여 Nginx를 실행하자.
$ sudo service nginx start
가져온 프로젝트 폴더 안으로 이동한다.
$ cd ~
$ cd fake_insta
gem 파일들을 설치한다.
$ bundle install
secrets.yml
파일을 열어보면 production 부분에 secret_key_base가 설정되어 있지 않다. 노출되면 안되는 중요한 정보이기 때문에 Rails가 자동으로 생성하지 않아서 figaro를 이용하여 직접 설정해주어야 한다.
figaro를 설치한다.
$ bundle exec figaro install
128자리 난수를 생성하여 config
폴더 안의 application.yml
파일에 붙인다.
$ rake secret >> ./config/application.yml
application.yml
파일을 열어, 128자리 난수 앞에 아래의 코드를 작성한다.
$ vi ./config/application.yml
SECRET_KEY_BASE: (방금 생성한 128자리 난수)
production
환경으로 Database를 생성한다.
$ RAILS_ENV=production rake db:migrate
production 환경에서는 precompile된 assets들을 사용하기 때문에 precompile된 파일들을 따로 생성해주어야 한다. 아래의 명령어로 생성을 한다.
$ RAILS_ENV=production rake assets:precompile
아래의 명령어로 프로젝트를 refresh 한다.
$ touch tmp/restart.txt
Lightsail의 IP 주소를 브라우저 주소창에 입력하여 사이트에 접속이 되는지 확인한다.
IAM을 검색하거나 '보안, 자격 증명 및 규정 준수' 항목에서 IAM을 찾는다.
새로운 그룹을 만든다.
정책 AmazonS3FullAccess
을 찾아서 등록해준다.
그룹이 생성된 것을 확인할 수 있다.
새로운 사용자를 만든다.
우리는 Access Key를 발급 받아야하기 때문에 프로그래밍 방식 액세스를 선택한다.
그룹에 사용자를 추가한다.
발급된 Key를 확인한다. 반드시 표시 버튼을 눌러, 비밀 액세스 키를 확인하고 액세스 키 ID와 비밀 액세스 키를 안전한 곳에 복사해 놓는다. 현재 페이지를 벗어나면 비밀 액세스 키 확인이 불가능 하므로 꼭 저장한다.
우리는 방금 생성한 액세스 키 ID와 비밀 액세스 키가 외부에 노출되지 않도록 하기위하여 figaro
를 사용한다. 이 2가지는 아이디와 패스워드 같은 개념이므로 절대 외부에 노출되어서는 안된다. 만약 노출되었다면 IAM에 접속을 하여 생성하였던 User를 삭제하여야 한다.
config
폴더의 application.yml
파일을 열어 IAM에서 발급받은 키를 입력한다.
AWS_ACCESS_KEY_ID: (각자 발급받은 키를 입력한다.)
AWS_SECRET_ACCESS_KEY: (각자 발급받은 키를 입력한다.)
이미지가 올라갈 버킷을 만든다. 버킷의 이름을 지정하고, 리전을 **아시아 태평양(서울)**로 설정하고 버킷을 생성한다.
Gemfile에 fog를 추가한다.
gem 'fog'
bundle install
명령어로 gem을 설치한다.
$ bundle install
config/initializers
폴더에 fog-aws.rb
라는 이름의 파일을 만들어 준다. 내용은 다음과 같다.
CarrierWave.configure do |config|
config.fog_credentials = {
provider: 'AWS',
aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"],
aws_secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"],
region: 'ap-northeast-2'
}
config.fog_directory = '(앞서 설정한 bucket 이름)'
end
post_image_uploader.rb
파일을 다음과 같이 수정한다.
...
# Choose what kind of storage to use for this uploader:
# storage :file
storage :fog
...
S3에 이미지를 올리기 위한 모든 설정을 완료하였다. 새로운 게시글을 작성해보고 이미지가 S3 버킷에 잘 저장되는지 확인해보자.
Lightsail console을 열어 프로젝트 폴더로 이동한다. 이동 후 git pull로 프로젝트의 변경사항을 가져오고, bundle install로 gem들을 설치한다.
$ cd fake_insta
$ git pull
$ bundle install
config
폴더의 application.yml
파일을 열어 IAM에서 발급받은 키를 입력한다.
$ vi config/application.yml
우측 하단에 메모장 모양의 아이콘이 있다. 메모장을 클릭하여 붙여놓고자 하는 텍스트를 입력하고 메모장을 닫은 후, ctrl + shift + v
단축키로 붙여넣을 수 있다.
AWS_ACCESS_KEY_ID: (각자 발급받은 키를 입력한다.)
AWS_SECRET_ACCESS_KEY: (각자 발급받은 키를 입력한다.)
아래의 명령어로 프로젝트를 refresh 한다.
$ touch tmp/restart.txt
Lightsail의 IP 주소를 브라우저 주소창에 입력하여 사이트에 접속 후, 여기서도 게시글 작성과 이미지 업로드가 잘 되는지 확인한다.