AWS EC2 인스턴스(Ubuntu Server 18.04) 생성 및 Elastic IP 연결 후 ssh로 서버 접속
# 접근 권한 부여
# chmod 400 [pem key 경로]
$ chmod 400 "~/rails_workspace/my-aws-pem.pem"
# AWS 서버 접속
# ssh -i [pem key 경로] ubuntu@[public ip 주소]
$ ssh -i ~/rails_workspace/my-aws-pem.pem ubuntu@x.xx.xx.xxx
환경 세팅
rbenv로 ruby 설치
$ sudo apt-get update
$ sudo apt-get install build-essential
# rbenv 설치
$ git clone https://github.com/rbenv/rbenv.git ~/.rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ source ~/.bashrc
# rbenv 설치 확인
which rbenv
# ruby 설치를 위한 플러그인 다운로드
$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-installer | bash
$ curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-doctor | bash
rbenv install 2.7.3
# ruby 설치
# rbenv install [ruby version]
$ rbenv install 2.7.3
이후 아래와 같은 오류가 발생했다.
/tmp/ruby-build.20210804134436.7485.FWbxST/ruby-2.7.3/lib/rubygems/core_ext/kernel_require.rb:83:in `require': cannot load such file -- openssl (LoadError)
https://github.com/rvm/rvm/issues/4764#issuecomment-624796884 의 방법으로 해결했다
다시 ruby 설치하려니 설치가 안 된 패키지가 있었는지 또 다른 오류 발생
ERROR: Ruby install aborted due to missing extensions
Try running `apt-get install -y zlib1g-dev` to fetch missing dependencies.
명령어 그대로 입력해서 패키지 설치 진행했다. 이후 ruby 설치가 정상적으로 진행되었다.
# ruby version 확인
$ rbenv versions
# 특정 버전을 가리키도록 변경
# rbenv global [ruby version]
$ rbenv global 2.7.3
Rails 설치
# Rails 설치
# gem install rails --version=[rails version]
$ gem install rails --version=6.1.4
PostgreSQL 설치
$ sudo apt-get update
$ sudo apt-get -y install libpq-dev postgresql postgresql-contrib
Ruby 컴파일을 위한 dependency 설치
# Node.js repository 추가
$ curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
# Yarn repository 추가
$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
# Refresh packages list with the new repositories
$ sudo apt-get update
# Install our dependencies for compiiling Ruby along with Node.js and Yarn
$ sudo apt-get install git-core curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev software-properties-common libffi-dev dirmngr gnupg apt-transport-https ca-certificates redis-server redis-tools nodejs yarn
Bundler 설치
$ gem install bundler
# bundler 설치 확인
$ bundle -v
nginx & passenger 설치
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
$ sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger bionic main > /etc/apt/sources.list.d/passenger.list'
$ sudo apt-get update
$ sudo apt-get install -y nginx-extras libnginx-mod-http-passenger
$ if [ ! -f /etc/nginx/modules-enabled/50-mod-http-passenger.conf ]; then sudo ln -s /usr/share/nginx/modules-available/mod-http-passenger.load /etc/nginx/modules-enabled/50-mod-http-passenger.conf ; fi
$ sudo ls /etc/nginx/conf.d/mod-http-passenger.conf
# passenger가 올바른 ruby version 가리키도록 수정해줘야 함
$ sudo vim /etc/nginx/conf.d/mod-http-passenger.conf
passenger_ruby 줄을 ubuntu에 설치한 ruby 경로로 지정해준다.
$ passenger-config about ruby-command
를 입력하면 알 수 있다. 복사해서 붙여넣으면 된다.
nginx 시작
$ sudo service nginx start
public ip주소로 사이트에 접속했을 때 아래와 같이 nginx 메인 페이지가 나오면 성공
Rails application을 위한 nginx 설정
# default nginx 설정 제거
$ sudo rm /etc/nginx/sites-enabled/default
# sudo vim /etc/nginx/sites-enabled/[rails app name]
# rails app name은 프로젝트의 config/deploy.rb에 설정한 대로 쓰기
# (set :application, "myaap" 인 경우 myapp)
$ sudo vim /etc/nginx/sites-enabled/myapp
아래 내용 입력하기
server {
listen 80;
listen [::]:80;
server_name _;
root /home/ubuntu/[project name]/current/public;
passenger_enabled on;
passenger_app_env production;
location /cable {
passenger_app_group_name [project name]_websocket;
passenger_force_max_concurrent_requests_per_process 0;
}
# Allow uploads up to 100MB in size
client_max_body_size 100m;
location ~ ^/(assets|packs) {
expires max;
gzip_static on;
}
}
production 이외 환경이라면 passenger_app_env 부분을 변경해주면 된다.
아래 사진에서 초록색 자리에 Rails 프로젝트 이름이 들어가면 된다.
# nginx.conf에 내용이 잘 입력되었는지 확인
$ sudo nginx -t
# Restart server
$ sudo service nginx reload
PostgreSQL database 설정
$ sudo su - postgres
# createuser --pwprompt [username]
$ createuser --pwprompt judy
# createdb -O [username] [database name]
$ createdb -O judy myapp_production
$ exit
# database에 접속 되는지 확인
# psql -U [username] -W -h 127.0.0.1 -d [database name]
$psql -U judy -W -h 127.0.0.1 -d myapp_production
접속이 잘 되는 걸 확인한 후 빠져나오려면 \q 입력하면 된다.
SSH Keygen 설정
$ ssh-keygen
엔터 쳐서 3번 모두 skip
$ cat ~/.ssh/id_rsa.pub
출력된 key 복사 후 GitHub repository settings > Deploy keys > Add deploy key > 추가
production에 배포하기 (capistrano 이용)
$ bundle exec cap production deploy
참고자료
* https://kbs4674.tistory.com/190#chapter1
* https://gorails.com/deploy/ubuntu/18.04
'Ruby on Rails' 카테고리의 다른 글
[Mac] Rails7 프로젝트 생성 후 pg gem 오류 해결방법 (0) | 2023.07.09 |
---|---|
Rails7 ActivieRecord::Encryption 적용하기 (0) | 2023.07.09 |
Rails 프로젝트에 Framework7 Icons 적용하기 (0) | 2021.07.18 |
Rails6 프로젝트에 Framework7 적용하기 (0) | 2021.07.18 |
[Mac] rvm으로 ruby version 관리하기 (0) | 2021.07.18 |