Python 웹 개발 프로그램 을 배치 하 는 몇 가지 방법
2,http,nginx 사용 proxypass 리 트 윗,이 요구 백 엔 드 application 은 높 은 병행 을 처리 할 수 있 는 http server 를 내장 해 야 합 니 다.python 의 웹 프레임 워 크 에서 tornado 만 선택 할 수 있 습 니 다.
3.uwsgi,4 부분 구성 포함:
uwsgi 의 특징 은 자체 프로 세 스 제어 프로그램 입 니 다.c 언어 로 작 성 된 것 입 니 다.natvie 함 수 를 사용 합 니 다.사실은 spawn-fcgi/phop-fpm 와 유사 합 니 다.그래서 uwsgi 는 다양한 응용 프레임 워 크 를 지원 할 수 있 습 니 다.(python,lua,ruby,erlang,go)등 을 포함 합 니 다.
4、mod_python,이것 은 apache 에 내 장 된 모듈 로 mod 에 심각하게 의존 합 니 다.python 컴 파일 에 사용 되 는 python 버 전 은 apache 와 세트 로 사용 되 며 추천 하지 않 습 니 다.
5.cgi,이것 은 너무 오래 되 어 추천 하지 않 습 니 다.또한 nginx 는 cgi 방식 을 지원 하지 않 습 니 다.lighttpd 나 apache 만 사용 할 수 있 습 니 다.
6.spawn-fcgi,이것 은 fastcgi 다 중 프로 세 스 관리 프로그램 입 니 다.lighttpd 설치 패키지 에 첨부 된 것 은 flup 효과 와 마찬가지 로 flup 은 python 코드 급 도입 이 고 spawn-fcgi 는 외부 프로그램 입 니 다.spawn-fcgi 는 용도 가 넓 습 니 다.임의의 언어 개발 코드,phop,python,perl 을 지원 할 수 있 습 니 다.코드 가 fastcgi 인 터 페 이 스 를 실현 하면 프로 세 스 를 관리 할 수 있 습 니 다.
7.scgi,전체 이름 은 Simple Common Gateway Interface 이 고 cgi 의 대체 버 전 입 니 다.scgi 프로 토 콜 은 간단 합 니 다.저 는 fastcgi 와 차이 가 많 지 않다 고 생각 합 니 다.다만 널리 보급 되 지 않 았 습 니 다.nginx 에 대응 하 는 설정 명령 은 scgi 입 니 다.pass,쓰 고 싶 으 면 쓰 세 요.flup 도 지원 합 니 다.
8.Gunicorn,uwsgi 와 유사 한 도구 로 rails 의 배치 도구(Unicorn)에서 이식 되 었 습 니 다.그러나 이 프로 토 콜 은 WSGI 로 파 이 썬 웹 서버 게 이 트 웨 이 인터페이스 라 고 합 니 다.이것 은 python 2.5 시 정 의 된 공식 기준(PEP 333)이 고 뿌리 가 붉 으 며 배치 가 간단 합 니 다.http://gunicorn.org/에 상세 한 튜 토리 얼 이 있 습 니 다.
9、mod_wsgi,apache 의 모듈 이자 WSGI 프로 토 콜 을 지원 합 니 다.https://code.google.com/p/modwsgi/
uwsgi
설치
pip install uwsgi
uwsgi 설정uwsgi 는 여러 가지 설정 을 사용 할 수 있 습 니 다:
1,ini
2,xml
3,json
4,yaml
설정 예제
$ cat etc/uwsgi.ini
[uwsgi]
socket = 127.0.0.1:9005
chdir = /Users/suoning/python_project/trunk/
wsgi-file = main.py
processes = 4
stats = 127.0.0.1:9000
daemonize = /tmp/uwsgiServer.log
pidfile = /tmp/uwsgi.pid
vacuum = true
log-maxsize = 50000000
disable-logging = true
callable = app
$
설정 매개 변수 설명:일반 옵션:
socket:주소 와 포트 번호,예 를 들 어 socket=127.0.0.1:50000
processes:열 린 프로 세 스 수
workers:열 린 프로 세 스 수 는 processes 와 같 습 니 다. workers / processes)
chdir:실행 디 렉 터 리 지정(애플 리 케 이 션 로드 전에 지 정 된 디 렉 터 리 에 chdir)
wsgi-file:wsgi-file(load.wsgi 파일)불 러 오기
stats:지정 한 주소 에서 상태 서 비 스 를 시작 합 니 다(enable the stats server on the specified address)
threads:실행 스 레 드.GIL 의 존재 로 인해 나 는 이 진심 이 아무 소 용이 없다 고 생각한다.run each worker in prethreaded mode with the specified number of threads)
master:주 프로 세 스 존재 허용(enable master process)
daemonize:프로 세 스 를 배경 에서 실행 시 키 고 지정 한 로그 파일 이나 udp 서버(daemonize uWSGI)에 로 그 를 기록 합 니 다.실제로 가장 많이 사용 되 는 것 은 실행 기록 을 로 컬 파일 에 출력 하 는 것 이다.
log-maxsize:로그 파일 을 고정 파일 크기(단위 KB)로 자 릅 니 다.예:log-max size=50000000 50M 로그 파일 입 니 다.
pidfile:pid 파일 의 위 치 를 지정 하고 메 인 프로 세 스 의 pid 번 호 를 기록 합 니 다.
vacuum:서버 가 종 료 될 때 자동 으로 환경 을 청소 하고 유 닉 스 socket 파일 과 pid 파일 을 삭제 합 니 다(try to remove all of the generated file/sockets)
disable-logging:요청 한 정 보 를 기록 하지 않 는 로그 입 니 다.로그 에 오류 와 uWSGI 내부 메시지 만 기록 합 니 다.이 항목 을 열지 않 으 면 로그 에 이러한 기록 이 대량으로 나타 납 니 다.
[pid: 347|app: 0|req: 106/367] 117.116.122.172 () {52 vars in 961 bytes} [Thu Jul 7 19:20:56 2016] POST /post => generated 65 bytes in 6 msecs (HTTP/1.1 200) 2 headers in 88 bytes (1 switches on core 0)
설정 nginx
$ cat etc/nginx/servers/tongbupan.conf
server {
listen 80;
server_name localhost;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:9005;
}
location /webstatic/ {
expires 7d;
add_header Cache-Control public;
alias /Users/suoning/probject/python_project/webstatic/trunk/;
}
}
$
$ nginx -t
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
$
$ nginx -s reload
$
응용 프로그램 설정flask 예시
...
app = Flask('pan')
...
if __name__ == '__main__':
# app.run(host='0.0.0.0', port=5000)
app.run()
# : app uwsgi uwsgi.ini callable = app
시작
$
$ uwsgi --ini /usr/local/etc/uwsgi.ini
[uWSGI] getting INI configuration from /usr/local/etc/uwsgi.ini
$
$ ps -ef|grep uwsgi
11428 1 0 11:40 ?? 0:01.23 uwsgi --ini /usr/local/etc/uwsgi.ini
11432 11428 0 11:40 ?? 0:00.00 uwsgi --ini /usr/local/etc/uwsgi.ini
11433 11428 0 11:40 ?? 0:00.00 uwsgi --ini /usr/local/etc/uwsgi.ini
11434 11428 0 11:40 ?? 0:00.00 uwsgi --ini /usr/local/etc/uwsgi.ini
11435 11428 0 11:40 ?? 0:00.00 uwsgi --ini /usr/local/etc/uwsgi.ini
11440 69240 0 11:40 ttys000 0:00.00 grep uwsgi
$
$ lsof -i tcp:9000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
uwsgi 11428 suoning 28u IPv4 0x5583e11534d24e73 0t0 TCP localhost:cslistener (LISTEN)
$
$ lsof -i tcp:9005
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
uwsgi 11428 suoning 6u IPv4 0x5583e11535699e73 0t0 TCP localhost:9005 (LISTEN)
uwsgi 11432 suoning 6u IPv4 0x5583e11535699e73 0t0 TCP localhost:9005 (LISTEN)
uwsgi 11433 suoning 6u IPv4 0x5583e11535699e73 0t0 TCP localhost:9005 (LISTEN)
uwsgi 11434 suoning 6u IPv4 0x5583e11535699e73 0t0 TCP localhost:9005 (LISTEN)
uwsgi 11435 suoning 6u IPv4 0x5583e11535699e73 0t0 TCP localhost:9005 (LISTEN)
$
FCGI참고:http://webpy.org/cookbook/fastcgi-nginx
Nginx 설정
$ cat etc/nginx/servers/pan.conf
server {
listen 80;
server_name localhost;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location / {
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_pass 127.0.0.1:9005;
}
location /webstatic/ {
expires 7d;
add_header Cache-Control public;
alias /Users/suoning/probject/python_project/webstatic/trunk/;
}
}
$
응용 프로그램 설정단순 예시
from flup.server.fcgi import WSGIServer
from pan import app
WSGIServer(
app,
bindAddress=(host, port),
maxThreads=threads
).run()
생산 환경 예시
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'suoning'
import sys
import argparse
from flup.server.fcgi import WSGIServer
from lib.daemon import Daemon
from pan import app
APP_NAME = 'pan_platform'
APP_INST_NAME = '20170501'
parser = argparse.ArgumentParser(description=u'Run an pan FastCGI server')
parser.add_argument('command', type=str,
help=u'command [start|stop|restart]',
choices=['start', 'stop', 'restart'])
parser.add_argument('-p', '--port', type=int,
help=u'port of this server', required=True)
parser.add_argument('-t', '--threads', type=int, default=50,
help=u'max number of threads')
parser.add_argument('-host', '--host', default='0.0.0.0',
help=u'Listen to the main clause')
class panPlatformDaemon(Daemon):
def run(self):
#
try:
WSGIServer(
app,
bindAddress=(args.host, args.port),
maxThreads=args.threads,
umask=0111
).run()
except:
sys.stderr.write('oops')
def gen_pidfile(port):
return '/var/run/%s_%s_%d.pid' % (APP_NAME, APP_INST_NAME, port)
if __name__ == '__main__':
args = parser.parse_args()
daemon = panPlatformDaemon(gen_pidfile(args.port))
if 'start' == args.command:
daemon.start()
elif 'stop' == args.command:
daemon.stop()
elif 'restart' == args.command:
daemon.restart()
else:
print "Unknown command"
sys.exit(2)
sys.exit(0)
fastcgi 프로 토 콜 과 http 프로 토 콜 이 코드 배치 에서 의 우열 비교WIKI Links:
CGI - http://en.wikipedia.org/wiki/Common_Gateway_Interface
FCGI - http://en.wikipedia.org/wiki/Fcgi
SCGI - http://en.wikipedia.org/wiki/SCGI
WSGI - http://en.wikipedia.org/wiki/Wsgi
Other reference:
http://helpful.knobs-dials.com/index.php/CGI%2C_FastCGI%2C_SCGI%2C_WSGI%2C_servlets_and_such#FastCGI_and_SCGI
CGI = Common Gateway Interface
말 그대로 인터페이스 규범 이다.이 규범 은 웹 서버 에서 실행 되 는 서버 프 록 시,웹 페이지 생 성 과정 에서 서버 환경 컨 텍스트 와 HTTP 프로 토 콜 의 매개 변수 이름 을 어떻게 가 져 오고 되 돌려 주 는 지 상세 하 게 정의 합 니 다.METHOD,QUERY_STRING,CONTENT_TYPE 등등.대부분의 웹 서버 프로그램 은 스 크 립 트 형식 으로 HTTP 요청 을 받 아들 이 고 처리 하 며 HTTP 페이지 나 응답 을 되 돌려 줍 니 다.이 스 크 립 트 프로그램 들 은 모두 가 알 고 있 는 PHP,ASP,JSP 등 이다.
FCGI = Fast CGI
그것 은 사실 CGI 가 구체 적 으로 실현 하 는 변종 이다.CGI 에이전트 와 웹 숙주 서비스 프로그램의 통신 비용 을 줄 여 웹 서비스 성능 을 향상 시 키 는 최종 목적 을 달성 하 는 것 이 디자인 방향 이다.이 를 통 해 알 수 있 듯 이 FCGI 는 규범 적 으로 CGI 와 다 르 지 않 고 구체 적 인 실현 방식 만 개선 되 었 다.CGI 는 모든 HTTP 요청 에 대해 웹 홈 서비스 프로그램 이 서버 스 크 립 트 를 호출 하기 위해 새로운 프로 세 스 를 만 들 고 요청 해 야 한다.FCGI 의 방법 은 독립 된 FCGI 서비스 프로 세 스 를 구축 하고 웹 홈 서비스 프로 세 스 와 통신 하 는 것 이다.FCGI 서비스 프로 세 스 가 시작 되면 자원 을 배분 하고 스 레 드 를 만들어 HTTP 요청 에 응답 하 며 자신의 생명 주 기 를 결정 하여 시스템 이 프로 세 스 를 만 들 기 위 한 자원 비용 을 크게 낮 추 는 것 이다.PHP,ASP.Net 등 현대 유행 하 는 웹 서버 프로그램 은 기본적으로 FCGI 의 실현 이다.
SCGI = Simple CGI
FCGI 가 데이터 프로 토 콜 과 응답 과정 을 간소화 한 결과 물이 다.AJAX 나 REST 기반 HTTP 요청 이 늘 어 나 는 데 적응 하기 위해 더욱 빠 르 고 간결 한 응답 을 하 는 것 이 설계 목적 이다.또한 SCGI 는 서버 가 HTTP 프로 토 콜 에 응답 을 요청 한 후 즉시 이 HTTP 연결 을 닫 기로 약속 했다.그래서 SCGI 가 보편적 인 의미 에서 SOA 가 제창 하 는'요청-망각'과 같은 통신 모델 에 더욱 적합 하 다 는 것 을 알 수 있다.
WSGI = Web Server Gateway Interface
이 프로 토 콜 은 Python 언어의 특허 로 웹 서비스 숙주 프로그램 과 HTTP 응답 에이전트 간 통신 에 보편적으로 적용 되 는 인 터 페 이 스 를 정의 합 니 다.이 는 Python 프로그래머 가 웹 프레임 워 크 와 웹 홈 서버 프로그램 간 에 심각 한 결합 성 이 있다 는 것 을 알 게 되 었 기 때 문 입 니 다.예 를 들 어 일부 프레임 워 크 는 아파 치 를 위 한 mod 입 니 다.python 이 디자인 한.그래서 WSGI 는 매우 낮은 수준의 인 터 페 이 스 를 정의 했다.흔히 볼 수 있 는 Python 웹 프레임 워 크 는 모두 이 협 의 를 실현 했다.예 를 들 어 Cherry Py,Django,web.py,web2py,TurboGears,Tornado,Pylons,BlueBream,Google App Engine[dubious C discuss],Trac,Flask,Pyramid 등 이다.
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.