반응형

<참조> https://facerain.club/fastapi-nginx/

Nginx로 FastAPI 배포하기


Nginx와 Gunicorn을 이용하여 제작한 FastAPI 서버를 배포하는 방법입니다.

개발 시 FastAPI를 구동할 때 주로 Uvicorn을 사용하지만, Uvicorn은 싱글 프로세스로 
동작하기에 많은 Request가 발생하는 Production 환경에서는 한계가 있습니다. 따라서 
다중 프로세스를 사용할 수 있는 WSGI 서버인 Gunicorn을 이용하여 서버를 구동합니다.

[참고] Uvicorn은 ASGI 서버인데 WSGI 서버인 Gunicorn을 이용?
Uvicorn에서 Gunicorn worker class를 제공하므로 Gunicorn의 Multi Process 관리와 
Uvicorn의 강력한 성능을 모두 활용하여 ASGI 서버를 구동할 수 있습니다.

Gunicorn 시작
---------------

Gunicorn을 설치 명령어는 아래와 같습니다.

pip install gunicorn

설치가 완료되면, Gunicorn(+uvicorn)으로 서버를 구동합니다.
아래 명령어를 fast api 프로젝트 폴더에서 실행해주세요.

gunicorn -k uvicorn.workers.UvicornWorker --access-logfile ./gunicorn-access.log 
            main:app --bind 0.0.0.0:8000 --workers 2 --daemon

옵션 설명
---------------------------------------------------------------------------
-k uvicorn.workers.UvicornWorker   :  Uvicorn worker 클래스를 사용
–access-logfile ./gunicorn-access.log:  Gunicorn 로그 파일 기록
main:app                                  :  main.py의 app 실행
-workers 2                                : worker process 개수 (CPU 코어*2)
–daemon                                  : Gunicorn을 백그라운드 데몬 구동
–bind 0.0.0.0:8000                       : 8000 포트에 서버 연결 
-----------------------------------------------------------------------------

Gunicorn이 정상 실행되는지 확인해봅시다. 아래 명령어를 입력해주세요. 
master process 한 개와 worker process가 설정 개수만큼 잘 나오나요?

ps -ef | grep gunicorn

그리고 <서버주소>:8000/docs로 fastapi 서버에 접속되는지 확인해봅시다.


Nginx 설정하기
-----------------

Gunicorn 서버와 Nginx를 연동하기 위해 Nginx를 설치합니다.

sudo apt-get install nginx

이제 Nginx config 파일을 작성합니다.
경로: /etc/nginx/sites-available 
파일: fastapi.conf 

sudo nano /etc/nginx/sites-available/fastapi.conf

fastapi.conf 파일에 아래 내용을 입력합니다.
server_name에 서버 또는 도메인 주소를 입력합니다.

server{
       server_name yourdomain.com;
       location / {
           include proxy_params;
           proxy_pass http://127.0.0.1:8000;
       }
}

sites-available의 fastapi.conf 파일을 sites-enable에 심볼릭 링크를 생성해줍니다.

sudo ln -s /etc/nginx/sites-available/fastapi.conf /etc/nginx/sites-enable/fastapi.conf 

[참고] sites-available의 fastapi.conf를 sites-enable에 심볼릭 링크를 생성하는 이유
Nginx에서 sites-available 내의 여러 설정 파일에서 실제 서버로 구동하고 싶은 파일은 
sites-enable로 옮겨주여야 합니다. 이때 심볼릭 링크를 사용하면 편하게 설정 파일을 
복사해서 옮길 수 있습니다.

Nginx 재시작 전에 설정 파일 동작을 확인하기 위해 Nginx 테스트 명령을 입력합니다.

nginx -t

테스트에 성공했다면 변경 사항을 적용하기 위해 Nginx를 재시작합니다.

sudo systemctl restart nginx

웹 브라우저에서 domain/docs에 접속된다면 성공입니다! 

[참고] 만약 테스트에 실패했다면
1) .conf 파일에 오타 혹은 문법 오류가 있는지 확인
2) 심볼릭 파일 생성 확인 (편집기에서 sites-enable의 fastapi.conf 파일을 열어보자!)

반응형

+ Recent posts