FAST API 배포

BackEnd_Ash.log·2023년 7월 17일
0

FASTAPI

목록 보기
2/3

FastAPI를 아마존 리눅스에 배포하는 기본적인 단계는 다음과 같습니다:

  1. AWS EC2 인스턴스 생성

    • AWS 콘솔에서 EC2 인스턴스를 생성하고, 원하는 리눅스 분배판(Amazon Linux 2, Ubuntu 등)을 선택합니다.
    • 보안 그룹을 설정할 때, 웹 애플리케이션에 접근할 수 있도록 80 또는 443 포트를 열어 둡니다.
  2. 인스턴스에 접속

    • SSH를 사용하여 EC2 인스턴스에 접속합니다. 이때 사용하는 key pair는 EC2 인스턴스 생성 과정에서 생성했던 것을 사용합니다.
  3. FastAPI 애플리케이션 준비

    • FastAPI 애플리케이션을 작성합니다. 이는 로컬에서 작성하거나, EC2 인스턴스 내에서 직접 작성할 수 있습니다.
  4. 패키지 설치

    • EC2 인스턴스에서 아래의 명령어를 실행하여 필요한 패키지들을 설치합니다.
      sudo yum update
      sudo yum install python3
      sudo yum install python3-pip
      sudo pip3 install fastapi
      sudo pip3 install uvicorn
  5. FastAPI 애플리케이션 업로드

    • SCP나 Git 같은 도구를 사용하여 FastAPI 애플리케이션을 EC2 인스턴스에 업로드합니다.
  6. 애플리케이션 실행

    • FastAPI 애플리케이션 디렉토리로 이동한 후, Uvicorn을 사용하여 애플리케이션을 실행합니다. 아래는 예시입니다.
      uvicorn main:app --host 0.0.0.0 --port 80
      이렇게 하면 외부에서 애플리케이션에 접속할 수 있습니다.

위의 단계는 기본적인 FastAPI 애플리케이션을 AWS EC2 인스턴스에 배포하는 방법을 설명한 것입니다. 실제 프로덕션 환경에서는 Nginx나 Apache와 같은 웹 서버를 통해 FastAPI를 실행하고, Gunicorn 등의 WSGI HTTP 서버를 사용하는 것이 일반적입니다. 또한, 서비스가 중단되지 않도록 systemd를 이용하여 서비스를 등록하는 것이 좋습니다.

마지막으로, FastAPI 애플리케이션에 따라 추가적인 설정(데이터베이스 연결, 환경 변수 설정 등)이 필요할 수도 있습니다. 이 부분은 FastAPI 애플리케이션의 특징에 따라 달라집니다.

백그라운드 running

위처럼 배포하게 되면 터미널 나가게 됐을경우 꺼지게 된다.

docker 로 배포

도커파일

# 도커 허브에서 이미지를 가져와서 이미지를 작업한다
FROM python:3.10.7

#컨테이너 실행 전 작동할 명령
# RUN (명령)
# 타임존 설정 (설정을 하지 않으면 시간 저장시 다른 시간대로 저장됨)

RUN ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
RUN echo Asia/Seoul > /etc/timezone

# 컨테이너 내 작업 경로
# WORKDIR (경로)
WORKDIR /app

# 파일 복사
COPY . .

# 파이썬 라이브러리 설치
RUN pip install -r requirements.txt

# 서버 실행
CMD python src/main.py

빌드할땐 os 에 따라서 빌드 방법이 다르다 platform 옵션을 붙여줘야한다.
일반 빌드
docker build -t 이미지이름 도커파일경로
M1 맥북 빌드
docker build —platform linux/amd64 -t 이미지이름 도커파일경로 -t 옵션 : 이미지 태그

배포
docker run -it --restart=always -d -p 8000:8000 --name 컨테이너이름 이미지이름
-it : 컨테이너 접속용
--restart=always : 도커 재구동시 자동 실행
-d : 백그라운드 실행
-p : 포트설정 ex) 80:8080 80으로 접속시 8080으로 인바운드
--name : 컨테이너 이름 설정

인바운드 설정
프론트엔드의 주소만 받는 것이 좋다.

일반 배포

uvicorn main:app --host 0.0.0.0 --port 80
에서 간단히 & 옵션만 붙여주면 된다.

FastAPI 애플리케이션을 백그라운드에서 돌리려면, 명령어에 &를 추가하면 됩니다. &는 리눅스에서 현재 명령어를 백그라운드에서 실행하게 만드는 특수 문자입니다.

uvicorn main:app --host 0.0.0.0 --port 80 &

그러나 이 방법은 세션이 종료될 경우 프로세스도 함께 종료될 수 있습니다. 이를 방지하려면 nohup 명령어를 사용할 수 있습니다. nohup은 hangup 신호를 무시하게 만들어, 사용자가 로그아웃하거나 세션이 종료된 후에도 프로세스가 계속 실행되도록 합니다.

nohup uvicorn main:app --host 0.0.0.0 --port 80 &

위 명령어를 실행하면 nohup.out이라는 파일에 표준 출력과 표준 에러가 기록됩니다. 다른 파일에 로그를 기록하려면 다음과 같이 실행하면 됩니다:

nohup uvicorn main:app --host 0.0.0.0 --port 80 > my.log 2>&1 &

이렇게 하면 my.log 파일에 표준 출력과 표준 에러가 함께 기록됩니다. 2>&1은 표준 에러를 표준 출력으로 리다이렉션하는 것을 의미합니다.

이러한 방법들은 임시적인 해결책이며, 프로덕션 환경에서는 systemdsupervisor와 같은 도구를 사용하여 서비스를 관리하는 것이 좋습니다. 이런 도구들은 서비스의 시작, 중지, 재시작 등을 쉽게 관리할 수 있게 해주며, 시스템 부팅 시에 서비스를 자동으로 시작하도록 설정할 수 있습니다. 또한 서비스가 비정상적으로 종료되었을 경우에도 자동으로 재시작하게 설정할 수 있습니다.

profile
꾸준함이란 ... ?

2개의 댓글

comment-user-thumbnail
2023년 7월 18일

유익한 글 잘 봤습니다, 감사합니다.

1개의 답글