<참조> 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 파일을 열어보자!)
'FastAPI' 카테고리의 다른 글
FastAPI - A python framework | Full Course (0) | 2022.01.28 |
---|---|
FastAPI 백그라운드 작업 (이메일 전송, 파일 저장 등 백그라운드 태스크) (0) | 2022.01.27 |
FastAPI 시작, 중지, 재시작 (2) | 2022.01.25 |
FastAPI 세 가지 에러 핸들링 방법 (0) | 2022.01.23 |
gunicorn 설정 (0) | 2022.01.12 |