Gunicorn Ngnx Supervisor 를 사용 하여 Django 프로젝트 배치

Django 는 Python 기반 웹 프레임 워 크 중 하나 로 서 사용자 에 게 경량급 테스트 서버 를 제공 하지만 이 서버 는 생산 환경 에 사용 하지 않 는 것 이 좋 습 니 다.그렇다면 우리 가 생산 환경 에 Django 프로젝트 를 배치 해 야 한다 면 우 리 는 어떤 환경 을 사용 합 니까?최초 Django 추천 Apache+modwgi,그러나 현재 Django 의 배치 방법 은 이미 매우 많 고 점점 좋아 지고 상대 적 으로 복잡 해 졌 습 니 다.본 고 는 그 중의 Django 가 생산 환경 에서 의 배치 방안 을 소개 할 것 입 니 다.Gunicon+Nginx+Supervisor
실험 환경:
  • 운영 체제:CentOS 7
  • Python 버 전:3.4.8
  • Django 버 전:2.0.5
  • 준비 실험 환경:
        CentOS 7 의 기본 Python 버 전이 2.7.5 이기 때문에 3.4.8 버 전 을 더 설치 해 야 합 니 다.또한 우리 가 사용 하 는 Django 버 전 은 2.0.5 이 고 Django 2.x 버 전 은 Python 3.x 버 전 만 지원 하기 때문에 우 리 는 먼저 3.x 버 전의 Python 을 설치 합 니 다.
    yum install python34 python34-pip

    이제 Django 를 설치 하 겠 습 니 다.
    #         3.4   Python   Django,      pip install django,     2.7.5 Python,        ,    
    python3.4 -m pip install django

    Gunicorn 설치
    python3.4 -m pip install gunicorn

    Nginx 설치
    yum install nginx

    Supervisor 설치
    yum install supervisor

    Django 프로젝트 만 들 기:
    #     ProJectName       ,AppName    App 
    django-admin startproject ProJectName
    cd ProJectName
    django-admin startapp AppName

    Gunicorn 테스트 를 사용 하여 Django 프로젝트 시작:
    #                   
    cd ProJectName
    gunicorn ProJectName.wsgi

    시작 성공 후 입력 은 대략 다음 과 같 습 니 다.
    [2018-05-24 09:50:33 +0800] [22849] [INFO] Starting gunicorn 19.8.1
    [2018-05-24 09:50:33 +0800] [22849] [INFO] Listening at: http://127.0.0.1:8000 (22849)
    [2018-05-24 09:50:33 +0800] [22849] [INFO] Using worker: sync
    [2018-05-24 09:50:33 +0800] [22852] [INFO] Booting worker with pid: 22852

    상기 정 보 를 통 해 알 수 있 듯 이 프로젝트 가 시작 되 었 습 니 다.gunicron 버 전 은 19.8.1 이 고 127.0.0.1:8000 포트 를 감청 하 며 22849 번 프로 세 스 에서 작 동 합 니 다.작 동 하 는 worker 방식 은 sync 이 고 worker 프로 세 스 를 시 작 했 습 니 다.프로 세 스 번 호 는 22852 입 니 다.더 많은 워 커 관련 자 료 는 스스로 더 많은 정 보 를 찾 아 보 세 요.
    위 에서 우리 가 127.0.0.1 을 감청 하면 클 라 이언 트 가 접근 할 수 없 기 때문에 우 리 는 감청 포트 를 지정 하여 시작 해 야 합 니 다.위의 직접 Ctrl+c 를 끝내 고 아래 명령 을 실행 해 야 합 니 다.
    #   -b          
    gunicorn Gogenius.wsgi -b 0.0.0.0:8000

    Supervisor 설정:
        Supervisor 는 프로 세 스 를 관리 하 는 도구 입 니 다.기본적으로 설 치 된 후 설정 파일/etc/supervisord.conf 가 있 습 니 다.이것 은 주 설정 파일 입 니 다.또 하나의 디 렉 터 리/etc/supervisord.d 가 있 습 니 다.이 디 렉 터 리 는 일반적으로 우리 가 관리 하 는 프로 세 스 를 저장 하 는 데 사 용 됩 니 다.프로 세 스 마다 하나의 프로필 을.ini 로 끝 냅 니 다.
    Gunicorn 을 관리 하 는 프로필 만 들 기
    touch /etc/supervisord.d/gunicorn.ini

    gunicorn.conf 의 내용 은?
    [program:gunicorn]
    directory= /usr/local/ProJectName
    command = /usr/bin/gunicorn ProJectName.wsgi -b 127.0.0.1:8000
    user = root
    autostart= true
    autorestart= true
    redirect_stderr = true
    stdout_logfile = /var/log/gunicorn.log

    설명:
  • [program:gunicorn]:그 중에서 gunicorn 은 관리 할 하위 프로 세 스 이름 입 니 다.이 이름 은 사용자 정의 할 수 있 지만 낙서 하지 않 는 것 이 좋 습 니 다.하위 프로 세 스 와 관계 가 있 는 것 이 좋 습 니 다
  • directory:Django 프로젝트 의 루트
  • command:실행 할 명령 입 니 다.하위 프로 세 스 를 시작 하 는 명령 입 니 다.하위 프로 세 스 는 gunicorn
  • 입 니 다.
  • user:하위 프로 세 스 를 시작 할 사용 자 를 지정 합 니 다
  • autostart:자동 으로 시작 합 니 다.즉,아버지 프로 세 스 가 시 작 될 때 하위 프로 세 스 도 시 작 됩 니 다.슈퍼 바 이 저 부모 프로 세 스
  • autorestart:자동 으로 다시 시작 합 니 다.즉,하위 프로 세 스 가 끊 겼 을 때 부모 프로 세 스 는 자동 으로 프로 세 스 를 다시 시작 하려 고 시도 합 니 다
  • redirect_stderr:이 옵션 이 true 일 때 오류 로그 도 stdout 에 기 록 됩 니 다.logfile 중
  • stdout_logfile:정의 stdoutlogfile 경로
  • 더 많은 자료 에 대해 서 는 이 링크 를 참고 할 수 있 습 니 다.
    다음은 슈퍼 바 이 저 를 시작 하 는 겁 니 다.
    systemctl start supervisord.service
    systemctl enable supervisord.service

    하위 프로 세 스 의 설정 파일 을 변경 한 적 이 있다 면,이 때 저 희 는 reload 에서 Supervisor 서 비 스 를 내리 기만 하면 됩 니 다.전체 서 비 스 를 다시 시작 하지 않 아 도 됩 니 다.그러면 다른 서비스 에 영향 을 줄 수 있 습 니 다.
    supervisorctl reload

    Nginx 퍼 가기 설정:
         우 리 는 우리 Django 자체 가 경량급 웹 서버 를 사용 할 수 있다 는 것 을 알 고 있 습 니 다.Django 에 서 는 html js img css 등 페이지 의 저장 위 치 를 정의 하고 필요 한 페이지 를 자동 으로 찾 을 수 있 습 니 다.그러나 현재 우 리 는 Django 자체 의 웹 서버 를 사용 하지 않 았 습 니 다.이 때 는 우리 Nginx 설정 대 리 를 통 해 클 라 이언 트 가 해당 하 는 페이지 에 접근 하도록 요청 해 야 합 니 다.Nginx 설정 은 다음 과 같 습 니 다.자신의 요구 에 따라
    server {
    
        listen 5000;
    
        location / {
            # proxy_pass       gunicorn     
            proxy_pass http://127.0.0.1:8000;
            proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
    
        location ~.*\.(html|css|js|jpg|json|png|map|\ttf*|\woff2*|\woff*|eot|otf|ttf|json|cur|woff|svg|woff2|m3u8|ts|mp3)$ {
            # root  Django      
            root /usr/local/Gogenius;
            proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
    }

    Nginx 시작
    systemctl start nginx
    systemctl enable nginx

    이로써 우 리 는 Nginx 의 5000 포트 를 통 해 우리 의 Django 프로젝트 를 방문 할 수 있 습 니 다.

    좋은 웹페이지 즐겨찾기