KDT/Cloud

240124 Cloud

001cloudid 2024. 1. 24. 12:52
728x90

교재 EC2 인스턴스 작성 2

p31

asdf plugin add ruby → 루비 언어의 플러그인 설치(Phusion Passenger가 C++와 루비 언어로 만들어졌기 때문)

sudo yum install gcc gcc-c++ glibc glibc-common gd gd-devel openssl-devel libcurl-devel -y → 루비를 설치하는 데 필요한 패키지 설치

asdf install ruby 3.1.1 → 루비 언어 설치

asdf global ruby 3.1.1 → 버전 3.1.1을 루비 언어의 기본 버전으로 설정

=======================================================================

Phusion Passenger 설치 → 설치 파일 위치 : /var/passenger/passenger-6.0.12/bin/

Phusion Passenger 설치(WAS 서버)와 nginx(Web 서버)를 동시에 진행하려면 'passenger-install-nginx-module' 설치 파일을 사용

만약, 웹 서버 없이 WAS 서버만 설치하여 운영할 경우 'passenger'설치 파일만 사용하면 됨.

현재 위치에 상관없이 passenger-install-nginx-module 설치 파일을 실행할 수 있또록 하려면 PATH 설정이 필요

echo export PATH=/var/passenger/passenger-6.0.12/bin:$PATH >> ~/.bash_profile

→ 기존의 PATH 설정값에 '/var/passenger/passenger-6.0.12/bin'를 추가하여 다시 PATH 환경변수 설정 함.

→ 리다이렉션 기호(>>)를 사용하여 bash_profile 내에 추가

→ bash_profile : 사용자가 접속 시 사용하는 기본 환경 설정 파일

→ 환경 설정 파일은 각각 유저마다 별개임

 

tail -5 ~/.bash_profile

→ tail명령어는 파일의 내용을 뒤에서부터 기본적으로 밑에서부터 위로 10줄을 보여주는 명령어

→ -숫자 옵션을 통해 조절이 가능

 

source ~/.bash_profile → 재시작 없이 변경된 내용을 적용

=======================================================================

위치에 상관없이 passenger-install-nginx-module 명령어를 실행할 수 있음.

passenger-install-nginx-module → Phusion Passenger 설치 진행(with nginx)

 

Press Enter to continue, or Ctrl-C to abort. 메세지와 함께 Enter키를 누르면 설치가 진행

! 입력 후 Ruby, Python 해제

Node.js만 선택된 상태에서 엔터키를 누름

 

가상메모리 관련 권장사항이 표시됨

→ 가상메모리 공간이 부족하면 설치 시 문제가 발생할 수도 있음

→가상 메모리 공간을 늘린 뒤 다시 설치 진행

Ctrl+C를 입력해서 설치를 종료 후 차래 명령어를 차례대로 입력

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

 

passenger-install-nginx-module 

 

Enter your choice (1 or 2) or press Ctrl-C to abort: 1
→ 1 또는 2 또는 Ctrl +C 선택하는 메세지
=> 1번을 입력해서 Phusion Passenger(톰캣과 같은 역할) + nginx(아파치와 같은 역할)을 같이 설치를 진행

 

Please specify a prefix directory [/opt/nginx]:

엔터키를 눌러서 계속 진행

 

※엔터키를 누르면 Permission problems 오류가 발생

→ 오류를 해결해야 설치가 완료됨

→ 아래 오류 해결

=======================================================================

export ASDF_DATA_DIR=/home/ec2-user/.asdf

→ ASDF_DATA_DIR 환경변수를 생성하고 /home/ec2-user/.asdf 경로를 그 값으로 저장

→export 명령어로 적용

※변수명 값 → 변수가 생성

echo $ASDF_DATA_DIR → /home/ec2-user/.asdf 가 화면에 출력

export ORIG_PATH="$PATH"

→현재 접속한 ec2-user 사용자의 PATH 설정값을 ORIG_PATH 변수에 저장

→PATH는 사용자마다 따로 적용되며 이후 설치를 root 유저로 진행할 예정. 따라서 root 유저로 변경되면 기존 설정된 PATH값은 없어짐

→변수로 저장 후 그 변수의 값을 root의 PATH에 추가

sudo -sE → ec2-user에서 root 유저로 사용자를 변경

echo $PATH      

export PATH="$ORIG_PATH" → 현재 사용자는 root이고, root 사용자의 PATH 환경 변수에 ec2-user 사용자의 PATH 설정 값을 가지고 있는 ORIG_PATH를 대입(저장)

echo $PATH  

asdf global ruby 3.1.1

→ ec2-user의 PATH 값을 현재 접속한 root 유저의 PATH에 대입했으므로 asdf 관련 명령어도 사용할 수 있음

→ root 유저에서는 기본 Ruby 버전을 설정하지 않았으므로 global 설정을 넣음

 

이제 root 유저로 passenger-install-nginx-module 명령어를 입력

Press Enter to continue, or Ctrl-C to abort. 메세지와 함께 Enter키를 누르면 설치가 진행

! 입력 후 Ruby, Python 해제

