통합검색

Python

CentOS7 Apache 환경에 Python Django 설치하기




CentOS 7 환경에서 Python Django를 설치한 뒤 Apache의 Virtual Host에 연결하여 웹에서 띄우는 방법을 설명한다.
사전에 Python3와 Apache2가 설치되어 있어야 하며, Virtual Host 구동을 위해 'py' 라는 user와 호스팅 경로(/home/py/public_html)를 만들어둔 상태다.




[!]Python 가상환경 진입 및 프로젝트, 앱 생성[/!]
Django를 사전에 만들어 놓은 홈디렉토리(/home/py/public_html/)에 설치해도 구동에 문제는 없지만,
로컬 python환경의 의존적이지 않은 독립적인 구동 환경 구성을 위해
가상환경을 생성한 다음 가상환경내에서 django 설치와 프로젝트 생성, 앱 생성등의 작업을 수행한다.
 
우선, django 프로젝트를 생성할 미리 만들어 놓은 홈디렉토리로 이동한다.
 
#cd /home/py/public_html/

pyenv 명칭의 새로운 가상환경을 생성한다.
 
# python3 -m venv pyenv

위와 같이 가상환경을 생성하면 현재 경로에 pyenv 디렉토리가 새로 생긴 것을 확인할 수 있다.
새로 생성된 디렉토리 내에 가상환경 관련 실행파일이 위치해 있으며,
아래 명령어를 통해 가상환경에 진입한다.
 
# source pyenv/bin/activate

위와 같이 진입하게 되면 프롬프트상에 '(penv)' 가 추가되며, 진입에 성공한다.
이제, django 패키지를 설치하면 된다.
 
(pyenv) pip3 install django

설치가 완료 되었다면,
같은 경로에 testproject 명칭의 django 프로젝트를 생성한다.
 
(pyenv) django-admin startproject testproject

프로젝트 생성이 완료되면 방금 전 생성한 pyenv와 나란히 testproject 디렉토리가 생성된다.
그런 다음, testproject 디렉토리로 들어간다.
 
(pyenv) cd testproject

testproject 내부에 새로운 앱을 생성하기 위해 아래와 같이 명령어를 실행한다.
 
(pyenv) python3 manage.py startapp testapp

현재 경로에 testapp 디렉토리가 새로 생긴 것을 확인할 수 있다.

이제 모든 가상환경 셋팅이 마무리 되었으며, 아래 명령어로 
가상환경에서 빠져 나온다.
 
(pyenv) deactivate

현재까지 생성된 디렉토리의 구성은 아래와 같다.






[!]Django 에 필요한 teplates, static 디렉토리 생성[/!]
Django View역할을 할 html 파일들이 위치할 templates 디렉토리와
img, css, js 등의 정적 파일들이 위치할 static 디렉토리를 생성하기 위해
앞서 생성된 testapp 디렉토리로 이동한다
 
# cd testapp

templates, static 디렉토리를 생성한다.
 
# mkdir templates static

vscode 등에서 파일을 작성하거나 수정할 수 있어야 하기에 적절히 권한을 부여한다.
 
# chown -R py.py templates static
# chmod -R 705 templates static




[!]Django wsgi.py, setting.py 환경 설정[/!]
기본적인 django 설정을 위해 프로젝트 환경설정 디렉토리로 이동한다.
 
# cd ../testproject
(혹은)
# cd /home/py/public_html/testproject/testproject

wsgi.py 파일을 vi 로 연다.
 
# vi wsgi.py

아래와 같이sys 모듈과 django.core.handlers.wsgi 모듈을 import한 뒤
프로젝트 디렉토리와 가상환경 모듈 디렉토리를 시스템 경로로 설정한다.


 
import os
import sys
import django.core.handlers.wsgi

sys.path.append('/home/py/public_html/testproject')
sys.path.append('/home/py/public_html/pyenv/lib/python3.6/site-packages')

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'testproject.settings')

