Django + uWSGI + nginx 배치 Python 웹 응용 프로그램

6677 단어 pythondjango
Django + uWSGI + nginx 배치 Python 웹 응용 프로그램
일부 알고리즘 모델 을 실현 한 후에 고려 한 것 은 바로 모델 의 배치 이다.OCR 인식 엔진 등 상대 적 으로 독립 된 모델 응용 에 대해 독립 된 웹 응용 으로 배치 하여 API 를 제공 하 는 다른 시스템 호출 방식 이 좋 은 해결 방안 이 될 것 이다.이 방안 의 장점 은 다음 과 같은 몇 가지 가 있다.
  • 모델 응용 은 다른 시스템 과 격 리 되 고 웹 을 통 해 호출 을 요청 하면 응용 호환성 을 크게 확대 할 수 있 을 뿐만 아니 라 모델 의 교체 와 업그레이드 에 도 편리 하 다.
  • 웹 응용 프로그램 이 시 작 된 후에 모델 파일 을 메모리 에 불 러 옵 니 다. 매번 모델 을 실행 할 때마다 다시 불 러 올 필요 가 없고 호출 시간 을 크게 단축 합 니 다.

  • 본문 사용 환경
  • ubuntu-16.04.3-server
  • Anaconda 3 의 Python 3.7
  • Django-2.2.5
  • uwsgi-2.0.18
  • nginx-1.14.0

  • 1. Django 의 설치 와 사용
  • 설치
  • pip install Django
    
  • 프로젝트 생 성
  • django-admin startproject demosite
    

    현재 디 렉 터 리 아래 웹 프로젝트 를 만 들 것 입 니 다. 프로젝트 디 렉 터 리 구 조 는 다음 과 같 습 니 다.
    demosite/
    ├── demosite
    │   ├── __init__.py
    │   ├── settings.py
    │   ├── urls.py
    │   └── wsgi.py
    └── manage.py
    

    demosite / demosite / 디 렉 터 리 에 views. py 파일 을 만 들 고 코드 를 입력 하 십시오:
    from diango.http import HttpResponse
    
    
    def hello(request):
        return HttpResponse("Hello World! [CSD]")
    

    urls. py 파일 에 추가:
    from demosite.views import hello
    

    url patterns 에 url 경 로 를 추가 합 니 다:
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('hello/', hello),
    ]
    

    settings. py 파일 을 수정 하여 로 컬 IP 를 ALLOWED 에 추가 합 니 다.HOSTS = [], 예:
    ALLOWED_HOSTS = ['192.168.0.100'] 
    
  • 시작 프로젝트
  • 데모 사이트 디 렉 터 리 에서 실행:
    python manage.py runserver 192.168.0.100:8000
    

    그리고 브 라 우 저 에 url 을 입력 하 십시오:
    http://192.168.0.100:8000/hello/
    

    보 실 수 있 습 니 다. 돌아 갈 수 있 습 니 다.
    Hello World! [CSD]
    

    Django 의 더 높 은 사용 과 설정 은 공식 문 서 를 참고 할 수 있 습 니 다.https://docs.djangoproject.com/en/2.2/
    2. uWSGI 를 사용 하여 Django 응용 프로그램 관리
    uWSGI 를 사용 하면 간단 한 Django 웹 애플 리 케 이 션 을 배치 할 수 있 습 니 다. WEB 가 좋 은 동시 방문 을 요청 하 는 것 을 관리 할 수 있 습 니 다.또한 uWSGI 는 Django 가 추천 하 는 방식 입 니 다. How to use Django with uWSGI, 자세 한 내용 은 uWSGI 홈 페이지 를 참고 하 십시오.
  • uWSGI 설치
  • uWSGI 를 설치 하려 면 c 컴 파일 러 가 필요 합 니 다. 설치 방법 은 공식 설치 지침 을 참고 하고 conda 로 직접 설치 할 수 있 습 니 다.
    conda install -c conda-forge uwsgi
    
  • uwsgi 를 사용 하여 Django 응용 프로그램 시작
  • demosite 디 렉 터 리 아래 (다른 디 렉 터 리 에서 도 가능) 새 demouwsgi. ini 프로필:
    [uwsgi]
    chdir = /home/csd/demosite
    wsgi-file = demosite/wsgi.py
    buffer-size = 65536
    master = true
    processes = 8
    threads=10
    http = 192.168.0.100:8080  
    vaccum = true
    daemonize = /home/csd/demosite/logs/demo_uwsgi.log
    

    데모 사이트 디 렉 터 리 에 폴 더 만 들 기: logs /
    시작 명령 은 다음 과 같 습 니 다:
    uwsgi --ini demo_uwsgi.ini --enable-threads
    
    --enable-threads 매개 변 수 는 다 중 스 레 드 지원 을 시작 하 는 데 사 용 됩 니 다.
    링크 에 접근 할 수 있 습 니 다:
    http://192.168.0.100:8080/hello/
    

    이 때 항목 을 닫 으 려 면 실행 해 야 합 니 다:
    killall -9 uwsgi
    
  • libiconv 설치
  • 위 에서 uwsgi 를 시작 하면 오류 가 발생 합 니 다:
    uwsgi: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory
    

    libiconv 를 설치 해 야 합 니 다.
    wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
    tar zxvf libiconv-1.14.tar.gz
    cd libiconv-1.14
    ./configure
    sudo make
    sudo make install
    

    make 오류 가 발생 하면:
    /stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function) 
    _GL_WARN_ON_USE (gets, “gets is a security hole - use fgets instead”); 
    

    libiconv - 1.14 / srclib / stdio. in. h 파일 에서 698 줄 의 코드 를:
    _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
    

    다음으로 바 꾸 기:
    #if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
    _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
    #endif
    

    그리고 새로 실행:
    ./configure
    sudo make
    sudo make install
    

    설치 완료 후 루트 계 정 을 전환 하고 다음 명령 을 입력 하 십시오:
    echo '/usr/local/lib' >> /etc/ld.so.conf
    ldconfig
    

    마지막 입력:
    iconv --version
    

    실행 할 수 있다 면 설치 가 정확 합 니 다.
    3. nginx 배치
    nginx 서버 배 치 를 사용 하여 부하 균형 을 실현 하고 WEB 요청 을 관리 할 수 있 습 니 다.
  • 설치
  • 다음 설치 패 키 지 를 다운로드 해 야 합 니 다:
    nginx-1.14.0.tar.gz  
    nginx_uploadprogress_module-0.9.0.tar.gz  
    openssl-1.0.2o.tar.gz  
    pcre-8.42.tar.gz
    

    압축 을 풀 고 nginx - 1.14.0 / 컴 파일 에 들 어가 nginx 를 설치 합 니 다:
    ./configure --prefix=/home/csd/nginx --with-openssl=../openssl-1.0.2o --with-pcre=../pcre-8.42 --add-module=../masterzen-nginx-upload-progress-module-a788dea --without-http_gzip_module
    make
    make install 
    
  • 설정
  • 설치 디 렉 터 리 (/ home / csd / nginx /) 의 conf 디 렉 터 리 에 들 어가 nginx. conf 설정 파일 을 수정 합 니 다.
    작업 프로 세 스 를 4 로 설정 합 니 다:
    worker_processes  4;
    

    nginx 기본 감청 80 포트 이기 때문에 80 포트 가 점용 되 었 는 지 확인 할 필요 가 있 습 니 다.
    netstat -lnp|grep 80
    

    점용 되면 다른 포트 로 변경 합 니 다. server 설정 에 다음 설정 이 추 가 됩 니 다.
    server {
        listen       90;
        server_name  192.168.0.100;
        large_client_header_buffers 4 16k;
        client_max_body_size 300m;
        client_body_buffer_size 128k;
        proxy_connect_timeout 600;
        proxy_read_timeout 600;
        proxy_send_timeout 600;
        proxy_buffer_size 256k;
        proxy_buffers   16 256k;
        proxy_busy_buffers_size 512k;
        proxy_temp_file_write_size 512k;
    
        location / {
            root   html;
            index  index.html index.htm;
            include     uwsgi_params;
            uwsgi_pass   unix:/home/csd/demosite/uwsgi.sock;
        }
        location /static {
            alias /home/csd/demosite/static;
        }
        location /media {
            alias /home/csd/demosite/media;
        }
    }
    

    이 어 demosite 디 렉 터 리 아래 static/media/ 두 개의 폴 더 를 만 듭 니 다.장 demo_uwsgi.ini
    http = 192.168.0.100:8080
    

    으로 변경
    socket =  /home/csd/demosite/uwsgi.sock
    
    settings.py 파일 마지막 에 추가:
    STATIC_ROOT = os.path.join(BASE_DIR, "static/")
    
  • 서비스 시작
  • 정적 파일 을 수집 하여 demostite 디 렉 터 리 에서 실행 합 니 다:
    python manage.py collectstatic
    

    시작 uwsgi:
    uwsgi --ini demo_uwsgi.ini --enable-threads
    

    시작 nginx:
    sudo /home/csd/nginx/sbin/nginx
    

    이 때 접근:
    http://192.168.0.100:90/hello/
    

    좋은 웹페이지 즐겨찾기