공부/그룹 스터디

AWS EC2 재생성 및 수동배포

junani0v0 2024. 6. 21. 20:50

EC2 삭제

스크린샷 2024-06-08 213420

인스턴스 > 작업 > 종료 방지 기능 변경 > 비활성화 > 저장
인스턴스 > 작업 > 중지 방지 변경 > 비활성화 > 저장
인스턴스 > 인스턴스상태 > 중지
인스턴스 > 인스턴스상태 > 종료

EC2 생성

스크린샷 2024-06-05 211334


이름을 원하시는 걸로 입력하시고 Amazon LinuxAmazon Linux 2023 AMI를 선택합니다. 이때 프리 티어 사용 가능이 무료임으로 잘 확인하세요

스크린샷 2024-06-05 211731


아키텍처에 자신에가 맞는 비트를 선택시면 되며
인스턴스 유형에 t2.micro를 선택합니다 이것도 프리 티어 사용 가능을 확인하세요
그다음 새 키 페어 생성을 클릭 (이전에 했던 SSH key를 만든것처럼 해주면 됩니다 차이점이라하면 저희 key를 등록하는게 아닌 아마존이 key를 저희에게 만들어 줍니다)

스크린샷 2024-06-05 212227

  • 키 페어 이름 : 노트북 이름으로 하겠습니다 전 gram이기에 gram으로 작성하겠습니다
  • 키 유형 : RSA
  • 프라이빗 키 파일 형식 : .pem

키 페어 생성을 클릭하면 key파일이 다운로드 됩니다
잃어버리면 키 생성을 새로 해야함으로 프로젝트 있는 곳에 key폴더를 만들어 잘 보관해 두세요

스크린샷 2024-06-05 212726


그러면 위에 키로 설정한 이름이 등록된게 확인이 되실겁니다
그 다음으로 네트워크 설정에 다음에서 SSH 트래픽 허용에서 처음에 위치 무관으로 되어있는데요
보안에 매우 취약함으로 꼭 내 IP로 변경하세요.
나머지 아래 체크박스도 체크 해주세요

스크린샷 2024-06-05 213256


스토리지 구성은 30기가까지 무료임으로 30으로 변경해 주시고요
IOPS는 입출력을 최대한 사용할 수 있게 하며 파일의 입출력이 많을 경우 사용합니다. 하지만 유료임으로 저희는 gp3을 사용할 것입니다

MobaXterm 재설정

스크린샷 2024-06-08 214617


Session > SSH > Remote host : [퍼블릭 IPv4 주소] > Specify username : [EC2 이름] > Use private key : [본인 SSH Key] > OK > Accept

Java 설치

MobaXterm에서

yum search java | grep amazon
  • yum : 패키지 관리자
  • yum search java : 시스템에서 java관련 패키지 검색

yum search java결과값 중 amazon이라는 문자열을 찾아 표시

스크린샷 2024-06-08 215725

yum install java 11-amazon-corretto.x86_64

java 11-amazon-corretto.x86_64설치

스크린샷 2024-06-08 220001

그러면 이와같은 권한이 없어 에러가 발생

sudo yum install java-11-amazon-corretto.x86_64

sudo를 붙여줘서 다시 설치
설치할지 물어보면 y

java 위치 찾기

whereis java

스크린샷 2024-06-08 220409

java 경로 확인

cd /usr/bin

java가 있는 /usr/bin으로 이동

ll
ls -al
ll | grep java
pwd
  • ll : 파일 및 디렉토리의 상세정보를 보기위해 사용 (ls -l의 축약형)
  • ls -al : 현재 디렉토리의 모든 파일과 디렉토리를 상세하게 보기위해 사용
  • pwd : 현재 작업 중인 디렉토리의 경로 출력("print working directory"의 약자)#/usr/bin 으로 이동 후 바로가기 찾기스크린샷 2024-06-08 100455

# /usr/bin/java ---> /etc/alternatives/java 로 연결되어 있으니 이동

cd /etc/alternatives

위에서 ll | grep java으로 나온 java가 있는 경로로 이동

ll | grep openjdk

스크린샷 2024-06-08 100617

# 최종 경로 /usr/lib/jvm/java-11-amazon-corretto.x86_64

cd /usr/lib/jvm

java-11-amazon-corretto.x86_64가 있는 /usr/lib/jvm로 이동

java 환경변수 설정

vi ~/.bash_profile
  • vi : 텍스트 편집기
  • ~/ : 홈 디렉토리 경로
  • .bash_profile : 사용자 로그인 시 실행되는 스크립트 파일, 사용자의 환경 설정 및 사용자 정의 명령어등을 포함
i

insert모드로 들어가

JAVA_HOME=최종 경로

