docker나 기타 리눅스 서버로 서버를 실행하면 로그를 살펴보거나 기타 모니터링 하기 편리합니다.

하지만 iis에서 flask 서버를 서비스하면 기본적인 debug 로그도 살펴보기가 매우 어렵습니다.

 

anaconda3 환경에서 iis에 flask 서비스를 설정해둔 상태여서 기본적은 에러조차 로그로 파악하기가 어렵습니다

불친절한 IIS 서버

local 상에서 정상작동하는 서버인데 iis에서만 위와같은 500에러만 나오는 상태, 맨 윗줄부터 디버깅을 하다가 작성한 코드입니다.

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def check_packages():
    packages = [
        'flask', 'watchdog', 'pysftp', 'PIL', 'psycopg2', 'requests'
    ]

    package_status = {}
    for package_name in packages:
        try:
            __import__(package_name)
            package_status[package_name] = 'Installed'
        except ImportError:
            package_status[package_name] = 'Not Installed'

    return render_template('packages.html', package_status=package_status)

if __name__ == '__main__':
    app.run(debug=True)

 

templates/packages.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Package Status</title>
</head>
<body>
    <h1>Package Status</h1>
    <table border="1">
        <tr>
            <th>Package Name</th>
            <th>Status</th>
        </tr>
        {% for package_name, status in package_status.items() %}
        <tr>
            <td>{{ package_name }}</td>
            <td>{{ status }}</td>
        </tr>
        {% endfor %}
    </table>
</body>
</html>

 

윈도우 PC에서 서비스할 프로젝트가 시작되었습니다.

윈도우에 Docker를 설치해서 하려다 번거로워서, ASP.NET 개발 할 때 IIS를 사용한 경험을 되살려서 IIS에 Flask서버를 가동하였습니다.

 

아래와 같은 환경에서 설정하였습니다.

  • Anaconda3
  • Windows 10
  • python <= 3.8

아래는 도움받은 블로그 글입니다

https://blog.gapmoe.net/entry/IIS%EC%97%90-Flask-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0
https://urame.tistory.com/entry/IIS%EC%99%80-Flask-Python-%EC%97%B0%EB%8F%99

 


 

1. IIS & CGI 설정

윈도우 OS에 설치되어 있는 IIS를 활성화해줘야합니다.

아래 처럼 '인터넷 정보 서비스(IIS)' 내 항목들과 'CGI'를 체크하여 확인을 누른 후 설치과정을 진행합니다

 


2. FLASK 실행을 위한 설정

다른 서버 어플리케이션과 달리 설정할 변수들이 많아 번거로울 수도 있지만 한 번 세팅해두면 의외로 IIS도 서버 관리에 장점이 많은 어플리케이션입니다.

 

1) python 실행 경로

먼저 Python은 Ananconda3에서 실행되는 환경입니다.

저 같은 경우 가상환경 이름은 'flask'로 지정했으며 python이 실행되는 인터프리터 경로는 아래와 같습니다

C:\anaconda3\envs\flask\python.exe

 

2) 필요한 파이썬 패키지

wfastcgi, flask 두 가지 패키지가 필요합니다. 

아래 처럼 anaconda prompt에서 설치를 진행해줍니다.

(flask) C:\WINDOWS\system32> pip install wfastcgi
(flask) C:\WINDOWS\system32> pip install flask

 

3) flask 웹 서버 경로 설정

iis 가 정상적으로 설치되었다면 

"C:\inetpub\" 디렉토리가 생성됩니다. 

참고로 웹 브라우저상에서 'http://localhost' 경로를 호출하면 아래와 같은 페이지를 불러오게 되며, 기본적인 iis 설치가 완료된 상태임을 확인할 수 있습니다.

 

flask 프로젝트 경로는 아래의 경로에서 실행할 예정입니다.

C:\inetpub\flask

 

'wfastcgi.py'파일을 flask 프로젝트 폴더에 복사해줍니다.

저 같은 경우는 flask라는 anaconda3 가상공간에 wfastcgi 패키지를 설치하였으므로 해당 경로에서 파일을 찾을 수 있었습니다.

그리고 위 파일을 복사하여 flask 프로젝트에 복사해주고 'app.py'파일을 생성해줍니다

 

 


3. IIS와 Python Flask Mapping 설정

여기서 부터가 실제로 설정하는 단계입니다.

IIS 어플리케이션을 실행한 후 사이트 -> 웹 사이트 추가를 해줍니다.

'flask_test'라는 웹 사이트를 추가하였으며 포트는 '5000'으로 지정하였습니다

 

flask_test 웹 사이트의 처리기 매핑 설정 -> 처리기 매핑 클릭

 

우측 상단에 '모듈 매핑 추가',

아래 화면과 같이 설정값을 입력해줘야 합니다.

'파이썬 인터프리터 경로|프로젝트 내 wfastcgi.py 경로'

'|'기호로 연결된다는 점을 유의해야합니다.

C:\anaconda3\envs\flask\python.exe|C:\inetpub\flask\wfastcgi.py

 

마지막으로 FastCGI를 설정해줘야합니다.

IIS내 최상단 장치명 -> FastCGI 설정 클릭 -> 환경변수 설정하여 아래 두 개의 환경 변수를 설정합니다

NAME : PYTHONPATH
VALUE : C:\inetpub\flask  (flask 프로젝트 폴더 경로)
---------------------
NAME : WSGI_HANDLER
VALUE : app.app

 

 


4. Flask Test 페이지 코드 입력

flask 프로젝트 폴더 내 'app.py'파일에 아래와 같은 코드를 입력합니다.

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return "Hello, World!"

if __name__ == '__main__':
    app.run()

 

그리고 웹 사이트 생성하면서 설정한 포트(5000)로 접속하여 결과값을 확인합니다.

+ Recent posts