Computer Science/CI&CD
                
              [CI/CD] AWS EC2 인스턴스 생성, 접속, 설정, 스프링부트 프로젝트 배포
                Bay Im
                 2024. 5. 24. 17:37
              
              
            
            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
    
    
  