'django wsgi 설정'에 해당되는 글 1건

  1. 2019.02.27 Django + Apache 연동하기

Django + Apache 연동하기

  • 참고 URL

  • 웹서버와의 연동 필요성:

    • Django 의 runserver 기능은 개발의 편의를 위해 테스트 목적으로 제공되는 기능이다
    • Django 측에서도 실제 서비스 환경에서는 runserver 기능을 이용하는 것을 권장하지 않는다
      • 안정성과 성능 측면을 고려하지 않은 기능이기 때문이다
      • multi threading 처리도 불가하다
      • audit 기능과 같은 보안에 관련된 기본 설정도 불가하다
  • 테스트 환경

    • centos 7.5
    • python2.7.10
    • Django 1.11.15
    • apache 2.4
  • apache 설치

    • apache 2.4 다운로드 페이지 접속
    • 다운로드 목록
      • Httpd 2.4.35
      • Apache APR(Apache Portable Runtime) 1.6.5
      • Apache APR Util 1.6.1 (https://apr.apache.org/download.cgi)
      • PCRE(Perl Compatible Regular Expressions) 8.39 (ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/)
    • 다운로드 압축 해제
      $ tar xvfz httpd-2.4.35.tar.gz
      $ tar xvfz apr-1.6.5.tar.gz
      $ tar xvfz apr-util-1.6.1.tar.gz
      $ tar xvfz pcre-8.38.tar.gz
      
    • 컴파일 전 디렉토리 구조 정리
      {{ apache_home }}/httpd-2.4.35
          ㄴ srclib
                ㄴ apr       # apr-1.6.5 압축 해제한 것을 옮긴다
                ㄴ apr-util  # apr-util-1.6.1 압축 해제한 것을 옮긴다
      
    • 컴파일
      $ make && make install
      
    • 컴파일 후 apache 디렉토리 구조
      {{ apache_home }}/httpd-2.4.35  # 컴파일 실행했던 디렉토리
      {{ apache_home }}/apache2       # 컴파일에 의해 생성된 디렉토리
                          ㄴ bin
                          ㄴ conf
                          ㄴ ...
      
    • 설정 변경
      $ vi {{ apache_home }}/conf/httpd.conf
      # ServerName 127.0.0.1
      # Listen 8080   << 80 은 root 에게 부여되는 port 라 8080 으로 변경함
      
    • 실행
      $ {{ apache_home }}/apache2/bin/apachectl start (graceful)  # graceful 은 stop & start
      
  • django 프로젝트 생성

  • 연동하기

    • mod_wsgi 패키지 설치
      • 웹서버에서 받은 요청을 django 같은 python application 으로 전달해주는 interface 역할을 하는 패키지
        $ sudo yum search mod_wsgi
        $ yum install mod_wsgi      # search 목록에서 python 버전에 맞는 것을 설치한다
        
    • 아파치 설정 추가하기

      $ vi {{ apache_home }}/conf/httpd.conf
      
      # 접근 권한 추가
      <Directory />
          Require all granted
      </Directory>
      
      # django 프로젝트 연결
      <VirtualHost *:8080>
          Alias /static/ {{ django_project_path }}/static/
          <Directory {{ django_project_path }}/static>
              Order allow,deny
              Allow from all
          </Directory>
      
          WSGIScriptAlias / {{ django_project_path }}/{{django_project_app}}/wsgi.py
          <Directory {{ django_project_path }}/{{django_project_app}}>
            <Files wsgi.py>
                    Order allow,deny
                    Allow from all
            </Files>
          </Directory>
      </VirtualHost>
      
      # wsgi 패키지 로드
      LoadModule wsgi_module      /usr/lib64/httpd/modules/mod_wsgi.so
      
    • django 프로젝트에 wsgi.py 파일 추가

      $ vi {{ django_project_path }}/{{django_project_app}}/wsgi.py
      
      import os, sys
      
      path = os.path.abspath(__file__+'/../..')
      
      if path not in sys.path:
          sys.path.append(path)
      
      from django.core.wsgi import get_wsgi_application
      
      os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_project_app.settings")
      application = get_wsgi_application()


Posted by 감각적신사
,