IIS 서버에 Python으로 만든 fastapi 웹서버 연동하기
1. IIS 서버에 Python, 관련 라이브러리 설치하기
먼저, IIS(Internet Information Services)는 윈도우 서버에서 제공하는 웹 서버 기능으로, 다양한 웹 애플리케이션을 운영할 수 있는 강력한 플랫폼이다. Python으로 작성한 FastAPI 서버를 IIS와 연동하면 윈도우 환경에서도 Python 웹 애플리케이션을 손쉽게 호스팅할 수 있다. 이 글에서는 IIS에 FastAPI를 연동하는 방법을 단계별로 설명하며, 각 단계별로 필요한 설정과 도구, 주의사항을 꼼꼼하게 다룬다. 전체적인 개요와 준비 단계부터 실제 연동 및 테스트, 배포 과정까지 하나씩 따라가면 IIS 환경에서 FastAPI 서버를 성공적으로 운영할 수 있다.
먼저 Python 환경과 FastAPI, 그리고 ASGI 서버인 Uvicorn을 설치하는 과정이다. Python은 공식 웹사이트(https://www.python.org/)에서 설치하고, pip를 이용해 FastAPI와 Uvicorn을 설치한다. 터미널에서 아래 명령어를 실행하면 된다.
pip install fastapi uvicorn
아래는 기본적인 fastapi 예제다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI on IIS!"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="127.0.0.1", port=8000)
이 코드를 실행하면 로컬에서 FastAPI 서버가 시작되고, 브라우저나 curl 명령어를 통해 접속하여 정상 작동하는지 확인할 수 있다. 개발 환경에서 먼저 기능을 점검한 후, IIS 연동을 위한 준비를 마친다.
IIS에 Python 애플리케이션을 연동하려면 wfastcgi 모듈을 사용해야 한다. 먼저 pip를 통해 wfastcgi를 설치한다.
pip install wfastcgi
설치가 완료되면, wfastcgi-enable 명령어를 사용해 IIS와의 연동 설정을 자동으로 구성한다. 관리자 권한으로 명령 프롬프트를 열고 아래 명령어를 실행한다.
wfastcgi-enable
만약 환경에 따라 경로가 다르다면, 직접 프로젝트 폴더 내에 웹.config 파일을 작성해 설정할 수 있다.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\Python39\python.exe|C:\Python39\Lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
</handlers>
<fastCgi>
<application fullPath="C:\Python39\python.exe" arguments="C:\Python39\Lib\site-packages\wfastcgi.py" />
</fastCgi>
</system.webServer>
</configuration>
2. 사이트 생성하고 fastcgi 모듈 추가하기
우클릭하여 사이트를 생성하는데 위에서 만든 프로젝트 폴더를 경로로 설정한다.
처리기 매핑을 더블클릭하여, 모듈 매핑 추가를 클릭한다.
모듈을 FastCgiModule로 설정하고 실행 파일 옵션에는 python.exe 경로 | python라이브러리의 wfastcgi.py 경로를 넣어준다.
모듈 명은 임의로 정해준다.
요청제한에 들어가서 요청이 다음에 매핑되는 경우에만 처리기 호출 옵션을 해제하고 확인 클릭한다.
3. 서버 FastCGI 설정
IIS 서버를 다시 클릭하여 FastCGI 설정을 클릭한다.
애플리케이션을 더블클릭하면 편집기가 뜬다.
환경변수를 편집하는데, PYTHONPATH 를 추가하고 value에 python.exe 경로를 넣어준다. WSGI_HANDLER에는
a2wsgi 라이브러리를 설치하여 아래와 같은 코드를 넣어준다. "파일명.앱명" = app.wsgi_app 으로 환경변수를 설정해준다.
wsgi_app = ASGIMiddleware(app)
pip install a2wsgi
4. 프로젝트 폴더 권한 설정하기 (IIS_IUSRS) 권한 추가하기
Library와 python이 설치된 폴더의 권한을 위와 같이 IIS_IUSRS를 추가하여 모든권한 허용을 설정한다. 프로젝트 폴더도 마찬가지다. 나는 venv를 써서 프로젝트 폴더 내에 환경설정을 해놨기 때문에 프로젝트폴더에만 설정했다.
5. 마치며
삽질을 이번에 좀 많이 한 것 같은데 fastapi로 서버 만드는게 생각보다 간단하고, IIS랑도 궁합이 안맞을 것 같았지만 막상 붙여놓으니 잘 작동해서 다행이다.
'Python > Common' 카테고리의 다른 글
[Python] Python 상위 폴더 경로 가져오기 (2) | 2022.08.31 |
---|---|
[Python] PyInstaller로 실행 파일(.exe) 만들기 (0) | 2022.06.17 |
[Python] Logging 모듈을 이용하여 Log 생성하는 법 (0) | 2022.06.16 |
[Python] 파이썬 Requests로 "multipart/form-data" Post 하는 법 (0) | 2022.06.15 |
[Python] PDF를 이미지로 변환하는 법 (Pdf2Image) (0) | 2022.06.09 |
댓글