[Django] gunicorn 배치 기요

8518 단어 Djangonginx
Gunicorn 을 사용 하여 Django 응용 프로그램 을 배치 합 니 다. 한 걸음 한 걸음 어떻게 조작 하 는 지, 중요 한 점 을 간단하게 기록 하고 나중에 찾 아 보 세 요.주요 방식 은 Nginx 가 Gunicon, Gunicorn wgi 로 대리 되 어 Django 를 시작 하 는 것 이다.
특징.
  • Gunicorn 은 prefork 모드 를 기반 으로 한 Python wsgi 응용 서버 로 유 닉 스 like 를 지원 하 는 시스템
  • epoll (Linux 에서) 비 차단 네트워크 I / O 모델
  • 을 사용 합 니 다.
  • 다양한 Worker 유형 은 동기 화 된 것 을 선택 할 수 있 습 니 다. 이벤트 기반 (gevent tornado 등), 다 중 스 레 드 기반
  • 고성능, uwsgi 에 비해 막상막하
  • 설정 사용 이 매우 간단 합 니 다
  • Python 2. x > = 2.6 또는 Python 3. x > = 3.2
  • 지원
    조작 하 다.
    Gunicron 은 설치 가 간단 합 니 다 pip install gunicorn 또는 easyinstall, 소스 코드 방식 은 모두 가능 합 니 다. 기본 적 으로 는 순수 Python 코드 이 고 설치 가 비교적 순 조 롭 습 니 다. virtualenv 와 함께 사용 하 는 것 이 좋 습 니 다.
    django 의 가장 간단 한 배치 (wgi 는 django 프로젝트 의 wgi. py 파일 만)
    gunicorn wsgi:application 
    #8 worker
    gunicorn -w 8 wsgi:application
    #     
    gunicorn -w 8 -b 0.0.0.0:8888 wsgi:application
    #unix socket
    gunicorn -w 8 --bind unix:/xx/mysock.sock wsgi:application
    #  gevent   (  worker    )
    gunicorn -w 8 --bind 0.0.0.0:8000 -k 'gevent' wsgi:application 
    #    ,        --help     
    --log-level=DEBUG  
    --timeout=100

    스 크 립 트 참조
    다음은 참고 사례 일 뿐 실제 배치 배치 등 은 아니다.
  • how-to-deploy-python-wsgi-apps-using-gunicorn-http-server-behind-nginx

  • 배포 스 크 립 트 참조 1
    #!/bin/bash
    NAME="djangotut" # Name of the application
    DJANGODIR=/xxx/django_project # Django project directory
    SOCKFILE=/xxx/gunicorn.sock # we will communicte using this unix socket
    USER=osboxes # the user to run as
    GROUP=osboxes # the group to run as
    NUM_WORKERS=8 # how many worker processes should Gunicorn spawn
    MAX_REQUESTS=100000 # reload the application server for each request
    DJANGO_SETTINGS_MODULE=django_project.settings # which settings file should Django use
    DJANGO_WSGI_MODULE=django_project.wsgi # WSGI module name
    echo “Starting $NAME as `whoami`”
    # Activate the virtual environment
    cd $DJANGODIR
    source ~/.virtualenvs/django-tutorial-env/bin/activate
    export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
    export PYTHONPATH=$DJANGODIR:$PYTHONPATH
    # Create the run directory if it doesn’t exist
    RUNDIR=$(dirname $SOCKFILE)
    test -d $RUNDIR || mkdir -p $RUNDIR
    # Start your Django Unicorn
    # Programs meant to be run under supervisor should not daemonize themselves (do not use –daemon)
    exec ~/.virtualenvs/django-tutorial-env/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
    –name $NAME \
    –workers $NUM_WORKERS \
    –max-requests $MAX_REQUESTS \
    –user=$USER –group=$GROUP \
    –bind=0.0.0.0:3000 \
    –log-level=error \
    –log-file=-

    자신 이 사용 하 는 간단 한 셸 스 크 립 트
    #!/bin/sh
    #file: gun.sh
    #start and stop gunicorn+django app
    P=8000
    worker=1
    host="0.0.0.0"
    case "$@" in
        start)
            gunicorn -b $host:$P -w $worker -k 'gevent' wsgi:application -D
            ;;
        stop)
            kill -9 `ps aux|grep gunicorn|grep $P|awk '{print $2}'|xargs`
            ;;
        restart)
            kill -9 `ps aux|grep gunicorn|grep $P|awk '{print $2}'|xargs`
            sleep 1
            gunicorn -b $host:$P -w $worker -k 'gevent' wsgi:application -D
            ;;
        reload)
            ps aux |grep gunicorn |grep $P | awk '{print $2}'|xargs kill -HUP
            ;;
        status)
        pids=$(ps aux|grep gunicorn|grep $P)
            echo "$pids"
        ;;
        *)
            echo 'unknown arguments args(start|stop|restart|status|reload)'
            exit 1
            ;;
    esac

    nginx 설정 사례
    server {
        listen 80;
        server_name 0.0.0.0;
        client_max_body_size 4G;
        location /static/ {
            alias /xxx/static/;
        }
        location /media/ {
            alias /xxx/media/;
        }
        location / {
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_redirect off;
            # Try to serve static files from nginx, no point in making an
            # *application* server like Unicorn/Rainbows! serve static files.
            if (!-f $request_filename) {
                proxy_pass http://app_server;
                break;
            }
        }
    }

    최적화 하 다.
  • 기본 워 커 대신 meinheld 를 사용 합 니 다. 이것 도 이벤트 기반 async 워 커 이지 만 gevent 등 보다 빠 릅 니 다.
  • 
    pip install -U meinheld
    
    gunicorn --workers=2 --worker-class="egg:meinheld#gunicorn_worker" wsgi
    

    좋은 웹페이지 즐겨찾기