안녕하세요.
FastAPI로 서버를 실행할 때, http가 아닌 보안이 추가된 https 프로토콜로
서버를 실행할 수 있는 방법을 간략하게 정리해보도록 하겠습니다.
1. SSL 인증서 발급
먼저, https로 서버를 실행하기 위해서는 ssl 인증서가 필요합니다.
ssl 인증서는 openssl, mkcert, certbot, AWS Certificate Manager 등
다양한 방법으로 발급받을 수 있는데요.
이 중 어떤 방법으로 발급받던 HTTPS 프로토콜 적용은 가능합니다.
다만, 보안 및 원활한 실행을 위하여 self-signed 인증서보다는
도메인 주소와 연결된 ssl 인증서를 발급받기를 권장드립니다.
여기서는 mkcert를 통해서 인증서를 발급받는 명령어의 예시를 다뤄보도록 하겠습니다.
이렇게 발급 받은 인증서는 self-signed 인증서라 배포용보다는 테스트용으로 적합합니다.
참고로, 해당 명령어는 리눅스를 기준으로 작성되었습니다.
# 1. mkcert 설치
sudo apt install libnss3-tools
wget -q https://dl.filippo.io/mkcert/latest?for=linux/amd64 -O mkcert
chmod +x mkcert
sudo mv mkcert /usr/local/bin/
# 2. mkcert ssl 인증서 발급
mkcert -install
mkcert <IP 주소> localhost
# 3. 결과 확인 예시
127.0.0.1+1-key.pem -> keyfile
127.0.0.1+1.pem -> certfile
2. FastAPI 서버를 HTTPS로 실행
이제 ssl 인증서가 발급되었다면 FastAPI 서버에서 이 파일들을 지정해주시면
http가 아닌 https로 실행이 완료됩니다.
uvicorn으로 https 서버를 실행하는 예시 명령어는 다음과 같습니다.
참고로, 포트 번호는 https 기본 포트인 443 포트로 실행하는 것을 권장하며,
--ssl-keyfile 및 --ssl-certfile은 인증서 파일이 저장된 디렉토리를 각각 지정해주시면 됩니다.
uvicorn main:app --host 0.0.0.0 --port 443 \
--ssl-keyfile ./127.0.0.1+1-key.pem \ # 인증서 파일이 저장된 디렉토리를 지정
--ssl-certfile ./127.0.0.1+1.pem
이 글에서 다루어졌던 내용은 정식 배포용보다는 테스트용 https 적용 방법에 가깝지만
그래도 이 글이 서버 배포 과정에 도움이 되셨기를 기원해봅니다.
다음 번에 기회가 된다면 정식 배포용 서버를 배포하는 적절한 방법에 대한
포스팅을 작성해보도록 하겠습니다. 잘 봐주셔서 감사드립니다.
'Python > Backend' 카테고리의 다른 글
FastAPI docs 작성 방법 정리 (0) | 2024.07.30 |
---|---|
FastAPI CORS 설정 방법 코드 예제 (0) | 2024.06.30 |
FastAPI 비동기 세션 처리 AsyncSession 활용 예제(sqlalchemy) (0) | 2024.06.01 |