Django 응용 배포

  • 서문
  • Apachewsgi
  • 환경 구축
  • 아파 치 설치
  • mod 설치wsgi
  • djangowsgi 파일 추가
  • etcapache2httpdconf 설정
  • wsgipy 설정
  • 달 려 라
  • uWSGI
  • 환경 구축
  • 테스트 해 봐
  • Django 응용 배치
  • 매개 변수 해석
  • NginxuWSGI
  • 환경 구축
  • 통합
  • Nginx 설정
  • 운행
  • 총화

  • 머리말
    요 며칠 Django 에 관 한 내용 을 대충 복습 해 보 니 많은 것 을 잊 어 버 린 것 같 습 니 다.보아하니 지식 은 확실히 쉽게 잊 혀 지 는 것 같다.항상 에 빈 호 스 의 기억 곡선 에 따라 이전에 배 웠 던 것 을 복습 하면 잊 어 버 리 는 속도 가 많이 느 려 진다.
    쓸데없는 소리 하지 마 세 요. 오늘 은 주로 Django 응용 배치 에 관 한 필 기 를 씁 니 다.앞 으로 는 반드시 사용 할 수 있 기 때문에 먼저 자신 에 게 전 기 를 충전 하 는 것 은 준 비 를 하 는 것 이 라 고 생각 합 니 다.
    전체적으로 말 하면 다음 세 가지 방식 이 있 습 니 다. 다음은 간단명료 하 게 설명 하 겠 습 니 다.
  • Apache+wsgi
  • uWSGI
  • Nginx+uWSGI

  • Apache+wsgi
    아파 치 는 누구나 다 알 고 있다.당연 하지, 아파 치 무 직 이 얼마나 대단한 지 말 하 는 게 아니 라 이 서버 야.wsgi 는 무슨 뜻 이에 요?
    웹 서버 게 이 트 웨 이 인터페이스Python 언어 를 위 한 웹 서버 와 웹 응용 프로그램 이나 프레임 워 크 사이 의 간단 하고 통용 되 는 인터페이스 입 니 다.
    WSGI 는 웹 서버 와 웹 애플 리 케 이 션 간 의 낮은 등급 의 인터페이스 로 우 리 는 하나의 교량 으로 이해 할 수 있 으 며 이 다 리 를 통 해 웹 이 웹 서버 에 응용 되 는 배 치 를 실현 했다.
    환경 구축
    아파 치 설치
    sudo apt-get -y install apache

    설치 modwsgi
    sudo apt-get -y install libapache2-mod-wsgi

    django. wsgi 파일 추가
    이 django. wsgi 파일 의 역할 은 Apache 서버 에 Django 응용 프로그램 을 Apache 서버 와 어떻게 연결 해 야 하 는 지 알려 주 는 것 입 니 다.
    파일 의 내용 은 다음 과 같 습 니 다.
    #!/usr/bin/env python3
    # coding: utf8
    
    import os
    import sys
    # Django        
    path = 'home/biao/guest/'
    sys.path.append(path)
    sys.path.append(path+'guest')
    
    os.environ['DJANGO_SETTINGS_MODULE'] = 'guest.settings'
    
    import django.core.handlers.wsgi
    application = django.core.handlers.wsgi.WSGIHandler()
    

    설정 / etc / apache 2 / httpd. conf
    ……
    #  mod_wsgi.so   
    LoadModule wsgi_module modules/mod_wsgi.so
    
    #  myweb   wsgi.py      
    WSGIScriptAlias / /home/biao/guest/django.wsgi
    
    #      
    WSGIPythonPath /home/biao/guest
    
    <Directory /home/biao/guest>
    <Files wsgi.py>
        Require all granted
    </Files>
    </Directory>

    설정
    마지막 으로 게 스 트 애플 리 케 이 션 의 wgi. py 파일 을 수정 합 니 다.
    ……
    import os
    
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "guest.settings")
    
    from django.core.wsgi import get_wsgi_application
    application = get_wsgi_application()

    달 려 라
    그리고 아파 치 서 비 스 를 다시 시작 하면 됩 니 다.
    service apache2 reload

    아래 명령 을 사용 하거나
    sudo /etc/init.d/apache2 restart

    uWSGI
    uWSGI 는 웹 서버 로 WSGI, uwsgi, HTTP 등 프로 토 콜 을 실현 했다.이 점 은 uwsgi 와 구별 하면 된다.
    환경 구축
    우선 이 서버 부터 설치 해 야 죠.
    pip install uWSGI

    구체 적 인 버 전 은https://pypi.python.org/pypi/uWSGI 다운로드
    테스트 해 봐.
    설치 가 끝 난 후에 우 리 는 먼저 uWSGI 가 정상적으로 작 동 할 수 있 는 지 시험 해 보 자.그것 이 uwsgi 와 WSGI 협 의 를 실현 한 것 에 따라 우 리 는 아래 의 브리지 를 쓸 수 있다.
    # coding: utf8
    # file: test.py
    # author:   
    
    def application(env, start_response):
        start_response('200 OK', [('Content-Type', 'text/html')]
        return [b'It Works.']

    파일 명령 실행
    uwsgi --http :8080 --wsgi-file test.py

    Django 응용 프로그램 배치
    Django 응용 을 배치 하 는 명령 이 길 습 니 다. 다음은 각 매개 변수의 의 미 를 설명 합 니 다.
    uwsgi --http :8080 --chdir /home/biao/guest --wsgi-file guest/wsgi.py --master --processes 4 
    root@iZ2zeigvkok5ldc6x0m6itZ:/home/biao/guest# uwsgi --http :8080 --chdir /home/biao/guest --wsgi-file guest/wsgi.py --master --processes 4
    *** Starting uWSGI 2.0.15 (64bit) on [Tue May 30 10:57:10 2017] ***
    compiled with version: 4.8.4 on 29 May 2017 15:26:43
    os: Linux-3.13.0-86-generic #130-Ubuntu SMP Mon Apr 18 18:27:15 UTC 2016
    nodename: iZ2zeigvkok5ldc6x0m6itZ
    machine: x86_64
    clock source: unix
    detected number of CPU cores: 1
    current working directory: /home/biao/guest
    detected binary path: /usr/local/bin/uwsgi
    !!! no internal routing support, rebuild with pcre support !!!
    uWSGI running as root, you can use --uid/--gid/--chroot options
    *** WARNING: you are running uWSGI as root !!! (use the --uid flag) *** 
    chdir() to /home/biao/guest
    your processes number limit is 7781
    your memory page size is 4096 bytes
    detected max file descriptor number: 65535
    lock engine: pthread robust mutexes
    thunder lock: disabled (you can enable it with --thunder-lock)
    uWSGI http bound on :8080 fd 4
    uwsgi socket 0 bound to TCP address 127.0.0.1:41481 (port auto-assigned) fd 3
    Python version: 3.4.3 (default, Nov 17 2016, 01:12:14)  [GCC 4.8.4]
    *** Python threads support is disabled. You can enable it with --enable-threads ***
    Python main interpreter initialized at 0x25f0d10
    your server socket listen backlog is limited to 100 connections
    your mercy for graceful operations on workers is 60 seconds
    mapped 363800 bytes (355 KB) for 4 cores
    *** Operational MODE: preforking ***
    WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x25f0d10 pid: 16143 (default app)
    *** uWSGI is running in multiple interpreter mode ***
    spawned uWSGI master process (pid: 16143)
    spawned uWSGI worker 1 (pid: 16145, cores: 1)
    spawned uWSGI worker 2 (pid: 16146, cores: 1)
    spawned uWSGI worker 3 (pid: 16147, cores: 1)
    spawned uWSGI worker 4 (pid: 16148, cores: 1)
    spawned uWSGI http 1 (pid: 16149)
    

    매개 변수 해석
  • --http: 프로 토 콜 유형 과 포트 번호, 일반 형식 – http: port
  • --processes: 열 린 프로 세 스 의 수량 입 니 다. 상기 로그 에 비해 우 리 는 네 개의 프로 세 스
  • 가 있 음 을 알 수 있 습 니 다.
  • --chdir: 프로젝트 의 경 로 를 지정 합 니 다.
  • --wsgi-file: wgi 파일 의 경 로 를 지정 합 니 다. 여 기 는 chdir 의 경로 에 비해 더욱 시원 하 게 경 로 를 쓸 수 있 습 니 다.
  • --master: 메 인 프로 세 스 의 존 재 를 허용 하고 쓰 지 않 으 면 존재 하지 않 습 니 다
  • --threads: 열 린 스 레 드 수량.

  • 사실 아직도 많은 매개 변수 가 있 지만 배치 에 있어 서 많은 것들 이 구체 적 인 하드웨어 설정 에 따라 끊임없이 디 버 깅 하고 개선 해 야 서버 의 최대 능력 을 발휘 할 수 있 습 니 다.
    Nginx+uWSGI
    Nginx 는 최근 몇 년 동안 풍수 기 라 고 할 수 있다.현재 로 서 는 Nginx + uWSGI 가 Django 응용 프로그램 으로서 의 배치 방안 은 이미 매우 보편적이다.보통 Nginx 를 프론트 데스크 로 각종 요청 을 받 은 후 아래 의 uwSGI 에 전달 하여 각종 요청 을 구체 적 으로 처리 합 니 다.이로써 더욱 높 은 호응 효율 을 달성 하 다.
    환경 구축
    방금 uWSGI 가 설치 되 었 으 니 여기 Nginx 를 설치 하 세 요.구체 적 인 설치 방식 은 소스 코드 설치 와 패키지 관리 도 구 를 직접 사용 하여 설치 하 는 것 이 있 는데 여 기 는 편 의 를 위해 패키지 관리 도 구 를 간단하게 설치 했다.
    sudo apt-get -y install nginx

    그리고 포트 충돌 을 방지 하기 위해 Nginx 의 기본 감청 포트 를 수정 할 수 있 습 니 다.
    vim /etc/nginx/sites-avaiable/default

    그리고 서 비 스 를 다시 시작 하 겠 습 니 다.
    sudo /etc/init.d/nginx restart

    그리고 포트 8888 의 링크 를 방문 하 세 요.
    통합
    Nginx 와 uWSGI 와 Django 를 통합 할 때 설정 파일 이 필요 합 니 다. `.
    tree . -I *.pyc -L 4

    디 렉 터 리 구 조 는 다음 과 같다.
    .
    ├── db.sqlite3
    ├── django_uwsgi.ini
    ├── django.wsgi
    ├── guest
    │   ├── __init__.py
    │   ├── __pycache__
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    ├── manage.py
    └── sign
        ├── admin.py
        ├── apps.py
        ├── __init__.py
        ├── migrations
        │   ├── 0001_initial.py
        │   ├── __init__.py
        │   └── __pycache__
        ├── models.py
        ├── __pycache__
        ├── templates
        │   ├── event_manage.html
        │   ├── guest_manage.html
        │   ├── index.html
        │   ├── login.html
        │   └── sign_index.html
        ├── tests.py
        ├── urls.py
        ├── views_if.py
        └── views.py
    

    우리 가 알 아야 할 것 은 Django 와 uWSGI 의 통합 이다.uwSGI 는 XML 파일 이나 INI 파일 을 통 해 관련 설정 정 보 를 읽 을 수 있 습 니 다.그래서 우 리 는 djangouwsgi. ini 파일 에는 다음 과 같은 성명 이 있 습 니 다.
    대체적인 의 미 는 사실 이전의 두 번 째 방식 으로 명령 행 을 사용 하여 운행 하 는 것 과 일치한다.
    명령 을 통과 할 수 있 습 니 다.
    uwsgi --ini django_uwsgi.ini

    잘못된 정보 가 없 으 면 정상적으로 운행 할 수 있다 는 뜻 이다.지금 백 스테이지 부분 이 끝 났 음 을 보 여 주 는 거 죠.* * 프론트 * * Nginx 가 길 을 만 들 면 됩 니 다.
    Nginx 설정
    Django 에 서 비 스 를 적용 할 수 있 도록 Nginx 설정 을 수정 해 야 합 니 다.솔직히 말 하면 uWSGI 의 경로 에 대한 배분 입 니 다.
    vim /etc/nginx/sites-avaiable/default

    파일 의 끝 에 다음 과 같은 내용 을 덧붙이다.Nginx 가 서버 의 10010 포트 를 감청 하도록 한 뒤 백 엔 드 의 uwSGI 서버 에 전송 을 요청 한 다 는 뜻 이다.상응하는 처 리 를 하 다.
    운행 하 다.
    지금 우 리 는 운행 효 과 를 시험 해 볼 수 있다.즉, uwSGI 서버 를 먼저 엽 니 다. -그리고 Nginx 서버 를 엽 니 다. -Nginx 가 외부 에 노출 된 포트 를 방문 하여 uWSGI 서 비 스 를 받 을 수 있 는 지 확인 합 니 다.
    uwsgi --ini django_uwsgi.ini
    /etc/init.d/nginx restart

    이미 정확하게 운행 할 수 있 음 을 발견 했다.이렇게 하면 된다.
    총결산
    마지막 으로 주의해 야 할 부분 을 정리 해 보 자.
    Apache 방식 은 찬성 하지 않 습 니 다. 안정성 이 높 지만 설정 이 쉽 지 않 고 여러 가지 의존 도 를 가 집 니 다.uWSGI 가 단독으로 운행 하면 괜 찮 습 니 다.좀 얇 아 보 여요.
    Nginx 가 uWSGI 와 호흡 을 맞 추 는 것 은 나 에 게 매우 침착 한 느낌 을 주 었 다.배경 부분 에 여러 개의 uWSGI 를 마 운 트 할 수 있 습 니 다.
    하지만 알 아야 할 것 은 uWSGI 와 Nginx 를 통합 할 때의 그 ini 파일 입 니 다.
  • uWSGI 서버 를 통 해 서 비 스 를 직접 받 으 려 면 요청 방식 과 포트 는 http =: port
  • 로 설정 합 니 다.
  • Nginx 와 uWSGI 를 통 해 서 비 스 를 받 으 려 면 이 요청 방식 은 포트 와 socket =: port
  • 로 설정 되 어 있 습 니 다.
    대외 망 의 경우 우리 의 Django 서 비 스 를 정확하게 방문 하려 면 ALLOWED 설정 이 필요 합 니 다.HOSTS
    프로젝트 루트 디 렉 터 리 의 settings. py 파일 에서 다음 항목 을 설정 하면 됩 니 다.
    ALLOWED_HOSTS = ['www.example.com', 'ip', '*']

    그리고 생산 환경 에서 Django 의 DEBUG 스위치 도 꺼 야 합 니 다.이렇게 하면 사용자 에 게 주 는 사용자 체험 도 많이 좋아 지고 어느 정도 에 응용의 안전성 을 확보 할 수 있다.설정 방식 은 다음 과 같 습 니 다.프로젝트 루트 디 렉 터 리 의 settings. py 파일 에서 다음 항목 을 설정 하면 됩 니 다.
    # SECURITY WARNING: don't run with debug turned on in production!
    DEBUG = False

    아직 공부 할 게 많은 것 같 아.

    좋은 웹페이지 즐겨찾기