EC2
- EC2란? (Elastic Compute Cloud)
- 성능, 용량 등을 유동적으로 사용할 수 있는 서버
EC2 인스턴스 생성
- EC2 대시보드로 이동
- 이름 및 태그
- 이름 작성
- 애플리케이션 및 OS 이미지
- Amazon Linux 클릭
- Amazon Machine Image(AMI)
- Amazon Linux 2 AMI (HVM) - Kernel 5, 10, SSD Volume Type 클릭
- 아키텍쳐
- 64비트(x86)
- 인스턴스 유형
- t2.micro 클릭
- 키 페어(로그인)
- 키 페어 이름 작성
- 키 페어 유형
- RSA
- 프라이빗 키 파일 형식
- .pem
- pem 파일은 잘 저장해두기!
- 네트워크 설정 - 편집
- 보안 그룹 이름 변경
- ex) ~firewall
- 설명
- ex) ~created 2024-05-23
- 인바운드 보안 그룹 규칙 (2개 추가하기)
- 보안 그룹 규칙 추가 1
- 포트 범위
- 8080
- 소스 유형
- 위치 무관
- 포트 범위
- 보안 그룹 규칙 추가 2
- 유형
- HTTPS
- 소스 유형
- 위치 무관
- 유형
- 보안 그룹 규칙 추가 1
- 스토리지 구성
- 30 GiB로 변경
- 인스턴스 시작 클릭
- 보안 그룹 이름 변경
- 이름 및 태그
- 네트워크 및 보안으로 이동
- 탄력적 IP
- 탄력적 IP 주소 할당 클릭
- 수정없이 할당 클릭
- 작업 토글 버튼의 탄력적 IP 주소 연결 클릭
- 자신의 인스턴스 클릭 후 연결 버튼 클릭
-
- 자신의 인스턴스 클릭 후 연결 버튼 클릭
- 탄력적 IP
EC2 서버 접속 (Putty)
- Putty 설치
- https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 이동
- putty.exe 설치
- puttygen.exe 설치
- puttygen.exe 실행
- 상단의 Conversions - import key 클릭
- 위에서 다운받은 pem 파일 선택
- Save private key 클릭 (오류 메시지떠도 OK 클릭)
- ppk 파일 다운 완료
- 상단의 Conversions - import key 클릭
- putty.exe 실행
- Connection- SSH- Auth- Credentials 클릭
- Private Key file for authentication:
- 위에서 다운받은 ppk 파일 선택
- Private Key file for authentication:
- Session 클릭
- Host Name (or IP address)
- ec2-user@탄력적IP주소 or 자동할당된IP주소
- Connection Type
- SSH
- Open 클릭
- Host Name (or IP address)
- Connection- SSH- Auth- Credentials 클릭
- 접속 완료 (콘솔창 생성)
EC2 서버 설정
- 위에서 생성된 콘솔창에서 설정
- Java 17 설치
- 콘솔창에 아래 명령어 입력
-
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.rpm sudo rpm -ivh jdk-17_linux-x64_bin.rpm sudo alternatives --config java java -version
- 타임존 변경
- 콘솔창에 아래 명령어 입력
-
sudo rm /etc/localtime sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
- Host Name 변경
- 콘솔창에 아래 명령어 입력
-
sudo hostnamectl set-hostname 변경할이름 sudo reboot
- 콘솔창 닫았다가 다시 재접속하면 변경한 이름으로 바뀌어서 나온다.
- Hosts에 HostName 등록
- 콘솔창에 아래 명령어 입력
-
sudo vim /etc/hosts 단축키 i(삽입모드 전환) 127.0.0.1 호스트이름 입력후 단축키 ESC(삽입모드 종료) 단축키 :wq(저장후 종료)
- 포트 접근해보기
- 콘솔창에 아래 명령어 입력
- curl 호스트이름
- 아래와 같은 에러가 뜨는건 잘 실행이 된다는 의미이다. (아직 80포트에서 실행된 서비스 프로그램이 없기 때문에 접근할 수 없다는 에러)
- 콘솔창에 아래 명령어 입력
- 기본 단축키
- 붙여넣기
- SHIFT+INSERT
- 잘라내기
- SHIFT+DELETE
- 화면 지우기
- clear
- 붙여넣기
EC2 서버에 스프링부트 배포
- 배포할 프로젝트 코드 준비
- build.gradle에 코드 추가
-
bootJar{ archivesBaseName = '프로젝트명' archiveFileName = '프로젝트명.jar' archiveVersion = "0.1.0" }
- github 레포지토리 생성
- 프로젝트 코드 업로드
- Upload files에서 코드 드래그하여 업로드 가능
- 커밋
- 프로젝트 코드 업로드
- EC2 Putty 콘솔창 접속
- git 설치
- 콘솔창에 sudo yum install git 입력
- git —version 입력하여 버전 확인
- 프로젝트 디렉토리 생성 및 이동
- 콘솔창에 mkdir ~/app && mkdir ~/app/step1 입력
- cd ~/app/step1 입력
- 프로젝트 clone
- 위에서 생성한 깃 레포지토리 주소 복사
- 콘솔창에 git clone 레포지토리주소 입력
- 콘솔창에 cd 프로젝트명 입력하여 이동
- 콘솔창에 ll 입력하여 프로젝트 확인
- 단위 테스트
- 콘솔창에 chmod +x ./gradlew 입력하여 실행 권한 추가
- 콘솔창에 ./gradlew test 입력하여 단위 테스트 수행
- git 설치
배포 스크립트 만들기
- deploy.sh 생성
- 콘솔창에 vim ~/app/step1/deploy.sh 입력
- deploy.sh 작성
- 예시
-
#!/bin/bash REPOSITORY=/home/ec2-user/app/step1 PROJECT_NAME=ec2-loginjoindb(프로젝트명) cd $REPOSITORY/$PROJECT_NAME/ # master 브랜치의 최신 내용 받기 echo "> Git Pull" git pull # gradlew로 build 수행 echo "> 프로젝트 Build 시작" ./gradlew build echo "> step1 디렉토리 이동" cd $REPOSITORY echo "> Build 파일 복사" cp $REPOSITORY/$PROJECT_NAME/build/libs/*.jar $REPOSITORY/ echo "> 현재 구동중인 애플리케이션 pid 확인" #CURRENT_PID=$(pgrep -f ${PROJECT_NAME}*.jar) CURRENT_PID=$(pgrep -f ec2-loginjoindb.jar) echo "현재 구동 중인 애플리케이션 pid: $CURRENT_PID" if [ -z "$CURRENT_PID" ]; then echo "> 현재 구동 중인 애플리케이션이 없으므로 종료하지 않습니다." else echo "> kill -15 $CURRENT_PID" kill -15 $CURRENT_PID sleep 5 fi echo "> 새 애플리케이션 배포" # 실행하 jar 파일명 찾기 #JAR_NAME=$(ls -tr $REPOSITORY/ | grep *.jar | tail -n 1) JAR_NAME=$(ls -tr $REPOSITORY/ | grep ec2- | tail -n 1) echo "> JAR Name: $JAR_NAME" nohup java -jar $REPOSITORY/$JAR_NAME 2>&1 &
- 실행 권한 추가
- 콘솔창에 chmod +x ./deploy.sh 입력
- deploy.sh 실행
- 콘솔창에 ./deploy.sh > err.log 입력
- 그 외
- 에러로그 확인 방법
- vi err.log
- vi nohup.out (java -jar 실행 에러)
- 현재 실행 중인 프로세스(앱) 보기
- ps -ef
- 웹 브라우저 실행
- curl localhost:8080
- 에러로그 확인 방법
728x90
'교육 (Today I Learned) > Hanaro' 카테고리의 다른 글
[Hanaro] 79일차 ~ 98일차 / 해외여행 모임 통장 서비스 프로젝트 완료 (회고) (1) | 2024.06.30 |
---|---|
[Hanaro] 87일차 / AWS (RDS DB 생성, 설정, 접속) (0) | 2024.05.25 |
[Hanaro] 79일차 ~ / 해외여행 모임 통장 서비스 프로젝트 시작 (2023-05-13 ~ 2023-06-12) (2) | 2024.05.17 |
[Hanaro] 71일차 ~ 78일차 / 키오스크 프로젝트 완료 (회고) (2) | 2024.05.11 |
[Hanaro] 69일차 / Spring Boot (Security), 시큐어 코딩 (시간 및 상태, 에러 처리) (0) | 2024.04.25 |