Flask + Gunicon + Nginx 배치
앞서 우 분투 에서 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
사용자 로 들 어 왔 습 니 다. 서버 사용자 에 따라 수정 해 야 합 니 다.두 클 라 우 드 의 기본 루트 사용 자 는: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 로 이 배치 과정 을 완성 하면 순 자동화 배치 입 니 다. 시도 해 볼 만 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.