Django+Uwsgi+Nginx 생산 환경 배치 방법

5788 단어 DjangoUwsgiNginx
어떻게 생산 에 Django 를 배치 합 니까?
Django 의 배 치 는 여러 가지 방식 이 있 을 수 있 습 니 다.nginx+uwsgi 방식 을 사용 하 는 것 은 그 중에서 흔히 볼 수 있 는 방식 입 니 다.
소개
uWSGI 는 웹 서버 로 WSGI 프로 토 콜,uwsgi,http 등 프로 토 콜 을 실현 했다.Nginx 에서 HttpUwsgiModule 의 역할 은 uWSGI 서버 와 교환 하 는 것 이다.
WSGI/uwsgi/uwsgi 라 는 세 가지 개념의 구분 에 주의해 야 한다.
1.WSGI 는 웹 서버 게 이 트 웨 이 인터페이스 이다.이것 은 웹 서버(예 를 들 어 nginx,uWSGI 등 서버)와 웹 응용 프로그램(예 를 들 어 Flask 프레임 워 크 로 쓴 프로그램)이 통신 하 는 규범 이다.
2.uwsgi 는 통신 프로 토 콜 이 아 닌 선로 프로 토 콜 로 uwsgi 서버 에서 다른 네트워크 서버 와 의 데이터 통신 에 자주 사용 된다.
3.uWSGI 는 uwsgi 와 WSGI 두 가지 협 의 를 실현 한 웹 서버 이다.
4.uwsgi 프로 토 콜 은 uwsgi 서버 자체 의 프로 토 콜 로 정 보 를 전송 하 는 유형(type of information)을 정의 하 는 데 사 용 됩 니 다.모든 uwsgi packet 전 4byte 는 전송 정보 유형 에 대한 설명 으로 WSGI 에 비해 두 가지 입 니 다.
성능

uwSGI 의 주요 특징 은 다음 과 같다.
1.초고 속 성능
2.저 메모리 점용(apache2 로 실측 한 mod반 쯤
3.멀 티 앱 관리
4.상세 한 로그 기능(app 성능 과 병목 을 분석 할 수 있 음)
5.높이 맞 춤 형(메모리 크기 제한,서비스 일정 횟수 후 재 부팅 등)
한 마디 로 하면 uwgi 는 배치 용 으로 좋 은 것 입 니 다.uwsgi 작가 가 자랑 하 는 것 처럼:
If you are searching for a simple wsgi-only server, uWSGI is not for you, but if you are building a real (production-ready) app that need to be rock-solid, fast and easy to distribute/optimize for various load-average, you will pathetically and morbidly fall in love (we hope) with uWSGI.
Uwsgi 설치 사용

# Install the latest stable release:

pip install uwsgi

# ... or if you want to install the latest LTS (long term support) release,

pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz 
기본 테스트
Create a file called test.py:

# test.py

def application(env, start_response):

  start_response('200 OK', [('Content-Type','text/html')])

  return [b"Hello World"] # python3

  #return ["Hello World"] # python2 

운행 하 다.

uwsgi --http :8000 --wsgi-file test.py 

django

uwsgi --http :8000 --module mysite.wsgi 
설정 파일 에 인 자 를 쓸 수 있 습 니 다.

alex@alex-ubuntu:~/uwsgi-test$ more crazye-uwsgi.ini 

[uwsgi]

http = :9000

#the local unix socket file than commnuincate to Nginx

socket = 127.0.0.1:8001

# the base directory (full path)

chdir = /home/alex/CrazyEye 

# Django's wsgi file

wsgi-file = CrazyEye/wsgi.py

# maximum number of worker processes

processes = 4

#thread numbers startched in each worker process

threads = 2

#monitor uwsgi status 

stats = 127.0.0.1:9191

# clear environment on exit

vacuum     = true 
시동 을 걸다

/usr/local/bin/uwsgi crazye-uwsgi.ini 
Nginx 설치 사용

sudo apt-get install nginx

sudo /etc/init.d/nginx start  # start nginx 
프로젝트 에 Nginx 프로필 생 성
You will need the uwsgi_params file, which is available in the nginx directory of the uWSGI distribution, or from https://github.com/nginx/nginx/blob/master/conf/uwsgi_params
Copy it into your project directory. In a moment we will tell nginx to refer to it.
Now create a file called mysite_nginx.conf, and put this in it:

# mysite_nginx.conf
# the upstream component nginx needs to connect to
upstream django {
  # server unix:///path/to/your/mysite/mysite.sock; # for a file socket
  server 127.0.0.1:8001; # for a web port socket (we'll use this first)

}
# configuration of the server

server {

  # the port your site will be served on

  listen   8000;

  # the domain name it will serve for

  server_name .example.com; # substitute your machine's IP address or FQDN

  charset   utf-8; 

  # max upload size
  client_max_body_size 75M;  # adjust to taste

  # Django media
  location /media {

    alias /path/to/your/mysite/media; # your Django project's media files - amend as required

  } 

  location /static {

    alias /path/to/your/mysite/static; # your Django project's static files - amend as required

  }

  # Finally, send all non-media requests to the Django server.

  location / {
    uwsgi_pass django;
    include   /path/to/your/mysite/uwsgi_params; # the uwsgi_params file you installed

  }
} 
This conf file tells nginx to serve up media and static files from the filesystem, as well as handle requests that require Django's intervention. For a large deployment it is considered good practice to let one server handle static/media files, and another handle Django applications, but for now, this will do just fine.
Symlink to this file from /etc/nginx/sites-enabled so nginx can see it:

sudo ln -s ~/path/to/your/mysite/mysite_nginx.conf /etc/nginx/sites-enabled/ 
Deploying static files
Before running nginx, you have to collect all Django static files in the static folder. First of all you have to edit mysite/settings.py adding:

STATIC_ROOT = os.path.join(BASE_DIR, "static/") 
and then run

python manage.py collectstatic 
이 때 Nginx 와 Uwsgi 를 시작 하면 django 프로젝트 가 높 은 합병 을 실현 할 수 있 습 니 다!
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기