Fly.io
를 이용한 배포 가이드이 글은 Fly.io를 이용해 Java Spring Boot 애플리케이션을 배포하는 방법과 실제로 겪었던 문제점 및 주의점을 포함하고 있습니다.
Fly.io
란?Fly.io는 애플리케이션을 쉽게 배포하고 확장할 수 있는 클라우드 플랫폼이다. 컨테이너 기반 배포를 지원하며, 간단한 명령어로 애플리케이션을 전 세계에 배포할 수 있다.
Fly.io
배포 과정Fly.io
계정 생성 및 로그인Fly.io에 접속하여 계정을 생성한다. 생성 후 CLI 도구를 사용하여 로그인한다.
flyctl auth login
Fly
앱 생성애플리케이션을 배포할 새로운 Fly
앱을 생성한다.
flyctl apps create safe-account
Dockerfile
작성프로젝트 루트 디렉토리에 Dockerfile
을 작성한다.
# Use the official OpenJDK 17 image as a parent image
FROM openjdk:17-jdk-slim
# Set the working directory
WORKDIR /app
# Copy the jar file into the container
COPY target/safe_account-0.0.1-SNAPSHOT.jar app.jar
# Run the jar file
ENTRYPOINT ["java", "-jar", "app.jar"]
fly.toml
파일 생성Fly 앱 설정을 위한 fly.toml
파일을 생성하고 다음과 같이 작성한다.
# fly.toml app configuration file generated for safe-account on 2024-07-24T15:46:34+09:00
#
# See https://fly.io/docs/reference/configuration/ for information about how to use this file.
#
app = 'safe-account'
primary_region = 'nrt'
[http_service]
internal_port = 8080
force_https = true
auto_stop_machines = 'stop'
auto_start_machines = true
min_machines_running = 0
processes = ['app']
[[vm]]
memory = '1gb'
cpu_kind = 'shared'
cpus = 1
마지막으로 Fly
에 애플리케이션을 배포한다.
flyctl deploy
모든 과정을 마치고 https://safe-account.fly.dev 에 접속하면 정상적으로 실행이 되는 모습을 볼 수 있다!
애플리케이션이 Java 17로 컴파일되었지만, 컨테이너에서 Java 11 Runtime을 사용하여 java.lang.UnsupportedClassVersionError
오류가 발생했다. 이를 해결하기 위해 Dockerfile에서 OpenJDK 17 이미지를 사용하도록 수정했다.
애플리케이션이 기본적으로 8080 포트에서 실행되도록 설정되어 있었으나, 실제 실행 포트는 9091로 설정되어 있었다. Fly의 기본 포트는 8080이므로 application.yml
파일을 수정해 두 설정을 일치시켰다.
server:
port: 8080
address: 0.0.0.0
무료 플랜에서는 auto_stop_machines
설정을 none
으로 두어도 경고가 발생했다. stop
으로 설정하여 문제를 해결했다.
auto_stop_machines = "stop"
이번 프로젝트를 통해 Fly.io
를 처음 사용해보았는데, 간단한 명령어로 애플리케이션을 배포할 수 있어 매우 편리했다. 하지만 처음 사용하는 도구인 만큼 다양한 문제점들이 발생했지만, 이를 해결해 나가면서 배포 과정을 익힐 수 있었다.
나같은 문제를 겪는 사람들에게 조금이라도 도움이 될 수 있었으면 좋겠다!