윈도우 기준으로 Fly.io 공식 문서를 정리 + Docker 초보도 쉽게 따라할 수 있도록 작성합니다!
모처럼 EC2를 이용해서 배포를 했었는데, 탄력적 IP를 이용해서 백엔드 배포도 했는데!
그렇게 됐다..
프론트랑 협업 좀 쉽게 하려고 배포부터 했는데, 돈 내기는 좀 그렇잖아요😣
그래서 다른 방식을 찾아보던 중, Fly.io가 괜찮아보여서 배포해보기로 결정!
일단 배포만 해놓았는데, 당장 보이는 장점으로는
- 배포 방법이 간단하다. (도커 잘 모르는 나도 쉽게 했으니..)
- IP가 아닌 DNS 주소를 받는다.
Fly.io 설치, 배포하기 이전에 스프링부트로 애플리케이션을 Docker 이미지로 만들어야 합니다!
도커를 설치한 적 없는 경우, 도커를 설치하고 실행해줍니다.
도커 설치 방법은 너무 많이 있으니 생략!
cmd 또는 powershell에서 프로젝트 파일이 있는 폴더로 이동하여 jar 파일을 생성합니다.
build ./gradlew
jar 파일은 /build/libs
폴더에 생성됩니다.
저는 jar 파일이 있는 폴더에 Dockerfile을 만들어줬습니다.
Dockerfile은 확장자 없이! 메모장 등 아무걸로나 만들면 됩니다. (CLI로 해도 무방)
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 : 이미지를 컨테이너로 띄울 때 반드시 실행돼야하는 명령어
생성한 Dockerfile을 이용하여 Docker 이미지를 생성할 수 있습니다!
(flyctl 명령어로 바로 해도 되지만, Docker 초보이므로 미리 해봤습니다^0^)
docker build .
Dockerfile이 있는 폴더(jar 파일이 있는 폴더와 동일)로 이동하여, 해당 명령어를 실행해줍니다.
잠시 기다리면 Success 문구와 함께 Docker 이미지가 생성되었음을 알 수 있습니다!
그럼 이제 Fly.io로 배포를 할 준비가 끝났습니다.
❔ flyctl : Fly.io 작업할 수 있도록 하는 command line utility
pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"
Powershell에 명령어를 입력해 flyctl를 설치할 수 있습니다.
Fly.io가 처음인 경우 회원가입을, 계정이 있는 경우 로그인을 하면 됩니다.
flyctl auth login
어떤 블로그에 카드 등록을 해야 이용할 수 있다고 적혀있었는데, 난 등록하지 않았다.. (왜지??)
Docker 이미지를 사용하여 거의 모든 종류의 앱을 빠르게 배포할 수 있습니다.
즉, 위에서 만든 Dockerfile을 가지는 jar 파일도 배포할 수 있습니다~!
flyctl launch
Docker 이미지 생성을 성공했었다면 이 명령어도 성공할 것입니다..
같은 Dockerfile을 이용해서 Docker 이미지를 만든 후, 그걸 배포하거든요.
Do you want to tweak these settings before proceeding?
이라는 질문이 나오는데, 여기서 y를 치면 Fly.io 사이트로 넘어가서 앱 관련 설정을 할 수 있도록 합니다.
저는 Name과 Region(도쿄)를 바꿨네요.
그리고 열심히 기다리면...
배포가 성공하고, 배포된 DNS를 알려줍니다!!