export path=$PATH:$JAVA_HOME/bin
JAVA_HOME=/usr/lib/jvm/java-11-amazon-corretto.x86_64

export path=$PATH:$JAVA_HOME/bin

Jasypt추가

JAVA_HOME=/usr/lib/jvm/java-11-amazon-corretto.x86_64
export APP_ENCRYPTION_PASSWORD=jun
export path=$PATH:$JAVA_HOME/bin

스크린샷 2024-06-19 132603

fi아래 최종경로 추가해서 추가
(띄어쓰기도 인식하니 조심)

:wq 
  • :wq : 저장 후 나가기
  • :q : 나가기
  • :q! : 강제 나가기
source ~/.bash_profile
    • source : 변경사항 즉시 적용
    • source ~/.bash_profile : 현재 셸 세션에서 .bash_profile 파일을 실행(자동로그인 실행되지 않음)

tomcat 설치

    •  

https://tomcat.apache.org/download-90.cgi

  •  

스크린샷 2024-06-08 224849

cd

스크린샷 2024-06-08 225314

홈 디렉토리(~)로 이동

cd tools

스크린샷 2024-06-08 225045

이렇게 없을 경우(홈 디렉토리에서 해야됨-사진 수정예정)

mkdir ~/tools

tools 디렉토리 생성

cd tools

tools로 이동

wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.89/bin/apache-tomcat-9.0.89.tar.gz   

wget [복사한 톰캣 url] 로 톰캣 다운로드

  • wget url : 인터넷 상에서 파일 다운로드 명령
    ll
    톰캣 설치 확인
    gzip -d apache-tomcat-9.0.89.tar.gz
    tar -xf apache-tomcat-9.0.89.tar
  • gzip -d : gz 압축 원래 형식(d)으로 압축 해제
  • tar : tar압축 해제
  • -x: 압축을 해제하는 옵션
  • -f: 파일을 지정하는 옵션(압축 해제할 파일)
    pwd
    ls -al
    경로 확인 & 파일 확인(~/tools/apache-tomcat-9.0.89/bin/catalina.sh)
    vi ~/.bashrc
  • .bashrc : 사용자 환경설정

.bash_profile.bashrc 차이

  • .bash_profile : 사용자가 로그인할 때 한 번 실행(로그인 할때만 실행)
  • .bashrc : 사용자가 새로운 셸 세션을 시작할 때마다 실행(로그인 안해도 실행)
    alias tomcat="~/tools/apache-tomcat-9.0.89/bin/catalina.sh"
    스크린샷 2024-06-08 231415

아래 fiunset사이에 alias 추가

:wq

저장하고 나가기

source ~/.bashrc

변경사항 적용

Jasypt 톰캣 환경변수 설정 - catalina.sh 파일을 수정

스크린샷 2024-06-19 133258

cd tools/apache-tomcat-9.0.89/bin > vi catalina.sh

스크린샷 2024-06-19 133211

/키워드+Enter : 원하는 키워드 검색, n을 누르면 다음 키워드 검색
/JAVA_OPTS > security위치에 JAVA_OPTS="$JAVA_OPTS -Djasypt.encryptor.password=복구화키값" > esc > :wq

tomcat start

톰캣 실행

netstat -tnl | grep 80

톰캣 포트 열려있는지 확인

8080 접속을 위한 EC2 보안 그룹 설정

EC2 > 보안 그룹 > 인바운드 규칙 편집

스크린샷 2024-06-08 111302

EC2 삭제 후 재 생성시 RDS 설정에서 EC2 연결 설정 변경

RDS > 데이터베이스 > RDS명 > 연결된 컴퓨팅 리소스

Untitled

EC2 연결 설정 > EC2 인스턴스 선택(활성화 된것만 나타남) > 설정

스크린샷 2024-06-08 103100

MobaXterm Tunneling 재설정

스크린샷 2024-06-08 232845

 

스크린샷 2024-06-08 232918

퍼블릭 IPv4 DNS 주소인스턴스명 수정

war파일 생성

프로젝트 폴더 경로에서 cmd 실행

mvn clean package -Pdev

Maven을 사용하여 프로젝트 정리, 패키지하여,dev프로파일을 활성화하고 해당 프로파일에 대한 설정을 사용하여 빌드

스크린샷 2024-06-08 233617

마지막 Building war에 war파일 경로 나옴

FileZilla

스크린샷 2024-06-08 233756

사이트 관리자 > 호스트 : 퍼블릭 IPv4 DNS 주소 > 사용자 : 인스턴스명 > 키 파일 : aws key파일 > 연결

dev > 톰캣 > webapps 안에 war파일 넣고 새로고침

스크린샷 2024-06-08 234737

