본문 바로가기
Back-end/배포

[배포] EC2에 SpringBoot와 ai-server 배포하기

by 잔디🌿 2024. 9. 27.

    저번 멋사 해커톤과 충청톤 때 프로젝트를 했었는데 그 때는 거의 다른 백엔드 팀원 분이 해주셨다. 하지만 이번 어흥톤때는 내가 직접 배포해보라고 하셨다. 

    비록 팀원분을 많이 괴롭혔지만 결국 성공했다!

     

    인스턴스 만들기

    인스턴스는 저번 그대로 만들기로 했다! 저번에 처음에 프리티어로 생성하니까 너무 잘 돌아가지 않았다. 그래서 살짝 돈이 들더라도 좋은 서버를 사용하기로했다.

    인스턴스는 우분투를 사용하도록 하였고, 스토리지 볼륨은 20GB이다.

    인스턴스 유형은 t3.large이다.

    키 페어는 새로 만들었다. 펨키 이름은 좀 복잡하게 해야 좋다.

    이번에도 소중한 펨키는 내가 가지고 있기로 했다. 펨키는 너무 중요하다. 팀원 분은 그래서 키파일을 메신저로 보내는 것도 하지 않았었다. 잘 관리해야겠다.

     

    그 다음 보안그룹을 선택한다. 

    위와 같이 보안그룹을 설정하였다.

     

    이후 인스턴스 생성을 하면 인스턴스 세부 정보를 볼 수 있고, 여기서 퍼블릭 주소가 나온다!

     

    이 과정에서 에러를 많이 만났다. 이 부분은 따로 정리하였다.

     

    인스턴스 연결

    터미널에서 펨키로 연결하는 방법도 있지만 더 쉬운 방법이 있다. 바로 aws로 바로 접속하는 방법이다.

    우측 상단에 연결을 누르고 나오는 창에서 연결버튼 한번 더 누르면

    이런 화면이 뜬다.

    여기서 배포작업을 하면 된다.

     

    git clone하기

    우리가 작업하고 git에 올려둔 코드를 clone해서 ec2에 가져와야한다.

    git clone 레포주소

     

    늘 하던대로 하면 된다.

    ls명령어로 홈디렉토리의 폴더를 확인해보면 clone한 폴더들을 확인할 수 있다.

    나는 두개의 레포를 clone했다.

     

    java 설치하기

    우리는 spring을 배포하므로 이를 실행할 java를 설치해야한다.

    wget -O - https://apt.corretto.aws/corretto.key | sudo gpg --dearmor -o /usr/share/keyrings/corretto-keyring.gpg && \
    echo "deb [signed-by=/usr/share/keyrings/corretto-keyring.gpg] https://apt.corretto.aws stable main" | sudo tee /etc/apt/sources.list.d/corretto.list

     

    위 명령어를 통해 Java의 공개키를 다운받은다음

     

    sudo apt-get update;
    sudo apt-get install -y java-17-amazon-corretto-jdk

    위 명령을 통해 java를 설치한다. 나는 java 17버전을 설치했다.

     

    Docker 설치하기

    우리는 Docker 위에 ai모델과 mysql을 올리므로 도커설치가 필요했다.

    https://jongsky.tistory.com/49

     

    AWS EC2 Ubuntu22.04 환경에 Docker 설치 (feat. Docker-compose 설치)

    1. 글을 작성하게 된 계기 서비스를 배포하면서 docker를 ubuntu22.04 환경에 설치하는 경우가 많아졌다. 물론 나중에는 aws 이미지로 떠서 해야하겠지만, 추후에도 계속 필요할 것 같아 글을 작성해둔

    jongsky.tistory.com

    나는 여기 글을 참고하여 따라하였다.

     

    git에 없는 파일 업로드하기

    application.yml 과 같이 중요한 파일은 git에 업로드하지 않는다. 그래서 이 파일들은 수동으로 올려주어야 한다. 

    EC2에서 올리기

    이 방법은 파일이 단순한 코드일 때 사용하면 좋다.

    mkdir 폴더명
    vi 파일명

     이런 식으로 폴더와 파일을 만들고, 파일 안에 코드를 넣어주면 된다.

     

    scp 사용하기

    scp는 로컬 터미널에서 명령어를 통해서 업로드 하는 것이다. 펨키를 넣어줘야해서 다소 복잡하지만, 파일이 통째로 올라가서 깔끔하다.

     scp -i 펨키명.pem 올릴 파일명 ubuntu@서버 ip:서버 내에서 파일 올릴 위치

    명령어는 이러하다.

     

    Docker 실행하기

    docker build -t my-fastapi-app .
    docker run -p 8000:8000 my-fastapi-app

    ai-server 디렉토리에 들어가서 위 명령어를 차례로 입력하였다.

    위에 있는 명령어는 Dockerfile을 사용하여 어플리케이션을 만들고, 이를 my-fastapi-app라는 이름의 이미지로 저장하는 것이다.

    아래에 있는 명령어는 해당 이미지를 실행하는 명령어이다. 

     

    서버실행

    드디어 마지막 단계이다.

    스프링 코드가 있는 디렉토리에 들어가서 

    ./gradlew bootJar

    명령어로 springboot를 jar로 변환한다.

    그 다음 

    cd build/libs

     

    명령어로 이동한 후 

     

    nohup java -jar 0.0.1-SNAPSHOT.jar &

    명령어로 서버를 실행한다. 이 때 jar 파일 이름은 ls로 나온 파일 이름으로 해준다.

    이렇게 하면 서버가 백그라운드에서 실행되고, 로그는 

    cat nohup.out

    명령어로 확인할 수 있다.

    배포 성공!

     

    에러해결

    배포 과정에서 에러를 꽤 많이 만났다.

    이 부분은 따로 정리했다.

    https://ethereal-coder.tistory.com/257

     

    [에러 해결] Error creating bean with name~

    분명 잘 돌아가는 코드가 깃에 올라가있었고, 이를 그대로 clone해와서 yml파일만 추가했는데 이러한 오류가 났다.빈이 등록이 안되어있다고? 그럴 리가 없었다...그러다가 yml파일과 @Value로 연결

    ethereal-coder.tistory.com

     

     

    https://ethereal-coder.tistory.com/258

     

    [에러해결] RUN pip install --no-cache-dir -r requirments.txt

    배포할 때 EC2에 도커를 설치하고 여기에 인공지능 모델을 띄우기 위해서 docker build -t my-fastapi-app . 명령어를 쳤는데RUN pip install --no-cache-dir -r requirments.txt 에러가 났다. 찾아보니까 디스크 공

    ethereal-coder.tistory.com

     

    https://ethereal-coder.tistory.com/259

     

    [에러해결] bash: ./gradlew: Permission denied, permission denied while trying to connect to the Docker

    bash: ./gradlew: Permission denied배포 과정에서 드디어 java-17 설치를 완료하고, ./gradlew bootJar 명령어를 입력했는데,permission denied라는 에러가 떴다. 이 에러는 권한이 없다는 의미이다. chmod +x ./gradlew

    ethereal-coder.tistory.com

     

     

    출처

     

    https://velog.io/@jjjaehoon/AWS-EC2-ubuntu-%EC%84%9C%EB%B2%84%EC%97%90-java-17-%EC%84%A4%EC%B9%98

     

     

    AWS EC2 ubuntu 서버에 java 17 설치

    프리티어 EC2 ubuntu 서버에 java 17을 설치하는 간단한 과정입니다. 우선 아래의 명령어를 통해 AWS Corretto java의 공개 키를 다운하고, APT에 추가하여 AWS Corretto Java를 설치 및 업데이트할 때 공식 APT

    velog.io