Flask + Gunicon + Nginx 배치

5423 단어
최근 에 많은 친구 들 이 저 에 게 Flask 배치 에 관 한 질문 을 하고 있 습 니 다. 솔직히 저 는 이런 질문 을 보고 대답 하 는 것 이 기 쁩 니 다. 적어도 점점 더 많은 사람들 이 Flask 를 사용 하기 시작 했다 는 것 을 증명 합 니 다.
앞서 우 분투 에서 uwsgi + nginx 를 사용 한 Flask 배치 방법 을 발표 한 적 이 있 습 니 다. 솔직히 uwsgi 는 큰 구덩이 입 니 다. Django 에 사용 하 는 것 은 괜 찮 겠 지만 Flask 에 사용 하 는 것 이 꼭 그런 것 은 아 닙 니 다.적어도 uwsgi 는 사람 을 매우 괴 롭 히 는 물건 이다.한 마디 로 하면, 나 는 줄곧 복잡 한 것 이 반드시 나 쁜 것 은 아니 라 고 생각 했 지만, 틀림없이 좋 지 않 을 것 이다.
나 자신 도 여러 차례 의 갈등 과 시 도 를 거 쳐 마침내 Flask 의 믿 을 만 한 배치 방안 을 찾 았 다.현재 회사 의 위 챗 백 엔 드 플랫폼 도 이런 배치 방안 을 채택 하고 있 습 니 다.관심 있 는 친구 도 한 번 보 거나 더 좋 은 방안 을 제시 해 주세요. 지식 은 공유 해 야 가치 가 있 는 지 알 수 있 기 때 문 입 니 다.
저 는 Flask 공식 문서 에서 재 미 있 는 내용 중 하 나 를 찾 았 습 니 다. 여 기 는 링크 를 용서 하 는 것 입 니 다. Standalone WSGI Containers 입 니 다. 그 중에서 uwsgi 의 모습 이 없습니다.화가 났 지만 괴 롭 히 지 않 아 도 되 는 Flask 배치 방안 을 찾 았 습 니 다. Gunicon.
우 분투 의 준비
만약 당신 이 텐 센트 클 라 우 드 나 아 리 클 라 우 드 에서 VPS 를 구 매 했다 고 가정 한다 면 다음 명령 을 직접 실행 하 세 요. 다른 것 은 설명 이 많 지 않 습 니 다. 단지 python 환경 을 준비 하 는 것 일 뿐 입 니 다.
$ sudo apt-get update
$ sudo apt-get install python-dev python-pip python-virtualenv

그리고 nginx 를 설치 합 니 다.
$ sudo apt-get install nginx
/var/www 디 렉 터 리 아래 myflask 폴 더 (프로젝트 디 렉 터 리) 를 만 든 다음 chmod 로 권한 을 변경 하 십시오.
$ sudo mkdir /var/www/myflask
$ sudo chmod 777 /var/www/myflask

주: 물론 nginx 의 기본 사이트 디 렉 터 리 /usr/share/nginx/html 를 사용 할 수 있 습 니 다.
그리고 scp 명령 으로 이 컴퓨터 의 flask 프로젝트 를 서버 에 직접 전달 합 니 다.
$ scp -r myflask [email protected]:/var/www/myflask

