[Fly.io] Fly.io로 스프링부트 백엔드 배포

OOING·2024년 2월 16일
2

기타 프로젝트

목록 보기
5/6

윈도우 기준으로 Fly.io 공식 문서를 정리 + Docker 초보도 쉽게 따라할 수 있도록 작성합니다!


모처럼 EC2를 이용해서 배포를 했었는데, 탄력적 IP를 이용해서 백엔드 배포도 했는데!

그렇게 됐다..

프론트랑 협업 좀 쉽게 하려고 배포부터 했는데, 돈 내기는 좀 그렇잖아요😣
그래서 다른 방식을 찾아보던 중, Fly.io가 괜찮아보여서 배포해보기로 결정!

일단 배포만 해놓았는데, 당장 보이는 장점으로는

  • 배포 방법이 간단하다. (도커 잘 모르는 나도 쉽게 했으니..)
  • IP가 아닌 DNS 주소를 받는다.

Docker 이미지 생성

Fly.io 설치, 배포하기 이전에 스프링부트로 애플리케이션을 Docker 이미지로 만들어야 합니다!

1. Docker Desktop 설치 및 실행

도커를 설치한 적 없는 경우, 도커를 설치하고 실행해줍니다.
도커 설치 방법은 너무 많이 있으니 생략!

2. jar 파일 생성

cmd 또는 powershell에서 프로젝트 파일이 있는 폴더로 이동하여 jar 파일을 생성합니다.

build ./gradlew

jar 파일은 /build/libs 폴더에 생성됩니다.

3. Dockerfile 생성

저는 jar 파일이 있는 폴더에 Dockerfile을 만들어줬습니다.

Dockerfile은 확장자 없이! 메모장 등 아무걸로나 만들면 됩니다. (CLI로 해도 무방)

  • Dockerfile 내용
FROM openjdk:17-alpine
ARG JAR_FILE={JAR 파일 이름}.jar
COPY ${JAR_FILE} {Docker에 저장되는 파일 이름}.jar
ENTRYPOINT ["java","-jar","{Docker에 저장되는 파일 이름}.jar"]

FROM : base 이미지 지정, 스프링부트에서 java 17 버전을 썼으므로 jdk17로 작성했습니다.
ARG : docker build 커멘드로 빌드할 때 인자 정의
COPY : 로컬의 디렉터리나 파일을 Docker 이미지의 파일시스템으로 복사
ENTRYPOINT : 이미지를 컨테이너로 띄울 때 반드시 실행돼야하는 명령어

4. image 생성

생성한 Dockerfile을 이용하여 Docker 이미지를 생성할 수 있습니다!
(flyctl 명령어로 바로 해도 되지만, Docker 초보이므로 미리 해봤습니다^0^)

docker build .

Dockerfile이 있는 폴더(jar 파일이 있는 폴더와 동일)로 이동하여, 해당 명령어를 실행해줍니다.
잠시 기다리면 Success 문구와 함께 Docker 이미지가 생성되었음을 알 수 있습니다!

그럼 이제 Fly.io로 배포를 할 준비가 끝났습니다.

Fly.io로 배포

1. flyctl 설치

❔ flyctl : Fly.io 작업할 수 있도록 하는 command line utility

pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"

Powershell에 명령어를 입력해 flyctl를 설치할 수 있습니다.

2. 회원가입/로그인

Fly.io가 처음인 경우 회원가입을, 계정이 있는 경우 로그인을 하면 됩니다.

flyctl auth login

어떤 블로그에 카드 등록을 해야 이용할 수 있다고 적혀있었는데, 난 등록하지 않았다.. (왜지??)

3. 앱 배포

Docker 이미지를 사용하여 거의 모든 종류의 앱을 빠르게 배포할 수 있습니다.

즉, 위에서 만든 Dockerfile을 가지는 jar 파일도 배포할 수 있습니다~!

flyctl launch

Docker 이미지 생성을 성공했었다면 이 명령어도 성공할 것입니다..
같은 Dockerfile을 이용해서 Docker 이미지를 만든 후, 그걸 배포하거든요.

Do you want to tweak these settings before proceeding?

이라는 질문이 나오는데, 여기서 y를 치면 Fly.io 사이트로 넘어가서 앱 관련 설정을 할 수 있도록 합니다.
저는 Name과 Region(도쿄)를 바꿨네요.

그리고 열심히 기다리면...

배포가 성공하고, 배포된 DNS를 알려줍니다!!

profile
HICE 19

0개의 댓글