Skip to content
Go back

fly.io를 이용한 ai서버 배포

Updated:
Edit page

Table of contents

Open Table of contents

flyctl 설치

이 글은 ubuntu18.04를 기준으로 작성했다.
os별 설치 명령어는 아래와 같다.
mac os

brew install flyctl  
#or
curl -L https://fly.io/install.sh | sh

Linux

curl -L https://fly.io/install.sh | sh

Window

iwr https://fly.io/install.psl -useb | iex

fly.io 로그인

flyctl auth login

위 명령어를 치면 브라우저가 열리거나 url이 뜨는데, 해당 주소로 들어가서 로그인을 하면 인증이 된다.

앱 런치

flyctl launch

런치를 하면 여러 질문들이 나오게 된다.
- 앱 이름(숫자, 소문자 및 대시만 사용가능) - 배포할 지역 선택 (작성자는 nrt(일본)으로 설정) - postgresql 데이터베이스 (작성자는 필요없어서 스킵) 그 다음 바로 fly.toml파일이 생성이 되고 deploy를 할 것인지 물어보게 되는데, 추가 설정을 하기 위해 no로 빠져나온다.

fly.toml 수정

여기의 내용에 따라 배포하는 방식이 결정된다.
volume을 설정하고 싶으면 명령어로 추가를 하고 여기에 volume에 관한 설정을 작성해주면 된다.(여기서는 스킵)
처음에는 internal_port가 8080(default)로 되어있는데 작성자는 fastapi를 8000번으로 열었기 때문에 8000으로 수정해준다.
그다음 auto_stop_machines을 false로 바꿔주는데 이것은 일정시간동안 요청이 오지 않으면 자동으로 서버가 꺼지는 설정이다.
수정이 끝나면 flyctl deploy로 배포해주면 된다.

machine 사양 변경

machine의 사양은 기본적으로 cpus 1개 ram 256mb으로 2개 구성되어있다.
작성자는 이미지 생성ai서버이기 때문에 높은사양이 필요해서 cpus 2개 ram 2048mb으로 변경했다. 변경법은 아래와 같다.
cpu

fly scale vm shared-cpu-2xl

ram

fly scale memory 2048

사양 확인

fly scale show

그 외의 명령어는 아래 document를 통해 확인할 수 있다.
fly.io document

github actions를 이용한 자동배포

github actions를 이용하여 PR을 할 때마다 자동으로 서버를 배포할 수 있는 기능이 있다.
해당 프로젝트에서 .github/workflows 디렉토리들을 생성해주고 fly.yml을 생성해준다.
yaml의 내용은 PR을 했을 때 배포가 되도록 작성했다.

name: fly Deploy 
on:
    pull_request:
        branches: ["main"]
        types:
        - closed

jobs:
    if_merged:
        if: github.event.pull_request.merged == true
        runs-on: ubuntu-latest
        environment: production
        steps:
        - uses: actions/checkout@v2
        - uses: superfly/flyctl-actions/setup-flyctl@master
        - run: flyctl deploy --remote-only
          env:
            FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}

여기서 uses의 의미로는,
레포지토리의 소스코드를 현재 워크스페이스(환경)로 체크아웃(복사)하는 액션이다.
즉, 해당 레포지토리의 코드를 github actions워크플로우 내에서 사용할 수 있도록 현재 환경으로 가져온다.
action/checkout@v2는 github에서 공식적으로 유지 관리되는 액션 중 하나이며, v2는 액션의 버전을 나타낸다.
버전 번호를 명시하면 액션의 특정 버전을 사용하게 된다. 버전을 생략하면 최신버전을 자동으로 사용한다.
superfly/flyctl-actions/setup-flyctl@master 는 flyctl을 사용하기 위해 사용한 것이다.

여기서 secrets는 해당 레포지토리->settings->secrets and variables->actions 에서 new repository secret을 통해 fly api token을 입력해주면 된다.
fly api token은 사이트 혹은 명령어를 통해 발급받을 수 있다. (작성자는 여기에서 인증에러가 났고 해결되면 다시 작성할 예정이다.)

fly.io의 무료정책

fly.io의 무료정책은 아래와 같다.

항목무료 제공량
가상 머신: 공유 cpu2,340시간/월
볼륨3GB
대역폭160GB/월
IP앱당 IPv6 무제한, 앱 당 IPv4 하나
인증서10개

가상머신은 한 달에 2,340시간을 무료로 제공하는데 31을 시간으로 계산하면 744시간이니까 약 3대정도까지 최저사양으로 무난하게 돌릴 수 있다.


Edit page
Share this post on:

Previous Post
우분투 cuda, cudnn 설치법
Next Post
Batch Normalization