python 3 + Django + uwsgi + nginx 배치 노트

5253 단어 ubuntudjangopython3.5
본문 환경
운영 체제: Ubuntu 16.04.3Python 버 전: 3.5.2Django 버 전: 2.0.4nginx 버 전: 1.10.3
본 플랫폼 은 텐 센트 클 라 우 드 1 핵 1G 시스템 이다.
내 프로젝트 파일 이름:dgutpsy
pip 3 설치 (python 3 pip)
sudo apt-get install python3-pip

설치 완료 후 실행pip3 등장
설치
pip install uwsgi

uwsgi 운행 상태 테스트
새 파일 test. py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

어떤 튜 토리 얼 은return "hello world"
그러나 이렇게 하면 방문 공백 이 발생 할 수 있 습 니 다. 저 는 Python 3 환경 입 니 다. hello World 에 대한 인 코딩 이 필요 합 니 다.
만약 당신 이 Python 2 의 환경 이 라면, 당신 은 써 야 합 니 다.return "hello world"
이 파일 을 uwsgi 로 실행 합 니 다.
uwsgi --http :8000 --wsgi-file test.py

이 문장의 뜻 은 uwsgi test.py , http , 8000
페이지 방문
자, 친절 한 헬 로 월 드 를 볼 수 있다 는 것 은 uwsgi 운행 이 성공 했다 는 것 을 의미한다.
TIPS: 만약 당신 이 접근 할 수 없다 면, 먼저 텐 센트 클 라 우 드 보안 팀 포트 가 8000 포트 를 열 었 는 지 확인 하 십시오.
Django 설치
pip3 install Django

python 3 에서 import django 가 잘못 보고 하지 않 으 면 설치 에 성공 합 니 다.
항목 코드 업로드
이제 프로젝트 코드 를 올 리 겠 습 니 다.
MobaXterm 의 sftp 도 구 를 사용 하여 끌 어 들 여 [웃 으 며 울 음] 왜 ftp 를 사용 하지 않 는 지 묻 지 마 세 요. 이게 편 해 요.
코드 가 정상적으로 작 동 하 는 지 확인 합 니 다.
프로젝트 디 렉 터 리 를 잘라 서 실행 합 니 다.
python3 manage.py runserver 0.0.0.0:8000

페이지 방문
그다지이 건 ALLOWED 를 설 치 했 기 때 문 입 니 다.HOSTS 의 이유
저희 가 setting. py 에 설정 을 해 보도 록 하 겠 습 니 다.
ALLOWED_HOSTS = ['*']

페이지 재 방문
OK!
uswgi 실행 항목
 uwsgi --http :8000 --chdir /home/ubuntu/dgutpsy  --wsgi dgutpsy.wsgi

이 문장의 뜻 은 위 와 비슷 하 다. 단지 작업 경로 와 wsgi 파일 이 하나 더 생 겼 을 뿐이다
장난 해?변 함 이 없다 고 생각 하 십 니까?
여기에 이르다
우 리 는 잠시 아래 의 내용 을 정할 수 있다.
  • 프로젝트 는 문제 가 없습니다.
  • 프로젝트 설정 에 문제 가 없습니다
  • uwsgi 문제 없어
  • 프로젝트 의 지원 환경 에 문제 가 없다
  • 다음, 우 리 는 nginx 를 설정 하기 시작 합 니 다.
    설치 nginx
    sudo apt-get install nginx

    nginx 운행 상태 테스트
    nginx 설치 성공
    nginx 설정 수정
    파일 경로"/etc/nginx/sites-enabled/default"
    더 이상 nginx. conf 를 찾 지 마 세 요. 새 버 전 은 이미 이 파일 이 없습니다.
    나의
    upstream django {
            server 127.0.0.1:8001; #web socket  
        }
    server {
        listen 80 default_server;
        listen [::]:80 default_server;
     
        index index.html index.htm index.nginx-debian.html;
    
        server_name _;
    
        location / {
            root /home/ubuntu/dgutpsy; #    
            uwsgi_pass django;
            include /home/ubuntu/dgutpsy/uwsgi_params; #uwsgi_params     
        }
    }

    완전한 uwsgiparams 파일 내용 은
    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;

    이 파일 이 없 거나 이 파일 을 잘못 쓰 면 잘못 보고 할 수 있 습 니 다.
    액세스 테스트 502
    이것 은 우리 의 socket 통신 이 아직 시작 되 지 않 았 기 때문이다!
    nginx 와 uwsgi 통신
    hello World 테스트 먼저 사용 하기
    uwsgi --socket :8001 --wsgi-file test.py

    테스트 페이지 방문
    이로써: nginx 와 uwsgi 통신 성공!
    TIPS: socket 프로 토 콜 이기 때문에 브 라 우 저 에서 8001 포트 를 방문 하여 시작 여 부 를 판단 할 수 없습니다.
    배경
    이렇게 하면 괜 찮 을 것 같 지만 ssh 를 닫 으 면 502 가 나타 납 니 다!
    이 ssh 프로 세 스 를 닫 았 을 때 uwsgi 프로 세 스 도 종료 되 었 기 때 문 입 니 다. 그리고 시작 할 때마다 긴 명령 을 져 야 합 니 다. 귀 찮 지 않 습 니 다!
    이 럴 때, 우 리 는 필요 한 것 이 있 습 니 다. 그것 이 바로 ini 프로필 시작 입 니 다. 그 중에서 daemonize = /home/ubuntu/dgutpsy/test.log 은 배경 에서 로그 출력 디 렉 터 리 를 실행 하고 규정 한 다 는 뜻 입 니 다.
    새 test. ini
    [uwsgi]
    socket = 127.0.0.1:8001
    wsgi-file = /home/ubuntu/dgutpsy/test.py
    daemonize = /home/ubuntu/dgutpsy/test.log 
    uwsgi --ini test.ini

    niginx 와 Django 프로젝트 통신
    새 dgutpsy. ini
    [uwsgi]
    socket = 127.0.0.1:8001
    chdir           = /home/ubuntu/dgutpsy
    module          = dgutpsy.wsgi
    master          = true
    processes       = 1 
    
    threads = 2 
    max-requests = 6000
    
    daemonize = /home/ubuntu/dgutpsy/run.log
    

    그리고 실행
    uwsgi --ini dgutpsy.ini

    도 메 인 이름 맵
    도 메 인 이름 추가 > 분석 consult.psyannabel.cn페이지 방문
    후기:
    Q & A: Q: manage. py 로 실행 할 수 있 는데 왜 uwsgi 를 사용 합 니까?
    A: 단일 프로 세 스 의 manage. py, 웹 서버 uwsgi 와 비교 할 수 있 습 니 다.
    Q: uwsgi 를 사용 할 수 있 는데 왜 nginx 를 사용 합 니까?
    A: uwsgi 는 웹 서버 이지 만 정적 파일 을 처리 할 때 nginx 가 우수 하지 않 습 니 다.
    Q: 대략적인 절차?
    A: nginx 는 웹 처리 http 요청 을 실행 하고 nginx 는 socket 을 사용 하여 uwsgi 와 통신 하여 동적 부분 을 uwsgi 에 넘 겨 처리 합 니 다.
    Q: 왜 내 test. py 가 실행 되 지 않 습 니까?
    A: 포트 개방 에 문제 가 없다 면 Python 버 전에 대응 하 는 return 을 확인 하 십시오.

    좋은 웹페이지 즐겨찾기