퍼블릭 IPv4 DNS 주소:8080/pf 접속 확인

nginx 설치 & 실행

sudo yum install nginx

설치 하고 y로 설치 동의
nginx는 서비스로 등록됨

sudo service nginx start

실행

EC2 > 보안 그룹 > 8080 -> 80으로 변경
이제 public DNS를 주소창에 입력하면

스크린샷 2024-06-08 212405


이러한 페이지가 나오면 됨

nginx

80 웹서버 - 사용자는 앞에 소통하는 것만 있으면 되고 결과만 주면됨 웹 서버 사용자 요청 다 받고 백엔드는 사용자가 몰라도 된다

그래서 앞에는 웹서버 뒤에는 톰캣으로 세트로 사용

  • 80 하나에 톰캣 개수제한 없음(포트만 다르면 가능)

pf.com:80 --(프록시 proxy 서버)--> 8080 (톰캣)으로 보내줘야한다

프록시 설정

MobaXterm에서

cd /etc/nginx
pwd
ll -al

/etc/nginx로 이동 후 경로 확인 & 파일 확인

스크린샷 2024-06-09 000213

cd conf.d
pwd
ll -al
vi /etc/nginx/nginx.conf

스크린샷 2024-06-09 000455

서비스가 실행됬을때 에러가 발생하면 /var/log/nginx/error.log에 에러가 기록됨
nginx는 서비스 이름

스크린샷 2024-06-09 000713

엑세스 로그가 찍히는 곳 main은 바로 위에 log_format으로 선언되어 있음

스크린샷 2024-06-09 000907

/etc/nginx/conf.d/경로에서 *.conf형식의 파일을 만들면 다 읽겠다는 의미(절대 이 파일을 건들면 X)

:q

나가기(경로 저장)

vi /etc/nginx/conf.d/pf.conf
i

insert모드

server {
    listen       80;
    server_name  (ipv4_public_dns주소);

    charset UTF-8;
    access_log  /var/log/nginx/pf/pf.access.log;
    error_log   /var/log/nginx/pf/pf.error.log;

    location /pf {
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:8080/pf;
    }

    location ~ /\.ht {
        deny  all;
    }
}

해보면 권한이 맞지않아 나갈 수 없음

:q!

강제로 나가기

cd ..
ll

스크린샷 2024-06-09 001742

사용자 root, 사용자 그룹 root 인걸 확인할 수 있다 일반사용자는 수정할 수 없으므로 sudo를 사용해 실행해야 한다

cd conf.d

다시 이동

sudo vi pf.conf
i

insert모드

server {
    listen       80;
    server_name  (ipv4_public_dns주소);

    charset UTF-8;
    access_log  /var/log/nginx/pf/pf.access.log;
    error_log   /var/log/nginx/pf/pf.error.log;

    location /pf {
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:8080/pf;
    }

    location ~ /\.ht {
        deny  all;
    }
}

proxy_pass에서 뒤에 /webContext? 잊지않고 붙이기(여기로 넘겨주겠다는 의미)
그리고 location뒤에도 /pf 붙여줘야함
원래 location만하면 도메인 주소만 치면 pf로 가지는데 지금은 안됨...(이상하게 pf가 2개 붙어져 나옴)
listen : 포트번호

:wq
sudo service nginx reload

스크린샷 2024-06-09 002218

에러가 발생하는데 access_log의 위치를 바꿔줘야 함

cd /var/log/nginx
pwd
ll -al
ll
ls -al
sudo su

스크린샷 2024-06-09 002440

안에 파일을 확인하려지만 권한이 없다고 나와 sudo su로 관리자 권한으로 진입 앞에가 root로 변한걸 확인할 수 있음

pwd
ll

스크린샷 2024-06-09 002642

이제 이렇게 안에 파일이 보입니다
하지만 절대 root권한으로 파일실행 금지 !!

mkdir pf
  • mkdir : 새로운 디렉토리(폴더) 생성
    exit
    스크린샷 2024-06-09 003034

하면 다시 user로 바뀜

sudo service nginx reload
nginx -t

nginx 설정파일을 다 검사

스크린샷 2024-06-09 003259

에러가 발생

sudo su
cd /var/log/nginx
ll

관리자 권한으로 실행
경로이동 & 파일 확인

/var/log/nginx/ 소유자 변경

vi /etc/nginx/nginx.conf
chown nginx:nginx * -R
ll

Nginx의 주요 설정 파일경로로 이동
현재 디렉토리의 모든 파일 및 디렉토리 소유자와 그룹을 변경

  • chown : 파일 또는 디렉토리의 소유자와 그룹을 변경하는 명령
  • * : 전체
  • -R : 지정 디렉토리와 그 하위 디렉토리 및 파일의 소유자와 그룹을 재구적으로 변경하는 옵션
  • nginx:nginx : 소유자와 그룹을 nginx로 변경한다는 의미

