교재 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 주소를 입력하면
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 입력
'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 |