아파치 웹서버와 장고 연동 프로그램 : mod_wsgi
. CentOs 7~ . Python3.6 (Centos 7~8이 Python3.6까지 지원하고 있음)
sudo dnf update
$ sudo dnf install python3.*
$ sudo dnf install http http-devel
$ sudo dnf install git
/home/centos> mkdir VENV
/home/centos> cd VENV
/home/contos> virtualenv --python python3.6 v3PyBook
/home/centos> source VENV/v3PyBook/bin/activate
(v3PyBook)/home/centos>
(v3PyBook)/home/centos> su
password: [root 사용자 비밀번호 입력]
(v3PyBook)/home/centos> pip install Django==2.0
/home/centos> mkdir pyBook
/home/centos> cd pyBook
/home/centos/pyBook>git clone 'https://github.com/millni/Django-hanbit.git'
/home/centos/pyBook>mv python-project ch8
. ch8/mysite/settings.py 파일
# DEBUG = True
DEBUG = False
# ALLOWED_HOST = ['localhost','127.0.0.1']
ALLOWED_HOST = ['192.168.111.100','localhost','127.0.0.1']
STATIC_ROOT = os.path.join(BASE_DIR, 'www_dir', 'static')
. (가상환경에서 실행)
(v3PyBook)/home/centos/pyBook/ch8> python manage.py collectstatic
# SECRET_KEY = 어쩌구저쩌구~~
with open(os.path.join(BASE_DIR, 'www_dir', 'secret_key.txt')) as f:
SECRET_KEY = f.read().strip()
/home/centos/pyBook/ch8/www_dir> vim secret_key.txt
어쩌구저쩌구~~~
DATABASES = {
. . .
'NAME': os.path.join(BASE_DIR, 'db', 'db.sqlite3'),
}
/home/centos/pyBook/ch8> mkdir db
/home/centos/pyBook/ch8> mv db.sqlite3 db/db.sqlite3
/hoem/centos/pyBook/ch8> python manage.py migrate
/home/centos/pyBook/ch8> sudo chmod 777 db
/home/centos/pyBook/ch8> sudo chmod 666 db/db.sqlite3
/home/centos/pyBook/ch8> sudo chmod 777 log
/home/centos/pyBook/ch8> sudo chmod 666 log/mysite.log
내장모드 : 파이썬에 mod_wsgi 모듈을 내장하여 WSGI 프로그램을 실행하는 방식. 소스 반영 시, 해당 아파칭에 배치중인 모든 어플리케이션 재가동 해야 함
데몬모드 : WSGI 전용 프로세스에서 WSGI 어플리케이션을 관리함. 상대적으로 적은 메모리 차지하고 각 어플리케이션 간 영향을 최소화 함. 데몬모드를 권장함
. mod_wsgi 프로그램 컴파일 파이썬 버전과 장고 어플리케이션 실행하는 파이썬 버젼이 같아야 함
가상환경 내에서 mod_wsgi 설치
/home/centos/VENV/v3PyBook> source bin/activate
(v3PyBook)/home/centos/VENV/v3PyBook>sudo pip install mod_wsgi
//만약 sudo 가 안 먹히면, su 를 입력하여 관리자 모드에서 pip 명령어 실행
설치 확인
. mod_wsgi-express 명령으로 아파치 기본페이지 동작 확인
(v3PyBook) $ mod_wsgi-express start-server
. mod_wsgi-express 로 내 프로젝트 동작 확인 (꼭 ch8에서 확인할 것)
(v3pyBook)/home/centos/pyBook/ch8> mod_wsgi-express start-server mysite/wsgi.py
. python 테스트 서버로 프로젝트 동작 확인
(v3pyBook)/home/centos/pyBook/ch8> python manage.py runserver
mod_wsgi를 아파치의 확장모듈로 설치 하기
아파치 설정 수정하기
(v3PyBook)/home/centos/VENV/v3PyBook > sudo /home/centos/VENV/v3PyBook/bin/mod_wsgi-express install-module
LoadModule wsgi_module "/usr/lib64/httpd/modules/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"
WSGIPythonHome "/home/centos/VENV/v3PyBook"
(v3PyBook) $ cd /etc/httpd/conf.modules.d/
(v3PyBook) $ sudo vi 10-wsgi.conf
LoadModule wsgi_module "/usr/lib64/httpd/modules/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so"
$ cd /etc/httpd/conf.d/
$ sudo vim django.conf
WSGIScriptAlias / /home/centos/pyBook/ch8/mysite/wsgi.py //1
WSGIPythonHome /home/centos/VENV/v3PyBook //2
WSGIPythonPath /home/centos/pyBook/ch8 //3
<Directory /home/centos/pyBook/ch8/mysite> // 프로젝트 디렉토리
<Files wsgi.py>
Require all granted // 접근허가
</Files>
</Directory>
Alias /static/ /home/centos/pyBook/ch8/www_dir/static/
<Directory /home/centos/pyBook/ch8/www_dir/static> // 정적파일 디렉토리
Require all granted //접근 허가
</Directory>
$ sudo getenforce
Enforcing
$ sudo setenforce permissive
$ sudo getenforce
Permissive
로그인 중에만 일시 적용되며, 완전히 변경하고 싶으면 /etc/selinux/config 파일에서 변경 해야 함
아파치를 가동한다 $ sudo apachectl start
$ cd /etc/httpd/conf.d/
$ sudo vim django.conf
WSGIScriptAlias / /home/centos/pyBook/ch8/mysite/wsgi.py //1
WSGIDaemonProcess mygroup python-home=/home/centos/VENV/v3PyBook python-path=/home/centos/VENV/pyBook/ch8 //2
WSGIProcessGroup mygroup //3
<Directory /home/centos/pyBook/ch8/mysite> // 프로젝트 디렉토리
<Files wsgi.py>
Require all granted // 접근허가
</Files>
</Directory>
Alias /static/ /home/centos/pyBook/ch8/www_dir/static/
<Directory /home/centos/pyBook/ch8/www_dir/static> // 정적파일 디렉토리
Require all granted //접근 허가
</Directory>
아파치를 가동한다
$ sudo apachectl start
웹 브라우저에서 http://localhost 를 실행 시, 내 프로젝트 메인화면이 실행된다.