순서
1. Apache (httpd) 설치 - 내 웹서버를 전세계에 뿌려줄 모듈
2. Flask 설치
3. mod_wsgi 설치 - Apache와 Flask를 연결시켜줄 모듈
4. 연결작업
5. 확인
1. Apache 설치
CentOS 를 설치하면 Apache는 기본적으로 설치되어있는 경우가 많다.
[root@localhost ~]# httpd -v Server version: Apache/2.2.15 (Unix) Server built: Jun 19 2018 15:47:03
yum install httpd httpd-devel
2. Flask 설치
독립적인 python 환경을 위해 anaconda 혹은 virtualenv 로 가상환경을 만들어 작업하기를 권장한다. 예전에는 virtualenv 를 이용하였으나 이번에는 anaconda 로 환경구축을 해보기로 했다.
anaconda 사용법 : http://chematdev.tistory.com/5
가상환경을 활성화 시킨후 pip install flask
로 설치한다.
3. mod_wsgi 설치
mod_wsgi 공식 홈페이지가서 소스코드 다운로드
https://pypi.org/project/mod_wsgi/
편하게 다운로드 링크를 복사하여 wget 한다. 그리고 압축해제한다.
[root@localhost Downloads]# wget https://files.pythonhosted.org/packages/9e/37/dd336068ece37c43957aa337f25c59a9a6afa98086e5507908a2d21ab807/mod_wsgi-4.6.4.tar.gz [root@localhost Downloads]# tar xzvf mod_wsgi-4.6.4.tar.gz [root@localhost Downloads]# cd mod_wsgi-4.6.4
configure 옵션에서 apxs 경로와 flask 에서 사용할 파이썬 경로를 설정한다. (기본 경로로 사용한다면 안써도 무방하다.)
향후 apache 가 구동될 때 여기서 설정해둔 파이썬 경로로 실행이 되기때문에 매우 중요한 부분이다.
[root@localhost mod_wsgi-4.6.4]# ./configure --with-apxs=/usr/sbin/apxs --with-checking for apxs2... no checking for apxs... /usr/sbin/apxs checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking for prctl... yes checking Apache version... 2.2.15 configure: creating ./config.status config.status: creating Makefile
정상적으로 완료되었다면 설치한다.
[root@localhost mod_wsgi-4.6.4]# make && make install .. 생략 .. chmod 755 /usr/lib/httpd/modules/mod_wsgi.so
설치가 제대로 되었다면 아파치 경로에 mod_wsgi.so 파일이 생성된다. (ls /etc/httpd/modules
)
4. Apache와 mod_wsgi연결작업
Flask 를 구동시킬 디렉토리를 생성한다.
[root@localhost ~]# cd /var/www/ [root@localhost www]# mkdir FlaskHome [root@localhost www]# cd FlaskHome/ [root@localhost FlaskHome]# mkdir FlaskApp
이 위치에서 mod_wsgi 가 읽어들일 파일을 만들고 아래 내용을 추가한다. vi flaskapp.wsgi
첫번째 줄은 가상환경의 파이썬경로이므로 본인에 맞는 경로를 쓴다.
마지막줄의 from FlaskApp 은 앞서만든 Flask를 구동시킬 디렉토리이름이 되겠다.
#!/home/shared/anaconda3/envs/Flask/bin/python import sys sys.path.insert(0,"/var/www/FlaskHome/") from FlaskApp import app as application
아파치 설정
아파치 config 파일을 열어서 맨 아래에 virtual host 를 추가한다. vi /etc/httpd/conf/httpd.conf
<VirtualHost *:80> DocumentRoot /var/www/FlaskHome/ LoadFile /opt/anaconda/envs/Flask/lib/libpython3.6m.so.1.0 LoadModule wsgi_module modules/mod_wsgi.so WSGIScriptAlias / /var/www/FlaskHome/flaskapp.wsgi WSGIScriptReloading On <Directory /var/www/FlaskHome/FlaskApp/> Order deny,allow Allow from all </Directory> <Directory /var/www/FlaskHome/FlaskApp/static/> Order deny,allow Allow from all </Directory> </VirtualHost>
위의 LoadFile 부분은 본인이 사용하는 파이썬경로에 있는 so 파일경로를 젛는다.
Flask 기본설정
향후 html 파일을 읽는 디렉토리인 templates 과 기타 파일들을 읽는 static 디렉토리를 행성하고 파이썬 init 파일을 만든다. (__init__.py
는 이 파일이 존재하는 디렉토리 (/var/www/FlaskHome/FlaskApp
) 을 파이썬으로 실행시킬경우 제일먼저 읽게되는 파일이라 생각하면 된다. 패키지나 앱 형태로 만들때 반드시 필요한 파일)
[root@localhost ~]# cd /var/www/FlaskHome/FlaskApp [root@localhost FlaskApp]# mkdir templates static [root@localhost FlaskApp]# vi __init__.py
from flask import Flask app = Flask(__name__) @app.route("/") def hello_world(): return "Hello World!" if __name__ == '__main__': app.run()
5. Apache 작동확인
[root@localhost ~]# service httpd start
만약 이러한 permission 관련 오류가 발생한다면
[root@localhost FlaskApp]# service httpd start Starting httpd: httpd: Syntax error on line 1015 of /etc/httpd/conf/httpd.conf: Cannot load /opt/anaconda/envs/Flask/lib/libpython3.6m.so.1.0 into server: /opt/anaconda/envs/Flas k/lib/libpython3.6m.so.1.0: cannot open shared object file: Permission denied [FAILED]
다음 명령어를 실행시킨다.
[root@localhost ~]# chcon -t textrel_shlib_t /opt/anaconda/envs/Flask/lib/libpython3.6m.so.1.0
SELinux 보안정책때문에 발생한다고 한다.
각종 권한문제는 SELinux 에서 발생한다고 생각하면된다. 나는 보안이 매우 중요한 서버가 아니기 때문에 SELinux 를 해제시켰다.
정상적으로 아파치가 실행되었다면 아이피를 통해 접속을 해본다. Internal Error 가 발생한다면 에러로그 파일을 확인한다 vi /etc/httpd/logs/error_log
'Dev > 웹서버' 카테고리의 다른 글
리눅스 (CentOS) 에 Plex Media Server 설치,업데이트 및 설정 (한국예능 인식 팁 등) (0) | 2018.08.21 |
---|---|
CentOS 에 토렌트서버 (Transmission) 설치 및 설정 (0) | 2018.08.20 |
댓글