도 메 인 이름 은 주소 나 서버 에서 사용 하고 있 는 도 메 인 이름 으로 바 꿉 니 다. 저 는 root 사용자 로 들 어 왔 습 니 다. 서버 사용자 에 따라 수정 해 야 합 니 다.두 클 라 우 드 의 기본 루트 사용 자 는:
  • 등 신: ubuntu
  • 아 리: root
  • Gunicorn
    Gunicorn 그린 유 니 콘 은 Python WSGI UNIX 의 HTTP 서버 다.루비 의 유 니 콘 프로젝트 에서 이 식 된 pre - fork worker 모델 입 니 다.이 Gunicorn 서버 는 대체로 각종 웹 프레임 워 크 와 호 환 되 며 매우 간단 한 실행, 경량급 자원 소모, 그리고 상당히 빠르다.
    나 는 일찍이 구 글 이 구 니 콘 과 uwsgi 를 가 진 적 이 있 는데, 모두 uwsgi 의 성능 이 gunicorn 보다 높다 고 말 했 기 때문에 최종 결 과 는 컵 으로 이 루어 졌 다.하지만 지금 고 개 를 돌려 보면 이 유 니 콘 은 늦 지 않 았 을 것 이다.
    Gunicorn 설치
    Gunicorn 은 virtualenv 환경 에 설치 해 야 합 니 다. virtualenv 에 대해 서 는 더 이상 말 하지 않 겠 습 니 다. 사용 해 보지 않 았 다 면 빨리 뇌 보 를 하 세 요.설치 전 venv 활성화 기억
    (venv) $ pip install gunicorn

    Gunicorn 실행
    (venv) $ gunicorn -w 4 -b 127.0.0.1:8080 wsgi:application

    That's all! 그것 의 설 치 는 이렇게 간단 하 다.근 데 여기 설명 이 있어 야 돼.바로 마지막 매개 변수 wsgi:application 입 니 다. 이것 은 프로그램 입구 입 니 다. 저 는 작은 범례 를 써 서 설명 해 야 합 니 다.
    새 파일 wsgi.py 을 만 듭 니 다. Flask 프로젝트 에서 자주 사용 하 는 manage.py 안내 스 크 립 트 와 아무런 상관 이 없습니다.(이 건 내 가 멍청 한 거 야. 예전 에 잘 모 르 고 uwsgi 때문에 헷 갈 렸 어.)
    # wsgi.py
    
    from flask import Flask
    
    def create_app():
      #                `__init__.py`         。
      app = Flask(__name__)
      return app
    
    application = create_app()
    
    if __name__ == '__main__':
        application.run()

    자, 이 wsgi:application 매개 변 수 는 이해 하기 쉽 습 니 다. 두 부분 으로 나 누 어 집 니 다. wsgi 바로 안내 용 python 파일 이름 (접미사 / 모듈 이름 포함 하지 않 음) application 이 바로 Flask 인 스 턴 스 의 이름 입 니 다.이렇게 하면 gunicorn 은 host 의 어떤 fllask 인 스 턴 스 를 찾 을 수 있 습 니 다.
    여기 서부 터 gunicorn 의 좋 은 점 을 나 타 낼 수 있 습 니 다. 우 리 는 설정 파일 을 전혀 배치 하지 않 아 도 명령 하나 로 그것 을 시작 할 수 있 습 니 다.
    Nginx 설정
    Nginx 에 대해 서도 자세히 말 하지 않 겠 습 니 다. 우 리 는 테 마 를 향 해 달 려 가 Nginx 의 기본 설정 파일 을 죽 입 니 다.
    sudo nano /etc/nginx/site-avalidable/default

    폭력 은 다음 과 같은 내용 으로 수정 된다.
    먼저 백업 하 는 것 을 권장 합 니 다 default 파일 sudo cp /etc/nginx/site-avalidable/default /etc/nginx/site-avalidable/default.bak
    server {
        listen 80;
        server_name example.org; #   HOST       ,     
    
        location / {
            proxy_pass http://127.0.0.1:8080; #       gunicorn host      
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    
      }

    nginx 를 완성 하려 면 nginx 서 비 스 를 다시 시작 해 야 합 니 다!
    sudo service nginx restart

    Gunicorn 을 서비스 로 실행 합 니 다.
    이것 이 마지막 단계 입 니 다. 저 희 는 UpStart 설정 Flask 프로그램 을 서비스 프로그램 으로 사용 하여 Linux 가 시 작 될 때 실 행 될 것 입 니 다.먼저 시작 프로필 만 들 기:
    sudo nano /etc/init/myflask.conf

    그리고 다음 설정 을 추가 합 니 다.
    description "The myflask service"
    
    start on runlevel [2345]
    stop on runlevel [!2345]
    
    
    respawn
    setuid root
    setgid www-data
    
    env PATH= /var/www/myflask/venv/bin
    chdir /var/www/myflask/
    
    exec gunicorn -w 4 -b 127.0.0.1:8080 wsgi:application
    

    OK 큰 성 과 를 거 두 었 습 니 다. my flask 서 비 스 를 시작 합 니 다.
    sudo service myflask start

    여기 보충 해 야 할 것 이 있 습 니 다. myflask.conf 에 있 는 것 을 유의 하 세 요.
    env PATH= /var/www/myflask/venv/bin
    chdir /var/www/myflask/

    여기 서 가리 키 는 주 소 는 프로젝트 경로 와 virtualenv 의 경로 입 니 다.
    작은 매듭
    이 배치 과정 은 내 가 전에 소개 한 uwsgi 보다 훨씬 간단 하 겠 지?작은 Tips 를 드 리 겠 습 니 다. Fabric 로 이 배치 과정 을 완성 하면 순 자동화 배치 입 니 다. 시도 해 볼 만 합 니 다.

    좋은 웹페이지 즐겨찾기