아 리 클 라 우 드 배치 우 분투 1.4 Flask + WSGI + Nginx 상세 설명
Linux 세계 로 무 너 진 후에 모든 크 고 완전한 개발 프레임 워 크 와 소프트웨어 에 대해 반 갑 지 않 은 느낌 을 가지 게 되 었 습 니 다. 개인 은 작고 정교 하 며 고성능 의 생산 능력 이 높 은 소프트웨어 와 개발 프레임 워 크 를 사용 하 는 것 을 좋아 합 니 다. 그래서 제 첫 번 째 언어 는 Python 과 Coffee 입 니 다. 개발 프레임 워 크 는 당연히 AngularJS (전단) + Flask (백 엔 드) 입 니 다.AngularJS 와 Flask 는 본 고의 서술 범위 안에 있 지 않 고 본 고 는 Flask 의 마지막 킬로미터 의 문 제 를 해결 했다. 즉, Linux 배치 이다.
내 가 채택 한 배치 방안 은:
ssh root@
암 호 를 입력 하고 들 어가 면 모든 작업 이 로 컬 터미널 과 완전히 일치 합 니 다.
Python 환경 설치
다음은 python 입 니 다. Ubuntu 의 기본 환경 은 python 2.7 을 미리 설 치 했 기 때문에 python 의 pip 설치 도구 만 설치 하면 됩 니 다.pip 는 python 기반 소프트웨어 도 구 를 설치 하 는 데 사 용 됩 니 다. 다음 글 에서 자주 사용 할 것 입 니 다.
PIP
python 으로 모 르 면 [pip |http://pypi.python.org/] 그럼 빨리 뇌 보 를 하 는 게 좋 을 것 같 아 요. 명령 은 다음 과 같 아 요.
sudo apt-get install pip
서로 다른 항목 은 다양한 의존 패 키 지 를 참조 할 수 있 습 니 다. 버 전과 응용 간 의 충돌 을 피하 기 위해 '지옥 의존' [Virtualenv | https://virtualenv.readthedocs.org/en/latest/] 바로 우리 python 프로젝트 의 필수품 입 니 다.VirtualEnv 는 모든 Python 응용 프로그램 에 독립 된 개발 환경 을 만들어 서로 영향 을 주지 않 게 할 수 있 습 니 다. Virtualenv 는 할 수 있 습 니 다.
sudo pip install virtualenv
VirtualEnv 설치 후 프로젝트 디 렉 터 리 에서 만 실행
virtualenv
디 렉 터 리 이름 가상 환경 폴 더 를 만 들 고 사용 할 수 있 습 니 다. activate
명령 은 이 python 가상 환경 을 사용 할 수 있 습 니 다. 구체 적 인 동작 은 다음 과 같 습 니 다.내 프로젝트 목록 이름 을 가정 하 다.
/home/www/my_flask
먼저 가상 환경 을 설치 합 니 다. venv )
my_flask root$ virtualenv venv
>> New python executable in venv/bin/python
>> Installing setuptools, pip...done.
프로젝트 디 렉 터 리 에 새 venv 디 렉 터 리 를 만 듭 니 다. python 을 실행 하 는 기본 환경 을 위 한 도구 와 명령, 패키지 입 니 다. 그리고 이 환경 을 사용 하면 현재 명령 행 상 태 를 가상 환경 에 들 어가 가상 환경 에 들 어가 면 python 을 설치 하 는 모든 작업 은 패키지 와 인용 을 가상 링 에 설치 합 니 다. 전체 python 환경 에 영향 을 주지 않 습 니 다.
my_flask root$ source venv/bin/activate
(venv)my_flask root$
activate
명령 어 를 호출 하면 명령 문자 앞 에 (venv) 글자 가 나타 납 니 다. deactivate 를 통 해 가상 환경 을 종료 할 수 있 습 니 다.uWSGI 설치
Flask 의 실제 생산 운영 환경 에 대한 선택 이 많 지 않 고 비교적 성숙 한 것 은 [Gunicon |http://gunicorn.org/uWSGI |https://github.com/unbit/uwsgi], Gunicon 의 설정 이 매우 간단 하 다 고 들 었 는데, 안 타 깝 게 도 나 는 설정 에 성공 한 적 이 없다. 나 는 현재 uWSGI 를 사용 하고 있다. 다음은 uWSGI 를 설치 하 자.
(venv)my_flask root$ pip install uwsgi
가상 환경 에서 사용 할 필요 가 없습니다
sudo
. virtualenv 는 권한 이 없 기 때 문 입 니 다.이 설 치 는 매우 빠 르 고 기본적으로 초 단위 입 니 다. 설치 가 끝 난 후에 우 리 는 먼저 uWSGI 를 내 려 놓 고 뒤에서 다시 그 를 설정 할 수 있 습 니 다. 왜냐하면 우 리 는 먼저 관건 적 인 Flask 환경 과 우리 의 프로젝트 파일 을 서버 디 렉 터 리 에 전송 해 야 하기 때 문 입 니 다.
Flask 설치
나 는 목록 파일 로 Flask 와 그 에 대한 의존 도 를 한꺼번에 설치 하 는 것 이 더 빠 를 것 입 니 다. 나의 인용 목록 은 다음 과 같 습 니 다: requirements. txt
Flask==0.10.1
Flask-Login==0.2.11
Flask-Mail==0.9.1
Flask-Moment==0.4.0
Flask-PageDown==0.1.5
Flask-SQLAlchemy==2.0
Flask-Script==2.0.5
Flask-WTF==0.10.2
Flask-Cache==0.13.1
Flask-Restless==0.15.0
Flask-Uploads==0.1.3
Jinja2==2.7.3
Mako==1.0.0
Markdown==2.5.1
MarkupSafe==0.23
SQLAlchemy==0.9.8
WTForms==2.0.1
Werkzeug==0.9.6
html5lib==1.0b3
itsdangerous==0.24
six==1.8.0
awesome-slugify==1.6
미 친 척 하지 않 으 면 안 된다 고 상상 할 수 있 습 니 다. 목록 파일 설치:
(venv)my_flask root$ pip install -r requirements.txt
이 설 치 를 실행 하기 전에 python 가상 환경 을 사용 하 는 것 을 주의해 야 합 니 다. 그렇지 않 으 면 전역 에 직접 설치 할 것 입 니 다!
프로젝트 파일
다음은 Flask 의 프로젝트 파일 을 올 리 는 것 입 니 다. 그 전에 저 는 각 대형 '전재 전문 업 체' 에서 많은 자 료 를 찾 았 습 니 다. 이 단계 에서 대부분 위 에 표준 Flask 실행 파일 만 추 가 했 습 니 다. 범례 를 만 들 수 있 지만 사실은 이것 은 사람 을 현혹 시 켰 습 니 다. 왜 요? 먼저 코드 를 보 세 요.
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
생산 환경 에서 누가 이런 코드 를 사용 할 수 있 습 니까? 이것 은 Flask 의 가장 간단 한 입문 범 위 였 습 니 다. 제 Flask 프로젝트 에서 app 은 가방 안에 만 들 어 졌 습 니 다. 많은 사람들 이 이렇게 할 것 이 라 고 믿 습 니 다. 가방 밖에서 저 희 는 Flask Script 로 manage. py 파일 을 시작 파일 로 쓰 면 각종 프로젝트 를 지원 할 수 있 습 니 다. window 에 설치 할 수 있 는 FastCGI 를 포함 합 니 다.
그럼 나의 이 manage. py 는 이렇게 생 겼 다.
#!/usr/bin/env python
import os
if os.path.exists('.env'):
print('Importing environment from .env...')
for line in open('.env'):
var = line.strip().split('=')
if len(var) == 2:
os.environ[var[0]] = var[1]
from app import create_app
from flask.ext.script import Manager, Shell
# app
app = create_app(os.getenv('FLASK_CONFIG') or 'default')
manager = Manager(app)
def make_shell_context():
return dict(app=app)
manager.add_command("shell", Shell(make_context=make_shell_context))
@manager.command
def deploy():
"""Run deployment tasks."""
pass
if __name__ == '__main__':
manager.run()
이렇게 하면 나의 개발 환경 은 이렇게 Flask 를 운행 할 수 있다.
python manage.py runserver
더 자세 한 방법 은 [Flask Script |http://flask-script.readthedocs.org/en/latest/확장
좋 습 니 다. SSH 를 지원 하 는 FTP 도구 로 Flask 프로젝트 파일 을 서버 에 업로드 할 수 있 습 니 다. 다음은 전체 프로젝트 파일 구조 입 니 다.
www/
└── my_flask
│ ├── logs
│ └── venv //
│ │ ├── bin
│ │ │ ├── activate
│ │ │ ├── easy_install
│ │ │ ├── gunicorn
│ │ │ ├── pip
│ │ │ └── python
│ │ ├── include
│ │ │ └── python2.7 -> /usr/include/python2.7
│ │ ├── lib
│ │ │ └── python2.7
│ │ ├── local
│ │ │ ├── bin -> /home/shenye/shenyefuli/bin
│ │ │ ├── include -> /home/shenye/shenyefuli/include
│ │ │ └── lib -> /home/shenye/shenyefuli/lib
│ └── app //Flask
│ │ └── __init__.py // 。
│ ├── manage.py
│ ├── requirements.txt
uwsgi 설정
자, 프로젝트 준비 작업 이 끝 났 습 니 다. uwsgi 를 설정 할 때 가 되 었 습 니 다. 구체 적 인 명령 은 공식 문 서 를 볼 수 있 습 니 다. 우 리 는 여기 서 명령 방식 을 사용 합 니 다. 시작 을 설정 합 니 다. 저 는. ini 파일 을 설정 하여 프로젝트 디 렉 터 리 에 config. ini (구체 적 으로 다음 글 참조) 를 만 든 후에 이렇게 실행 할 수 있 습 니 다.
(venv)my_flask root$ uwsgi config.ini
나 는 가장 간단 한 방식 이 라 고 생각 하고 변경 하기 쉽다. 중요 한 부분 이 왔 다. config. ini 는 이렇게 썼 다.
[uwsgi]
# uwsgi
socket = 127.0.0.1:8001
#
chdir = /home/www/
# python
wsgi-file = manage.py
# python application
callable = app
#
processes = 4
#
threads = 2
#
stats = 127.0.0.1:9191
메모: callable = app 이 app 은 manage. py 프로그램 파일 의 변수 입 니 다. 이 변수의 유형 은 Flask 의 application 류 입 니 다.
uwsgi 실행
``` (venv)my_flask root$ uwsgi config.ini
[uWSGI] getting INI configuration from config.ini
*** Starting uWSGI 2.0.8 (64bit) on [Fri Dec 19 14:34:11 2014] // 쓸모없는 시작 정보 Stats server enabled on 127.0.0.1: 9191 fd: 15 * * ` ` 를 생략 합 니 다.
OK, 이 때 는 uwsgi 를 정상적으로 시작 하고 Flask 프로젝트 를 불 러 왔 습 니 다. ctrl + c 는 프로그램 을 닫 습 니 다. 그러나 이것 은 명령 시작 형식 일 뿐 입 니 다. 서버 와 함께 시작 하고 백 엔 드 서비스 로 실행 하 는 것 이 운영 환경의 실제 필요 합 니 다. 따라서 다음 에는 다른 도 구 를 설치 하여 uwsgi 를 유도 해 야 합 니 다.
Supervisor 설치
[Supervisor|http://supervisord.org/configuration.html] 여러 애플 리 케 이 션 을 동시에 시작 할 수 있 습 니 다. 가장 중요 한 것 은 Crash 를 사용 할 때 이 애플 리 케 이 션 을 자동 으로 다시 시작 하여 가용성 을 확보 할 수 있 습 니 다.
sudo apt-get install supervisor
Supervisor 의 전역 프로필 위 치 는 다음 과 같 습 니 다.
/etc/supervisor/supervisor.conf
정상 적 인 상황 에서 우 리 는 그것 에 대해 어떠한 변경 도 할 필요 가 없다. 단지 새로운 *. conf 파일 을 추가 해서 두 어야 한다
/etc/supervisor/conf.d/
다음 에 가능 합 니 다. my flask 프로젝트 를 시작 하 는 uwsgi 의 슈퍼 바 이 저 설정 을 새로 만 듭 니 다. (이름: my flask 슈퍼 바 이 저. conf):
[program:my_flask]
#
command=/home/www/my_flask/venv/bin/uwsgi /home/www/my_flask/config.ini
#
directory=/home/www/my_flask
#
user=root
autostart=true
autorestart=true
#
stdout_logfile=/home/www/my_flask/logs/uwsgi_supervisor.log
시작 서비스
sudo service supervisor start
서비스 종료
sudo service supervisor stop
Nginx 설치
[Nginx|http://nginx.com/] 경량급, 성능 이 강하 고 자원 을 적 게 차지 하 며 높 은 병행 을 잘 처리 할 수 있 는 역방향 대리 소프트웨어 입 니 다.
sudo apt-get install nginx
Nginx 설정
Ubuntu 에서 Nginx 를 설정 하 는 것 도 간단 합 니 다. 기본 nginx. conf 를 바 꾸 지 마 십시오.
/ext/nginx/sites-available/default
파일 을 바 꾸 면 됩 니 다.
기본 파일 새로 만 들 기:
server {
listen 80;
server_name XXX.XXX.XXX; #
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001; # uwsgi , uwsgi
uwsgi_param UWSGI_PYHOME /home/www/my_flask/venv; #
uwsgi_param UWSGI_CHDIR /home/www/my_flask; #
uwsgi_param UWSGI_SCRIPT manage:app; #
}
}
default 프로필 을 교체 하면 큰 성 과 를 거 둘 수 있 습 니 다! 그리고 설정 을 변경 하려 면 nginx 를 다시 시작 하 는 것 을 기억 해 야 합 니 다:
sudo service nginx restart
총결산
아 리 클 라 우 드 의 서버 운행 속도 가 매우 좋 은 데다 가 Flask + uWSGI + nginx 와 같은 고성능 구 조 를 사용 하면 전체 사이트 의 응답 속도 가 매우 빠 르 고 각 페이지 의 응답 속도 가 0.1 s 가 되 지 않 습 니 다. 이에 비해 저 는 C \ # Avarix 에 배 치 된 사이트 (같은 프로그램, 서로 다른 언어 구현) 를 사 용 했 습 니 다.각 페이지 의 응답 속 도 는 적어도 2s 이다. 이것 은 200 대 1 의 성능 이다. 물론 나 는 전문가 들 이 소프트웨어 로 이 두 가지 차 이 를 측정 할 여유 가 없다. 본 고 를 쓰 는 목적 도 이에 대해 기록 을 해서 나중에 돌 이 켜 볼 수 있 도록 하 는 것 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.