✔︎ 서버 환경 구성
EC2 인스턴스에서 간단한 샘플 웹 어플리케이션을 서비스하기 위해 Node.js를 설치한다.
# nvm 설치 스크립트 파일 내려받기
$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
# 내려받은 nvm 설치 스크립트 실행
$ . ~/.nvm/nvm.sh
# 설치
$ nvm install 10.13.0
# 버전 확인
$ node -e "console.log('Running Node.js ' + process.version)"
✔︎ 소스코드 배포
Git 저장소에 있는 소스코드를 EC2 인스턴스로 내려받아 코드 실행에 필요한 의존성 패키지를 설치
# 시스템 패키지 설치를 위해 sudo를 이용
$ sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-deve
소스코드 배포 디렉토리 생성
$ cd /var
# 소스코드를 배포할 /var/www 생성
# /var가 root 소유이므로 sudo 이용
$ sudo mkdir www
# 코드 관리를 일반 유저인 ec2-user로 실행할 것이므로 /var/www의 권한을 ec2-user로 변경
$ sudo chown ec2-user www
Git을 이용해 저장소의 소스코드 내려받기
$ cd /var/www
$ git clone https://github.com/deopard/aws-exercise-a.git
$ cd aws-exercise-a
어플리케이션 실행을 위해 프로젝트의 의존성 패키지 설치
$ npm install
✔︎ 웹 서버, 웹 어플리케이션 서버 구성(nginx, Phusion Passenger)
웹 서버인 nginx, 웹 어플리케이션 서버인 Phusion Passenger를 설치한다.
Phusion Passenger를 nginx 통합 모드로 설치하고 실행하겠다.
nginx 모드로 Phusion Passenger를 실행하면 Phusion Passenger가 nginx의 모듈처럼 동작하게 된다.
따라서 Phusion Passenger의 설정들을 ngnix 설정 파일에서 다루고 nginx만 시작해도 Phusion Passenger까지 재시작하게 된다.
SSH를 이용해 EC2 인스턴스 접속
Phusion Passenger 설치 파일 내려받기
wget 명령어를 이용해 설치 파일 내려 받기
$ cd /var/www
# wget 명령어를 사용해 파일을 로컬로 내려받기
$ wget http://s3.amazonaws.com/phusion-passenger/releases/passenger-5.3.7.tar.gz
# /var 디렉토리는 root 소유이므로 sudo를 붙여 디렉토리 생성
$ sudo mkdir /var/passenger
# passenger 파일을 ec2-user로 사용하기 위해 디렉토리 소유자를 변경(변경 전 소유자는 root이므로 변경 작업은 root 권한으로 실행)
$ sudo chown ec2-user /var/passenger
# 이후 내려받은 설치 파일을 압축 해제한다.
$ tar -xzvf passenger-5.3.6.tar.gz -C /var/passenger
rvm 설치
rvm은 Ruby version manager로서 nvm과 같이 특정 버전의 루비 언어를 내려받게 해주는 역할을 한다.
Phusion passenger는 C++와 루비로 만들어졌다.
# curl 명령어를 사용해 공개키를 내려받는다.
# 이 키는 내려받으려는 rvm 패키지가 유효한 패키지인지 확인하는데 사용한다.
$ curl -sSL https://rvm.io/mpapis.asc | gpg --import -
command curl -sSL https://rvm.io/pkuczynski.asc | gpg2 --import -
# stable 버전의 rvm을 내려받는다.
$ curl -L get.rvm.io | bash -s stable
# rvm 명령어를 현재 터미널 세션에서 사용할 수 있게 함
$ source /home/ec2-user/.rvm/scripts/rvm
$ rvm reload
# 루비를 설치하는데 필요한 라이브러리 등을 설치
$ rvm requirements run
루비 설치
[ec2-user@ip-172-31-30-129 ~]$ rvm install 2.4.3
Passenger 명령어를 쉽게 실행하기 위한 변수 설정 작업
# 설치된 passenger의 경로를 $PATH 변수에 등록한다.
# $PATH 변수에 등록하면 모든 디렉토리에서 passenger 명령어를 실행할 때
# 전체 경로가 아닌 paasenger 명령어만 입력하면 된다.
[ec2-user@ip-172-31-30-129 ~]$ echo export PATH=/var/passenger/passenger-5.3.6/bin:$PATH >> ~/.bash_profile
# 업데이트된 bash shell의 설정을 현재 터미널 세션에서 바로 사용할 수 있게 한다.
[ec2-user@ip-172-31-30-129 ~]$ source ~/.bash_profile
Phusion Passenger를 이용해 Passenger nginx module 설치
Phusion Passenger, nginx module을 설치한다.
실행할 어플리케이션의 언어를 물어본다. 샘플 프로젝트는 Node.js로 이루어져 있기 때문에 Node.js만 체크하고 나머지는 해제한다.
만약 체크박스가 제대로 보이지 않는다면 설명에 적혀있는 것처럼 "!"를 입력하고 space를 누르면 체크가 풀린다.
경고 메세지가 나타났다.
시스템에 가상 메모리가 부족해서 설치 시 문제가 발생할 수 있기 때문에 가상 메모리를 늘린 뒤 installer를 실행하는 것을 권장하는 메세지이다.
Installer는 Ctrl-C를 눌러서 설치 과정을 중단하는 것을 추천하고 있으므로 가상 메모리를 늘리기 위해 중단한다.
가상 메모리의 크기를 늘린다.
드디어 nginx 까지 자동으로 설치할 것인지 묻는다.
Enter your choice (1 or 2) or press Ctrl-C to abort: 1을 선택한다.
이후 nginx를 어디에 설치할 것인지를 묻는다.
Please specify a prefix directory [/opt/nginx]: 엔터
아래와 같은 경고 메세지가 나타난다.
/opt/nginx에 설치하려고 했으나, 해당 폴더는 root 권한이 필요하고 현재는 ec2-user로 작업을 진행하기 때문에 권한 실패 에러가 뜬다.
rvm에서 관리하는 ruby를 이용해 설치를 권장하고 있으므로, installer에서는 rvmsudo를 이용해 처리하는 것을 권장한다.
사용하던 환경변수가 보존되지 않는 새로운 터미널 세션을 생성한다. 그에 비해 rvmsudo는 sudo 권한을 실행하면서 ruby에 필요한 환경변수 값까지 보존해주는 기능을 제공한다.
installer가 권장하는 방법으로 rvmsudo를 실행해 installer를 다시 실행한다.
$ export ORIG_PATH="$PATH"
$ rvmsudo -E /bin/bash
# export PATH="$ORIG_PATH"
# export rvmsudo_secure_path=1
# /home/ec2-user/.rvm/gems/ruby-2.4.3/wrappers/ruby /var/passenger/passenger-5.3.7/bin/passenger-install-nginx-module
생각보다 설치가 오래 걸리기 때문에 최소 30분은 기다리면 설치가 완료된다.
정상적으로 설치됐다는 메세지와 함께 nginx의 설정 파일의 경로를 알려주고 Phusion Passenger와의 연동을 위한 설정도 installer에서 추가했음을 알려준다.
이후 exit로 루트 권한을 종료시킨다.
텍스트 편집기로 nginx의 설정을 변경하기 위해 파일을 연다.
$ sudo vim /opt/nginx/conf/nginx.conf
http 요소의 첫 줄에 server_names_hash_bucket_size 설정을 추가
http {
# 긴 서버 네임 허용
server_names_hash_bucket_size 256;
passenger_root /var/passenger/passenger-5.3.7;
passenger_ruby /home/ec2-user/.rvm/gems/ruby-2.4.3/wrappers/ruby;
서버의 요소 설정
server {
listen 80;
server_name <ec2 ipv4 public ip>;
root /var/www/aws-exercise-a/public;
# Passenger 앱 명시
passenger_enabled on;
# Passenger에게 node.js 앱임을 알려준다.
passenger_app_type node;
# Passenger 시작 파일
passenger_startup_file /var/www/aws-exercise-a/app.js;
#charset koi8-r;
#access_log logs/host.access.log main;
# 기본 설정에 대해서는 주석처리
#location / {
# root html;
# index index.html index.htm;
#}
저장 후 nginx 실행
$ sudo /opt/nginx/sbin/nginx
'Public Cloud > AWS' 카테고리의 다른 글
[AWS] Bastion Host의 개념 (0) | 2022.04.04 |
---|---|
[AWS] ELB를 생성해 EC2 인스턴스 로드밸런싱하기 (0) | 2022.04.01 |
[AWS] Dynamo DB CRUD (0) | 2022.03.31 |
[AWS] RDS 데이터베이스 구축 및 Apache 연결하기 (0) | 2022.03.31 |
[AWS] VPC peering 구성하기 (0) | 2022.03.31 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!