application = get_wsgi_application()

setting.py 파일을 vi 로 연다.
 
# vi setting.py

ALLOWED_HOSTS 에 접근 host 값을 추가한다.
모든 host가 접근 가능하도록 설정 하려면 '*'를 입력한다.



INSTALLED_APPS 에 앞서 추가한 앱 이름을 추가한다.



TEMPLATES 에서 DIRS 에 앞서 생성한 templates 디렉토리 경로를 입력한다.



LANGUAGE_CODE 와 TIME_ZONE 을 설정한다.



STATIC_ROOT 를 추가하고 앞서 생성한 경로를 입력 해준다.






[!]Apache Vritualhost에 Django 앱 연동[/!]
Apache Virtualhost에 django 앱을 연동하여 도메인 접속으로 웹에서 볼 수 있도록 연동한다.

연동에 앞서 먼저 apache 와 django를 연동해주는 아파치 모듈을 yum으로 설치한다.
 
# yum install mod_wsgi

virtualhost 설정파일을 열어 호스트를 추가한다.
 
# vi /etc/httpd/conf.d/vhosts.conf



위 예시는 py.chanyeongpark.com 으로 접속시 django 프로젝트의 wsg.py를 참조하여
프로젝트와 static 디렉토리를 호스팅 하는 역할을 해준다.
 
<VirtualHost *:80>
    ServerName py.chanyeongpark.com
    DocumentRoot /home/py/public_html
    ErrorLog /home/py/error_log
    CustomLog /home/py/access_log common

    WSGIScriptAlias / /home/py/public_html/testproject/testproject/wsgi.py

    <Directory /home/py/public_html/testproject>
       <Files wsgi.py>
            Require all granted
       </Files>
    </Directory>

    Alias /static /home/py/public_html/testproject/testapp/static
    <Directory /home/py/public_html/testproject/testapp/static>
        Require all granted
    </Directory>
</VirtualHost>

아파치 재시작 후 웹브라우저에서 실행시 아래와 같이 화면이 나온다면 정상적으로 모든 설치가 완료된 것이다.






[!]urls.py 설정으로 index 화면 설정하기[/!]
아파치 설정 후 웹브라우저로 접속시 위와 같은 django 환영 페이지가 노출되는 이유는 urls.py 설정이 되지 않았기 때문이다.
django는 urls.py 설정을 통해 간단하게 접속 url을 조작하여 controller 구성을 할 수 있다.
urls.py가 route 역할을 한다고 보면 된다.

웹페이지가 구성되기 위해선
templates/index.html => 템플릿 파일
views.py => Controller 파일
urls.py => route
세 파일이 결합되어야 한다.

먼저, 템플릿 파일 생성을 위해 앱 디렉토리의 templates 로 이동한다.
 
# cd /home/py/public_html/testproject/testapp/templates

index.html 파일을 만든다.
 
# vi index.html
(예시에서 index.html 의 파일 내용은 'Hello World!!' 로 했다.)

view.py 설정을 위해 프로젝트 설정 디렉토리로 이동한다.
 
# /home/py/public_html/testproject/testproject

해당 경로 내에 view.py 파일이 없는 경우도 있는데, vi 로 파일을 새로 생성하면 된다.
 
# vi views.py

views.py 내용은 아래와 같이 작성한다.
  
from django.shortcuts import render

def index(request):
    return render(request, 'index.html')

urls.py를 설정하기 위해 vi로 설정 파일을 연다.
 
# vi urls.py

urls.py 내용을 아래와 같이 추가한다.
 
from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index, name='index'),
]

from . import views (파일명) 로 방금 생성한 views.py를 import 했고,
urlpatterns 에 path('', views.index, name='index') 를 추가하여 앞서 생성한 views.py 의 index 함수를 호출하도록 했다.
views.index 함수 구문에 의해 index.html 이 render되어 브라우저에 출력 되는 것이다.