현대오토에버 모빌리티 sw 스쿨

현대오토에버 모빌리티 SW 스쿨 웹/앱 SpringBoot 프로젝트 AWS EC2 배포하기3

종식당 2024. 10. 11. 17:31
728x90
반응형

 

현대오토에버 모빌리티 SW 스쿨 웹/앱 SpringBoot 프로젝트 AWS EC2 배포하기2

저번 aws EC2 배포 글에서는 스프링부트 서버와 연결하는 과정까지 진행했다. 이번에는 mysql과 연결해 보는 과정을 진행하려 한다.  현대오토에버 모빌리티 sw 스쿨 웹/앱 SpringBoot 프로젝트 AWS EC2

jxxng-syykk.tistory.com

 

이전에 스프링부트 서버와 mysql을 연결하는 것까지 진행했었다. 이번에는 github actions를 통해  EC2 서버에 코드를 배포하고 애플리케이션을 실행하는 과정을 자동화해보려 한다.

 

  • aws실행 및 인스턴스 생성 후 연결
sudo passwd
su <- sudo로 로그인

##############################################

파일공간확인
df -h

스왑 파일은 4GB(128MB x 32)
sudo dd if=/dev/zero of=/home/swapfile bs=128M count=32

❤️ ##스왑 파일은 2GB(128MB x 16)
sudo dd if=/dev/zero of=/home/swapfile bs=128M count=16

스왑 파일의 읽기 및 쓰기 권한을 업데이트cd $ 
cd ..
chmod 600 swapfile 

Linux 스왑 영역을 설정$ 
mkswap swapfile

스왑 공간에 스왑 파일을 추가하여 스왑 파일을 즉시 사용할 수 있도록$ 
sudo swapon swapfile

프로시저가 성공적인지 확인$ 
sudo swapon -s/etc/fstab 

free -h 확인

               total        used        free      shared  buff/cache   available
Mem:           957Mi       364Mi       183Mi       892Ki       572Mi       593Mi
Swap:          2.0Gi          0B       2.0Gi

###################################

파일을 편집하여 부팅 시 스왑 파일을 시작$ 
sudo vi /etc/fstab

파일 끝에 다음 줄을 새로 추가하고 파일을 저장한 다음 종료/
swapfile swap swap defaults 0 0

##############################################

$ sudo apt update
$ sudo apt install openjdk-17-jdk -y

$ java -version # 잘 설치됐는 지 확인

##############################################

date //시간확인
sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime

##########################

sudo apt install mysql-server

sudo mysql -u root -p

show databases;
create database hanyong5;

use mysql
alter user 'root'@'localhost' identified with mysql_native_password by '1234';

FLUSH PRIVILEGES;
exit




##############################################

$ git clone {git repository clone 주소}

##############################################

$ cd {프로젝트 경로}
$ ./gradlew clean build 
$ ./gradlew bootwar

$ chmod +x gradlew

$ cd build/libs
$ nohup java -jar ________.war & cd  

$ sudo lsof -i:8080 # 8080번 포트에 Spring Boot가 실행되고 있는 지 확인

##############################################

$ sudo lsof -i:8080 # 8080번 포트에 Spring Boot가 실행되고 있는 지 확인
$ sudo fuser -k -n tcp 8080 # 8080번 포트에 실행되고 있는 프로세스 종료

 

일단 인스턴스를 생성하고 이전과 똑같은 과정을 거쳐준다. 

스왑 공간에 스왑 파일 생성하고 mysql설치 및 설정, java설치 그리고 git clone을 진행 후 배포를 진행한다. 

 

처음에는 전체 파일이 저장되어 있는 폴더에서 github actions를 진행했을 때 계속 오류가 났다. 그래서 배포할 프로젝트의 폴더 안에 있는 파일들을 따로 빼고 거기서. github > workflows를 만들어 진행을 했다.

 

 

name: Deploy To EC2

on:
  push:
    branches:
      - main

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: SSH로 EC2에 접속하기
        uses: appleboy/ssh-action@v1.0.3
        with:
          host: ${{ secrets.EC2_HOST }}
          username: ${{ secrets.EC2_USERNAME }}
          key: ${{ secrets.EC2_PRIVATE_KEY }}
          script: |
            cd /home/ubuntu/2024deploy
            git config --global --add safe.directory /home/ubuntu/2024deploy
            sudo git pull origin main
            sudo ./gradlew bootwar
            sudo fuser -k -n tcp 8080 
            nohup java -jar build/libs/*SNAPSHOT.war > /dev/null 2>&1 &

 

그리고. yml파일을 위와 같이 적어주었다.

appleboy/ssh-action이라는 GitHub Actions 플러그인을 사용해 SSH를 통해 EC2 서버에 접속한다. 이 플러그인은 EC2 서버에 명령을 전달하는 데 사용된다.

 

  • SSH 접속에 필요한 정보
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}

 

위 정보들은 다음 사진처럼 깃허브 settings에서 secrets and variables의 actions에서 설정할 수 있다. 

 

 

 

EC2_HOST → ip주소

EC2_USERNAME → ubuntu

 

EC2_PRIVATE_KEY → 키페어 생성 후 복붙 (키페어 생성 후 보관해놔야 함)

 

  • 배포 스크립트
script: |
            cd /home/ubuntu/2024deploy
            git config --global --add safe.directory /home/ubuntu/2024deploy
            sudo git pull origin main
            sudo ./gradlew bootwar
            sudo fuser -k -n tcp 8080 
            nohup java -jar build/libs/*SNAPSHOT.war > /dev/null 2>&1 &

 

먼저 서버에서 배포할 프로젝트가 있는 디렉터리로 이동 후 git안전 디렉터리 설정을 진행해 준다. main브랜치에서 pull을 진행하고. war파일로 빌드를 진행한다. 혹시라도 8080 포트를 사용하고 있으면 종료하고 백그라운드로 패키징 된. war파일을 실핸한다.

 

위 설정을 해줌으로써 EC2 서버에 코드를 배포하고 애플리케이션을 실행하는 과정을 자동화할 수 있다. 

 

 

기존의 코드에서는 /foods 요청을 통해 모든 리스트들을 확인할 수 있었다. 

 

코드를 변경하고 commit & push를 진행한다. 위 설정을 통해 변경되 코드를 배포하고 실행시키는 과정을 자동화시켰기 때문에 바로 변경된 코드의 결과를 확인할 수 있다. 

 

 

push 할 때마다 커밋 메시지를 제목으로 workflow들이 github actions에 생성되는 모습을 확인할 수 있다.

 

/foods -> /foodview로 변경했기 때문에 기존의 foods에서는 오류가 나고 foodview를 통해 확인할 수 있다.


  • 마무리
    이전에 직접했던 모든 과정을 github actions를 통해 자동화시켰기 때문에 훨씬 편하게 배포를 진행할 수 있게 되었다.

 

 

728x90
반응형