Windows + Flask + Apache

안태현·2023년 8월 28일

2023-08-28 일 기준

나는 사용하지 않지만 문제를 해결해서 한번 적어본다

windows 환경에서 apache와 flaks 를 연동시키는데 있어서 아무리 따라해봐도 해결이 되지 않았다.

결론적으로 python path 문제였는데 많은 사람들에게 도움이 되었으면 해서 적어본다.

필요한 환경

Python
Git
apache
Visual Studio C++ 

빠르게 알아보는 문제 상황과 해결법

No Module name "encodings" error

#httpd.conf 에서 WSGIPythonHome에 있던 path에 /include 추가

ex)
WSGIPythonPath {WSGIPythonHome path}/include

아나콘다 환경에서도 똑같다


1. Windows Apache

https://www.apachelounge.com/download/
에서 다운로드 받은 apache 압축파일을 압축을 푼 후 C: 에 Apache24 폴더만 옮긴다.

그 후 C:\Apache24\ 를 환경변수를 추가해준다


2. Python Flask

여기서 나는 사실 Anaconda 환경에서 진행을 하였지만 혹시나 싶어서 python을 따로 설치를 한 후 진행을 하였다.

Version : 3.8.6

버전은 충돌이 날 수도 있다는 얘기가 있어서 많은 자료들이 사용하고 있는 버전으로 진행을 하였다.

https://www.python.org/downloads/

에서 파이썬을 설치하고 설치 과정에서 PATH 추가를 잊지않는다.

2.1 ISSUE

윈도우 10 환경에서 Python을 설치하면 cmd에서

python --version

을 하여도 버전이 나오지 않는 문제가 발생하였다.
이 문제의 해결법은 윈도우 왼쪽 하단 찾기에서 앱 실행 별칭 에 들어가서 python 관련 관리자들을 해제한다.

이 부분을 꼭 해결을 해야한다.
문제가 없다면 다음을 진행한다.

2.2 설치

pip install flask

를 진행한다.

그 후 https://github.com/GrahamDumpleton/mod_wsgi 에 있는 파일들을

git clone https://github.com/GrahamDumpleton/mod_wsgi.git

을 진행하고

cd mod_wsgi
python setup.py intsall

을 진행한다.


3. Flask 구성

나의 파일 디렉토리 구조는 다음과 같다.

C:Apache24 - flask - app - hello_world - __init__.py
                         |
                         - hello_world.wsgi
                         

파이썬 파일은

# __init__.py 파일

from flask import Flask
app = Flask(__name__)

@app.route('/test')
def hello_world():
    return 'hello world'

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

wsgi 파일은

# hello_world.wsgi 파일

import sys

sys.path.append('C:\\Apache24\\flask\\app\\hello_world')

from __init__ import app as application

이렇게 되어있다.

flask의 구성은 일단 이렇게 끝났다.


4. Apache 설정

C:\Apache24\conf 에서
httpd.conf 파일을 수정을 해야한다.

(사실 이리저리 많이 만져보느라 잘 기억은 안나지만 핵심인 것 같다.)

# 37번째 줄 
Define SRVROOT "C:/Apache24"

# 60번째 줄
Listen 5000

# 227번째 줄
ServerName localhost:5000

# 236번째 줄 (권한부여)
Require all granted
# 또는 주석처리

후 cmd 에서

mod_wsgi-express module-config

ex)
LoadFile 
LoadModule wsgi_module 
WSGIPythonHome 

에 나온 값들을 맨 마지막 줄에 다 넣어준다

그 후 WSGIPythonPath 를 추가해주는데 WSGIPythonPath 는 WSGIPythonHome 에 나와있는 path에 /include를 추가해준다

WSGIPythonPath {WSGIPythonHome path}/include

다음을 맨 마지막 줄에 넣어주고

Include conf/hello_world.conf

hello_world.conf 파일을 생성해준다.


5. hello_world.conf 파일 구성

<VirtualHost *:5000>
    ServerName localhost:5000
    WSGIScriptAlias / C:/Apache24/flask/app/hello_world.wsgi
    <Directory C:/Apache24/flask/app/hello_world>
        <Files hello_world.wsgi>
            Require all granted
        </Files>
    </Directory>
</VirtualHost>

여기까지 왔다면 Apache 설정은 거의 끝이다.

6. 실행

C:\Apache24\bin 폴더에서

httpd –k install
httpd –k restart

진행 후
localhost:5000/test
를 들어가본다.

만약 안된다면
C:\Apache24\logs 폴더에서 error.log 확인
지우고 저장하고 다시 httpd –k restart 을 진행하고 다시 확인하면 쉽게 확인 할 수 있다.

profile
ENTP의 무지성 코딩

1개의 댓글

comment-user-thumbnail
2023년 9월 1일

잘 읽고 문제 해결하고 갑니다.

답글 달기