Django 응용 배포
머리말
요 며칠 Django 에 관 한 내용 을 대충 복습 해 보 니 많은 것 을 잊 어 버 린 것 같 습 니 다.보아하니 지식 은 확실히 쉽게 잊 혀 지 는 것 같다.항상 에 빈 호 스 의 기억 곡선 에 따라 이전에 배 웠 던 것 을 복습 하면 잊 어 버 리 는 속도 가 많이 느 려 진다.
쓸데없는 소리 하지 마 세 요. 오늘 은 주로 Django 응용 배치 에 관 한 필 기 를 씁 니 다.앞 으로 는 반드시 사용 할 수 있 기 때문에 먼저 자신 에 게 전 기 를 충전 하 는 것 은 준 비 를 하 는 것 이 라 고 생각 합 니 다.
전체적으로 말 하면 다음 세 가지 방식 이 있 습 니 다. 다음은 간단명료 하 게 설명 하 겠 습 니 다.
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 파일 입 니 다.
대외 망 의 경우 우리 의 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
아직 공부 할 게 많은 것 같 아.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 파일 압축 및 압축 풀기파일 의 간단 한 압축 과 압축 해 제 를 실현 하 였 다.주요 테스트 용 에는 급 하 게 쓸 수 있 는 부분 이 있 으 니 불편 한 점 이 있 으 면 아낌없이 가르쳐 주 십시오. 1. 중국어 문 제 를 해 결 했 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.