full stack mysql, node js express,react

JS FULL STACK 9장 , fly.io로 배포하기

우주전사버즈 2024. 1. 18. 18:09

왜 공부했어

서비스 배포 과정을 공부하기 위해서.

이전에 만들어둔 서비스를 배포한다고 하면 aws나 네이버 클라우드 플랫폼을 통해 배포하는것만 어느정도 알고있었음

강사님이 얘기해주셨던 fly.io를 쓰는 강력한장점에 대해서 한가지가 기억에남았는데

내가만들어둔 서비스를 배포하고나서의 금액에 관한 부분이였는데 fly.io를 이용한 배포시 사용자 존재여부에따라 

동적으로 요금을 첨부한다? 라는 말이였다. 조금더 전문적으로 말하면 트래픽의 변동량에따라서 리소스를 조정하고 비용을 효율적으로 사용할수 있도록 도와준다는 것이였다. 아무래도 aws같은 플랫폼을쓰면서 사용자수가 많아질수록 굉장히 이용금액이 크다보니 스타트업이 아닌 규모가 큰 회사들이 따로 서버실을 두는것이지 않을까 

또한 이전 시간 배운 도커 컨테이너를 사용해서 애플리케이션을 배포한다고한다. 쉽게 관리할수있을것이다.

 

1월 22일 수정 ++

 fly.io를 이용한 배포시 사용자 존재여부에따라 동적으로 요금을 첨부한다? X

 배포시 설정해둔 사양(Cpu,Ram) 할당량을 초과하면 요금을 부과한다 O

사용자가 없을시에는 서버를 꺼두고 사용자가 있을시에는 서버를 킨다 O

내가만들어둔 프로그램코드 -> 이미지(도커)압축 -> 회사 어딘가 존재하는 지역의 서버 컴퓨터에 이미지 파일 전달해서 서버에서 굴려줌

 

fly.jo 내용 참조 영상

도커를 배웠던이유

결국 리눅스명령어를배운이유가 도커를 사용하기위함이였고 도커를 배우는것은 fly.io로 배포하는 최종목적을위한것이라는것을 알게되었다

 

fly.io 가입하고 카드 등록 

 

Sign In · Fly

 

fly.io

가입 -> 로그인 후 Dashboard로 들어가서 내 카드 등록하기 (비자카드여야한다고함 나는 내 토스카드 사용했음)

flyctl 설치

flyctl은 Fly.io 플랫폼을 사용할 수 있게 해주는 CLI 도구라고한다. 

 

mac home brew를 통해 설치 하였다.

brew install flyctl

 

home brew가 설치 되지 않은 경우

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

flyctl 설치 확인

flyctl

flyctl 을 이용하여 fly.io 에 로그인

flyctl auth login

명령어 입력하면 fly.io 사이트 켜지고 로그인

 

 

Dockerfile이 있는 프로젝트의 경로에서 터미널 실행후 명령어 입력

fly launch

아까 만든 Todo API 폴더 들어가서 fly launch

y/n 처음 뜨면 y치고 엔터

그럼 이런 설정사이트가 뜨는데 Region 도쿄로설정 (가까우니깐) 비교적 속도빠름 database명 정해주고

화면하단 confirm 어쩌고 누름

설정후 배포

fly deploy

 

에러 뜰시 체크 상황

"scripts": {
    "dev": "nodemon app.js",
    "start": "node app.js",
    "test": "echo "Error: no test specified" && exit 1"
  }

없으면 package.json에 추가해주기

 

dockerignore

  • package-lock.json 있다면 삭제

Dockerfile

# syntax = docker/dockerfile:1

# Adjust NODE_VERSION as desired
ARG NODE_VERSION=18.13.0
FROM node:${NODE_VERSION}-slim as base

LABEL fly_launch_runtime="Node.js"

# Node.js app lives here
WORKDIR /app

# Set production environment
ENV NODE_ENV="production"


# Throw-away build stage to reduce size of final image
FROM base as build

# Install packages needed to build node modules
RUN apt-get update -qq && \
    apt-get install --no-install-recommends -y build-essential node-gyp pkg-config python-is-python3

# Install node modules
COPY --link package-lock.json package.json ./
RUN npm ci

# Copy application code
COPY --link . .


# Final stage for app image
FROM base

# Copy built application
COPY --from=build /app /app

# Start the server by default, this can be overwritten at runtime
EXPOSE 3000
CMD [ "npm", "run", "start" ]