Python 3 + Django + uwsgi + nginx 배치

11407 단어
간단 한 소개
마지막 으로 코드 를 서버 에 배치 하 는 것 이 쉬 운 일이 라 고 생각 했 는데 여기 서 또 수많은 구 덩이 를 밟 을 줄 은 몰 랐 다.인터넷 에는 이와 관련 된 블 로그 가 많 지만 방법 마다 조금씩 다 르 기 때문에 사용 해 보 니 성공 적 으로 배치 되 지 못 하 는 방법 이 많다 (절망..).그래서 저 는 블 로 그 를 써 서 제 가 설정 하 는 과정 에서 의 상세 한 절 차 를 기록 하고 나중에 필요 할 때 이 블 로 그 를 보고 추억 하 는 것 도 편리 합 니 다.
설치 및 설정
기본 환경
  • : CVM S3, Ubuntu Server 16.04.1 LTS 64
  • python:3.5.2
  • mysql:5.7.23
  • pip3:18.1

  • 설치 설정
    1. django 및 그 관련 라 이브 러 리 의 설치
    여기 서 우리 가 사용 하 는 django 버 전 번 호 는 1.9.5 입 니 다. 다음 명령 을 직접 실행 하면 성공 적 으로 설치 할 수 있 습 니 다.
    pip3 install --user django~=1.9.5
    

    주: 명령 에 --user 을 추가 하지 않 으 면 사용자 권한 에 문제 가 생 겨 설치 할 수 없습니다.그 밖 에 우 리 는 mysqlclientpymysql django 와 my sql 데이터 뱅 크 의 상호작용 을 실현 해 야 한다.
    pip3 install --user mysqlclient~=1.3.7
    pip3 install --user pymysql~=0.9.2
    

    2. uWSGI 의 설치
    다음 명령 을 실행 하면 성공 적 으로 설치 할 수 있 습 니 다:
    pip3 install --user uwsgi
    

    주: 일반적으로 이렇게 설 치 된 uWSGI 는 문제 가 없습니다. 만약 여러분 이 안심 하지 않 는 다 면 인터넷 에서 uWSGI 를 테스트 하 는 방법 을 참고 하여 생략 할 수 있 습 니 다.
    3. nginx 의 설치
    다음 명령 을 실행 하면 성공 적 으로 설치 할 수 있 습 니 다:
    sudo apt-get install nginx
    

    주: 저 는 처음에 make 소스 코드 로 nginx 를 설 치 했 지만 설치 한 후에 사용 하기 가 매우 불편 하고 많은 경 로 를 찾 지 못 했 습 니 다.인터넷 에서 nginx 에 대한 설정 은 기본적으로 상기 명령 으로 설치 되 어 있 기 때문에 편리 하도록 저 는 상기 명령 을 사용 하여 직접 설치 하 는 것 으로 바 꾸 었 습 니 다.
    쓰다nginxuWSGI 를 사용 하여 설정 할 때 가장 실수 하기 쉬 운 것 은 경로 문제 (얼굴 가리기) 이기 때문에 저 는 여기 서 먼저 제 프로젝트 구 조 를 제시 하고 구체 적 인 설정 방식 을 설명 하 겠 습 니 다.
    프로젝트 구조 (디 렉 터 리)
    (.env) ubnutu@VM-0-10-ubuntu:~/WeChatTicket$(  /home/ubuntu/WeChatTicket/   )
    .
    ├── manage.py
    ├── configs.json
    ├── static/
    ├── WeChatTicket/
    |  └── wsgi.py              # wsgi  
    └──  deployment/
        ├── mysite_nginx.conf    # nginx    
        ├── mime.types           # nginx      
        ├── uwsgi_params         # nginx  uWSGI         
        ├── nginx_error.log      # nginx      
        ├── nginx_access.log     # nginx      
        ├── mysite_uwsgi.ini     # uWSGI    
        ├── uwsgi.log            # uWSGI    
        └── uwsgi.pid            # uWSGI    
    
    

    파일 설정
    1. mysite_nginx.conf 에 다음 과 같은 내용 을 기록 합 니 다.
    # mysite_nginx.conf
    #       
    user root;
    
    events {
      worker_connections 1024;
    }
    http {
      #  mime.types    
      include mime.types;
    
      # nginx        ( uWSGI        ,     9090  )
      upstream django {
          server 127.0.0.1:9090;
      }
      #      
      server {
          #        
          listen  80;
    
          #    
          server_name  236584.iterator-traits.com;
          charset  utf-8;
    
          #     
          access_log /home/ubuntu/WeChatTicket/deployment/nginx_access.log;
          error_log /home/ubuntu/WeChatTicket/deployment/nginx_error.log;
    
          #       
          client_max_body_size 75M; 
    
          # uWSGI            
          location / {
            alias /home/ubuntu/WeChatTicket/static/;
            try_files $uri $uri/ @django;
          }
    
          location @django {
            uwsgi_pass  django;
            include  uwsgi_params;
         }
      }
    }
    
    

    2. nginx 의 설정 폴 더 conf 에서 uwsgi_params 파일 을 deployment 디 렉 터 리 로 직접 복사 합 니 다.또는 deployment 디 렉 터 리 에 uwsgi_params 파일 을 직접 만 들 고 다음 내용 을 기록 합 니 다.
    uwsgi_param  QUERY_STRING       $query_string;
    uwsgi_param  REQUEST_METHOD     $request_method;
    uwsgi_param  CONTENT_TYPE       $content_type;
    uwsgi_param  CONTENT_LENGTH     $content_length;
    
    uwsgi_param  REQUEST_URI        $request_uri;
    uwsgi_param  PATH_INFO          $document_uri;
    uwsgi_param  DOCUMENT_ROOT      $document_root;
    uwsgi_param  SERVER_PROTOCOL    $server_protocol;
    uwsgi_param  REQUEST_SCHEME     $scheme;
    uwsgi_param  HTTPS              $https if_not_empty;
    
    uwsgi_param  REMOTE_ADDR        $remote_addr;
    uwsgi_param  REMOTE_PORT        $remote_port;
    uwsgi_param  SERVER_PORT        $server_port;
    uwsgi_param  SERVER_NAME        $server_name;   
    

    3. nginx 의 설정 폴 더 conf 에서 mime.types 파일 을 deployment 디 렉 터 리 로 직접 복사 합 니 다.또는 deployment 디 렉 터 리 에 mime.types 파일 을 직접 만 들 고 다음 내용 을 기록 합 니 다.
    types {
        text/html                                        html htm shtml;
        text/css                                         css;
        text/xml                                         xml;
        image/gif                                        gif;
        image/jpeg                                       jpeg jpg;
        application/javascript                           js;
        application/atom+xml                             atom;
        application/rss+xml                              rss;
    
        text/mathml                                      mml;
        text/plain                                       txt;
        text/vnd.sun.j2me.app-descriptor                 jad;
        text/vnd.wap.wml                                 wml;
        text/x-component                                 htc;
    
        image/png                                        png;
        image/svg+xml                                    svg svgz;
        image/tiff                                       tif tiff;
        image/vnd.wap.wbmp                               wbmp;
        image/webp                                       webp;
        image/x-icon                                     ico;
        image/x-jng                                      jng;
        image/x-ms-bmp                                   bmp;
    
        application/font-woff                            woff;
        application/java-archive                         jar war ear;
        application/json                                 json;
        application/mac-binhex40                         hqx;
        application/msword                               doc;
        application/pdf                                  pdf;
        application/postscript                           ps eps ai;
        application/rtf                                  rtf;
        application/vnd.apple.mpegurl                    m3u8;
        application/vnd.google-earth.kml+xml             kml;
        application/vnd.google-earth.kmz                 kmz;
        application/vnd.ms-excel                         xls;
        application/vnd.ms-fontobject                    eot;
        application/vnd.ms-powerpoint                    ppt;
        application/vnd.oasis.opendocument.graphics      odg;
        application/vnd.oasis.opendocument.presentation  odp;
        application/vnd.oasis.opendocument.spreadsheet   ods;
        application/vnd.oasis.opendocument.text          odt;
        application/vnd.openxmlformats-officedocument.presentationml.presentation
                                                         pptx;
        application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
                                                         xlsx;
        application/vnd.openxmlformats-officedocument.wordprocessingml.document
                                                         docx;
        application/vnd.wap.wmlc                         wmlc;
        application/x-7z-compressed                      7z;
        application/x-cocoa                              cco;
        application/x-java-archive-diff                  jardiff;
        application/x-java-jnlp-file                     jnlp;
        application/x-makeself                           run;
        application/x-perl                               pl pm;
        application/x-pilot                              prc pdb;
        application/x-rar-compressed                     rar;
        application/x-redhat-package-manager             rpm;
        application/x-sea                                sea;
        application/x-shockwave-flash                    swf;
        application/x-stuffit                            sit;
        application/x-tcl                                tcl tk;
        application/x-x509-ca-cert                       der pem crt;
        application/x-xpinstall                          xpi;
        application/xhtml+xml                            xhtml;
        application/xspf+xml                             xspf;
        application/zip                                  zip;
    
        application/octet-stream                         bin exe dll;
        application/octet-stream                         deb;
        application/octet-stream                         dmg;
        application/octet-stream                         iso img;
        application/octet-stream                         msi msp msm;
    
        audio/midi                                       mid midi kar;
        audio/mpeg                                       mp3;
        audio/ogg                                        ogg;
        audio/x-m4a                                      m4a;
        audio/x-realaudio                                ra;
    
        video/3gpp                                       3gpp 3gp;
        video/mp2t                                       ts;
        video/mp4                                        mp4;
        video/mpeg                                       mpeg mpg;
        video/quicktime                                  mov;
        video/webm                                       webm;
        video/x-flv                                      flv;
        video/x-m4v                                      m4v;
        video/x-mng                                      mng;
        video/x-ms-asf                                   asx asf;
        video/x-ms-wmv                                   wmv;
        video/x-msvideo                                  avi;
    }
    

    4. mysite_uwsgi.ini 에 다음 과 같은 내용 을 기록 합 니 다.
    [uwsgi]
    # django    
    socket          = 127.0.0.1:9090
    
    #       
    chdir           = /home/ubuntu/WeChatTicket
    
    # wsgi      
    module          = WeChatTicket.wsgi
    
    #       
    
    master          = true
    
    #          
    processes       = 4
    threads         = 2
    
    #        
    vacuum          = true
    
    # pid  
    pidfile        = uwsgi.pid
    
    #     
    daemonize      = uwsgi.log
    

    실행 (이 때 터미널 은 deployment 디 렉 터 리 아래 에 있 습 니 다)
    1. 시작 uWSGI:
    uwsgi --ini mysite_uwsgi.ini
    

    이때 디 렉 터 리 아래 에 uwsgi.piduwsgi.log 두 개의 파일 이 추 가 된 것 을 발견 할 수 있다.2. 시작 nginx:
    sudo nginx -c /home/ubuntu/WeChatTicket/deployment/mysite_nginx.conf
    

    이때 디 렉 터 리 아래 에 nginx_error.lognginx_access.log 두 개의 파일 이 추 가 된 것 을 발견 할 수 있다.사용 sudo 은 사용자 권한 의 제한 을 해결 하기 위해 서 입 니 다.3. 브 라 우 저 를 사용 하여 ip 주 소 를 입력 하고 서비스 가 올 바 르 게 배치 되 었 는 지 확인 합 니 다.
    첨부: 상용 명령
  • ps aux|grep nginx( uwsgi): 프로 세 스 상 태 를 봅 니 다.
  • sudo nginx -c nginx.conf: nginx.conf 의 설정 으로 nginx 서 비 스 를 시작 합 니 다.
  • sudo pkill -9 nginx: 강제 종료 nginx 서비스.
  • uwsgi --ini uwsgi.ini: 서 비 스 를 초기 화하 고 시작 합 니 다.
  • uWSGI: 서 비 스 를 중지 uwsgi --stop uwsgi.pid 하고 삭제 uWSGI 합 니 다.
  • uwsgi.pid: 다시 불 러 오기 uwsgi --reload uwsgi.pid 서비스.

  • 총결산
    Python 3 + Django + uwsgi + nginx 배치 학습 은 여기 서 마 치 겠 습 니 다. 궁금 한 점 이 있 으 시 면 언제든지 말씀 하 세 요.문서 에 잘못된 점 이나 부족 한 점 이 있 으 면 비판 과 지적 을 환영 합 니 다.
    참고 자료: 1. uwsgi 서비스 시작 (start) 정지 (stop) 재 불 러 오기 (reload) 2. uwSGI + django + nginx 의 작업 원리 절차 와 배치 과정 3. nginx 와 uwSGI 를 바탕 으로 Ubuntu 에 Django 를 배치 합 니 다.

    좋은 웹페이지 즐겨찾기