Node.js만 선택된 상태에서 엔터키를 누름 1 엔터키를 눌러서 nginx의 저장 위치를 [/opt/nginx]로 설정

 

이전 오류가 난 이유 : /opt 디렉토리(폴더)는 root 사용자가 소유자이므로 그 아래 ec2-user는 nginx 디렉토리(폴더)를 만들 수 가 없었음

→ root 유저로 변경해서 설치 진행

 

설치 진행 시 시간이 몇 분 소요

 

설치 완료가 되면 엔터키를 눌러서 마무리

 

root 유저로 접속되어 있어 exit 명령어를 입력해서 로그아웃을 시키고 다시 ec2-user 유저로 변경

=======================================================================

 

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

=======================================================================

수정 17번 라인에서 enter 18번 라인에 server_names_hash_bucket_size 128;

41번 라인 localhost를 지우고 ec2-user IPv4로 변경, 42번 라인에 root /var/www/aws-exercise-a/public; 작성(웹 서버 접속 시 nginx가 검색하는 위치를 지정), 엔터

44번 라인부터

passenger_enabled on; → Phusion Passenger 활성화
passenger_app_type node; → 기본타입을 Node.js로 설정
passenger_startup_file /var/www/aws-exercise-a/app.js; 

 

52번라인부터 55번라인까지 #을 붙여서 주석 처리

=======================================================================

 

sudo /opt/nginx/sbin/nginx → 

 

웹에 ec2-user IPv4 주소를 입력하면

그림 1.

sudo vi /var/www/aws-exercise-a/app.js

=======================================================================

const express = require('express');
const app = express();

 

//화면에 나타남
app.get('/', (req, res) => {
  res.send('AWS exercise의 A project입니다.');
});



app.listen(3000, () => {
  console.log('Example app listening on port 3000!');
});

app.get('/health', (req, res) => {
  res.status(200).send();
});

=======================================================================

public void method(String req, String res){

 res.send('AWS...');

}

매개변수만 남기는 것을 람다식 표현

->(자바 메소드) 또는 =>(자바스크립트 함수)

 

p38

nginx, Phusion Passenger 서비스 명령어 추가

cd /etc/init.d → /etc/init.d 디렉토리는 서비스 스크립트 파일들이 존재

sudo vi niginx 아래 입력

=======================================================================

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig:   - 85 15 
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /opt/nginx/conf/nginx.conf
# pidfile:     /opt/nginx/logs/nginx.pid
# modified from http://articles.slicehost.com/2009/2/2/centos-adding-an-nginx-init-script

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/opt/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/opt/nginx/conf/nginx.conf"

lockfile=/var/lock/subsys/nginx

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

=======================================================================

※대괄호 사용시 한칸씩 스페이스바 해줘야 함 

 

ls → nginx 파일을 확인

sudo chmod 755 nginx

→ 접근 허가 수정, vi 편집기로 만든 nginx 파일은 실행 권한이 없음.

→기본적으로 파일을 생성하면 permission이 644(rw-r--r--, 소유자는 읽고쓰기, 그룹은 읽기, 그 밖에 읽기 가능)

→ chmod 명령어로 755(rwxr-xr-x) x 권한 설정

sudo service nginx stop

sudo service nginx start

sudo service nginx restart

sudo service nginx status 까지 확인할 수 있음

 

p40

sudo chkconfig --add nginx → ntsysv 프로그램을 실행시켰을 때 nginx 항목이 보이도록 추가 시킴

sudo ntsysv → [*]nginx 등록, 서버가 시작될 때 nginx가 자동을 시작

 

p41

하나의 서버에 두 개의 어플리케이션 동작

cd /var/www

git clone https://github.com/deopard/aws-exercise-b.git → 퍼블릭 DNS 주소로 접근 시 보여 줄 샘플 프로젝트 b를 다운로드 받음

cd aws-exercise-b

npm install

 

sudo vi /opt/nginx/conf/nginx.conf → nginx의 수정파일 수정

=======================================================================

39번 라인 커서 위치시키고 9yy를 눌러서 9줄을 복사

89번 라인으로 커서 이동 p를 눌러서 붙여넣음 → 90번 라인부터 9줄이 복사한 내용이 입력됨

98번라인에 }(닫는 괄호)를 삽입

새롭게 추가한 라인 수정

92번 라인 퍼블릭 IPv4 DNS 주소로 변경

93번 라인 root /var/www/aws-exercise-b/public;

97번 라인 a를 b로 변경 

=======================================================================

 

sudo service nginx restart → 마지막으로 변경된 내용을 적용 후 다시 시작

 

웹 브라우저에 퍼블릭 IPv4 주소 입력, 퍼블릭 IPv4 DNS 입력

그림 2.

 

728x90

'KDT > Cloud' 카테고리의 다른 글

240216 Cloud  (0) 2024.02.16
240202 Cloud  (0) 2024.02.02
240119 Cloud  (0) 2024.01.19
240112 Cloud  (0) 2024.01.12
240105 Cloud  (0) 2024.01.05