스크린샷 2024-06-09 003646

이렇게 사용자와 사용자그룹이 nginx로 바뀜

nginx -t

스크린샷 2024-06-09 004659

nginx: [emerg] could not build server_names_hash, you should increase server_names_hash_bucket_size: 64
nginx: configuration file /etc/nginx/nginx.conf test failed

하나 삭제된거 확인 이제 남아있는 에러가 있는 경로로 이동하여 파일에 수정

vi /etc/nginx/nginx.conf

하지만 별다른게 없어 다시 이동

cd /etc/nginx
pwd
ll

스크린샷 2024-06-09 004947

vi nginx.conf.default

여기도 없음

sudo vi /etc/nginx/nginx.conf
server_names_hash_bucket_size 128;

스크린샷 2024-06-09 005310

http안에 access_log 아래 추가
저장하고 나와서

nginx -t

해보면 이제 에러가 사라짐

스크린샷 2024-06-09 005450

exit

다시 관리자에서 사용자로 나옴

sudo service nginx reload

스크린샷 2024-06-09 005632

정상작동 확인

배포 링크 생성

https://bitly.com/
Sign up Free > Free > 구글 로그인 > remind me later > Create new > Link

스크린샷 2024-06-09 010540

 

스크린샷 2024-06-09 010648

Destination : 프로젝트 메인주소 전부(index.do까지)
Title : 제목 하고 뒤에 괄호하고 날짜작성
생성하면 bit.ly/...주소가 나오는데 그게 이제 배포용 짧은 링크

긴주소 넣으면 이력서등에서 짤릴 확률이 높기에 짧은 주소 사용
제목에 날짜를 넣는 이유는 ip주소가 바뀌기 때문에 관리용으로 날짜를 넣음

tip.

service나 설정을 바꿀 경우 무조건 sudo사용

  • sudo : 일반 사용자가 슈퍼 유저 또는 다른 사용자의 권한으로 명령을 실행하게 해줌
    (Unix 및 Unix 기반 시스템에서 사용되는 명령어, "Superuser Do"의 약자)
  • netstat -tnl : TCP프로토콜을 사용하여 주소를 숫자 형태로 표시하고, 대기 중인 연결만 보여주는 명령
  • |(파이프) : 한 명령어의 출력을 다음 명령어의 입력으로 전달
  • grep : Unix 및 Unix기반 시스템에 사용되는 텍스트 검색 도구(주어진 텍스트에서 해당 패턴을 찾아 출력하거나 필터링에 사용)
  • yum : 패키지 관리자
  • yum search java : 시스템에서 java관련 패키지 검색
  • ll : 파일 및 디렉토리의 상세정보를 보기위해 사용 (ls -l의 축약형)
  • ls -al : 현재 디렉토리의 모든 파일과 디렉토리를 상세하게 보기위해 사용
  • pwd : 현재 작업 중인 디렉토리의 경로 출력("print working directory"의 약자)
  • vi : 텍스트 편집기
  • ~/ : 홈 디렉토리 경로
  • .bash_profile : 사용자 로그인 시 실행되는 스크립트 파일, 사용자의 환경 설정 및 사용자 정의 명령어등을 포함
  • .bashrc : 사용자 환경설정
  • source : 변경사항 즉시 적용
  • source ~/.bash_profile : 현재 셸 세션에서 .bash_profile 파일을 실행(자동로그인 실행되지 않음)
  • wget url : 인터넷 상에서 파일 다운로드 명령
  • gzip -d 압축파일 : gz 압축 원래 형식(d)으로 압축 해제
  • tar : tar압축 해제
  • -x: 압축을 해제하는 옵션
  • -f: 파일을 지정하는 옵션(압축 해제할 파일)
  • mkdir : 새로운 디렉토리(폴더) 생성
  • chown : 파일 또는 디렉토리의 소유자와 그룹을 변경하는 명령
  • -R : 지정 디렉토리와 그 하위 디렉토리 및 파일의 소유자와 그룹을 재구적으로 변경하는 옵션
  • nginx:nginx : 소유자와 그룹을 nginx로 변경한다는 의미

.bash_profile.bashrc 차이

  • .bash_profile : 사용자가 로그인할 때 한 번 실행(로그인 할때만 실행)
  • .bashrc : 사용자가 새로운 셸 세션을 시작할 때마다 실행(로그인 안해도 실행)

환경변수

  • :wq : 저장 후 나가기
  • :q : 나가기
  • :q! : 강제 나가기
  • # : 주석
  • dd : 한줄 삭제