당신은 어떻게 배포하 WSGI 응용 프로그램?(그리고 왜 그것이 최선의 방법입니다)

StackOverflow https://stackoverflow.com/questions/574068

  •  05-09-2019
  •  | 
  •  

문제

배포 WSGI 응용 프로그램.많은 방법은 피부 이 고양이입니다.나는 현재 사용하고 apache2mod-wsgi 지만,나는 일부를 볼 수 있습니다 잠재적인 문제이다.

그래서 어떻게 그것을 할 수 있습니까?

  1. 아파치 모 wsgi(다른 mod-wsgi 의되지 않을 것 같다 그럴 가치가)
  2. 한 웹 서버 예를 들어,붙여 넣기 cherrypy,산란,꼬여 있습니다.웹사
  3. 2 지만 역방향 프록시에서 nginx,apache2 등,좋은 정적인 파일 처리
  4. 변환하여 다른 프로토콜 등 FCGI 과 브리지(예를 들어 Flup)및에서 실행되는 기존 웹 서버에 있습니다.

더 많은?

나는 방법을 알고 싶다면 당신이 그것을,그리고 왜 그것이 최선의 방법입니다 그것을 할 수 있습니다.나는 절대적으로 당신이 나를 낳았으로 정보에 대한 무슨 이유에,응용 프로그램이 특정 물건,etc.나는 투표는 어떤 아닌 미친 대답이다.

도움이 되었습니까?

해결책

항상 그렇듯이 : 그것은 의존합니다 ;-)

Apache 기능이 필요하지 않으면 페이스트 등과 같은 순수한 Python 웹 서버로 가고 있습니다. 귀하의 응용 프로그램에 의존하고 벤치 마크를 수행하여 결정할 수 있습니다. 나는 항상 일부를하고 싶었지만 결코 그것에 오지 않았습니다. 산란이 상자에서 IO를 차단하지 않는 데있어 몇 가지 장점이있을 수 있지만 패치로 인해 때때로 문제가 발생했습니다.

당신은 항상 바니시를 앞에 놓을 수 있습니다.

Apache가 필요한 경우 일반적으로 Solution 3을 사용하여 프로세스를 별도로 유지할 수 있습니다. 프로세스를 다른 서버 등으로 쉽게 이동할 수 있습니다. 나는 단순히 물건을 별도로 유지하는 것을 좋아합니다.

정적 파일의 경우 지금은 정적 이미지/CSS/JS를 제공하는 프로젝트에 별도의 서버를 사용하고 있습니다. 나는 Webserver로 LightTPD를 사용하고있는 성능이 뛰어납니다 (이 경우 더 이상 바니시가 없습니다).

또 다른 유용한 도구입니다 감자 이러한 서비스를 제어하고 모니터링합니다.

나는 추가로 사용하고 있습니다 빌드 아웃 내 배포 및 개발 샌드 박스 관리를 위해 virtualenv).

다른 팁

나는 당신이 무엇과 whys, 응용 프로그램 별 물건 등에 대한 세부 사항으로 저를 구해주기를 절대적으로 사랑합니다.

호. 당신은 그것을 요청했습니다!

Daniel처럼 나는 개인적으로 Mod_wsgi와 함께 Apache를 사용합니다. 일부 환경에서 배치하는 것은 어려움이 될 수 있지만, 모든 것을 직접 컴파일하는 경우에는 매우 쉽습니다. 초기 버전도 매우 신뢰할 수 있음을 알았습니다. 그레이엄 듀플 턴 (Graham Dumpleton)에게 소품을 혼자서 제어 할 수 있습니다.

그러나 저에게는 WSGI 애플리케이션이 가능한 모든 서버에서 작동하는 것이 필수적입니다. 이 분야에는 현재 약간의 구멍이 있습니다. WSGI 표준이 WSGI 호출 가능한 (응용 프로그램)의 일을 알려주지 만 배포의 표준화는 없습니다. 웹 서버에 응용 프로그램을 찾을 위치를 알리는 단일 방법이 없습니다. 서버가 응용 프로그램을 업데이트했을 때 응용 프로그램을 다시로드하는 표준화 된 방법도 없습니다.

내가 채택한 접근법은 다음과 같습니다.

  • 모듈/패키지의 모든 응용 프로그램 로직, 바람직하게는 클래스에서

  • 주요 응용 프로그램을 서브 클래스하고 멤버를 우선적으로 수행하여 수행 할 모든 웹 사이트 별 사용자 정의

  • 모든 서버 별 배포 설정 (예 : 데이터베이스 연결 공장, 메일 릴레이 설정)으로 클래스 __init __ () 매개 변수

  • 현재 서버에 대한 올바른 배포 설정으로 응용 프로그램 클래스를 초기화하는 하나의 최상위 'Application.py'스크립트를 한 다음 CGI 스크립트, MOD_WSGI WSGISCRIPTALIAS (또는 승객 인 명백히 같은 방식으로 작동하거나 명령 줄에서 상호 작용할 수 있습니다.

  • 위의 배포 문제를 처리하고 응용 프로그램 모듈이 변경 될 때 응용 프로그램을 다시로드 할 수있는 도우미 모듈

그래서 Application.py가 어떻게 보이는지 결국 : 다음과 같습니다.

#!/usr/bin/env python

import os.path
basedir= os.path.dirname(__file__)

import MySQLdb
def dbfactory():
    return MySQLdb.connect(db= 'myappdb', unix_socket= '/var/mysql/socket', user= 'u', passwd= 'p')

def appfactory():
    import myapplication
    return myapplication.Application(basedir, dbfactory, debug= False)

import wsgiwrap
ismain= __name__=='__main__'
libdir= os.path.join(basedir, 'system', 'lib')
application= wsgiwrap.Wrapper(appfactory, libdir, 10, ismain)

wsgiwrap.wrapper는 10 초마다 확인하여 libdir의 응용 프로그램 모듈이 업데이트되었는지 확인하고, 그렇다면 불쾌한 Sys.Magic Magic을 모두 안정적으로 내리도록 모듈링합니다. 그런 다음 AppFactory ()가 다시 호출되어 업데이트 된 응용 프로그램의 새 인스턴스를 얻습니다.

(예 : 명령 줄 도구를 사용할 수도 있습니다.

./application.py setup
./application.py daemon

애플리케이션 호출 가능성이 제공하는 설정 및 배경 작업 후크를 실행하려면 Distutils의 작동 방식과 비슷합니다. 또한 Init 스크립트처럼 시작/중지/재시작에 응답합니다.)

내가 사용하는 또 다른 요령은 여러 서버 (개발/테스트/제작)의 배포 설정을 동일한 Application.py 스크립트에 넣고 Sniff 'Socket.gethostName ()' '사용 할 서버 별 설정을 결정하는 것입니다.

어느 시점에서 나는 wsgiwrap을 포장하여 올바르게 풀어 놓을 수 있습니다 (아마도 다른 이름으로). 그 동안 관심이 있으시면 Dogfood Development 버전을 볼 수 있습니다. http://www.doxdesk.com/file/software/py/v/wsgiwrap-0.5.py.

배포하기 가장 쉬운 것은 Cherrypy입니다. 웹 응용 프로그램은 또한 독립형 웹 서버가 될 수 있습니다. Cherrypy는 또한 Pure Python으로 작성된 것을 고려할 때 상당히 빠른 서버입니다. 그 말로, 그것은 아파치가 아닙니다. 따라서 Cherrypy는 낮은 볼륨 WebApps에게는 좋은 선택이라는 것을 알았습니다.

그 외에는이 질문에 대한 옳고 그른 대답이 없다고 생각합니다. 많은 대용량 웹 사이트가 당신이 이야기하는 기술을 기반으로 구축되었으며, 나는 당신이 그러한 방법을 너무 잘못 할 수 있다고 생각하지 않습니다. 비 아파치 서버).

또한 사용했습니다 isapi_wsgi IIS에서 Python 앱을 배포하려면 이상적인 설정이 아니지만 작동하며 Windows 중심 세계에 살 때 항상 다른 선택을 할 수는 없습니다.

Nginx 역방향 프록시와 정적 파일 공유+XSendfile+uploadprogress_module.아무것도 그것적으로 사용할 수 있습니다.

에 WSGI 측면 중 하나는 아파치+mod_wsgi 또는 cherrypy 서버입니다.내가 사용하는 것을 좋아 cherrypy wsgi 서버 응용 프로그램용하는 서버에 메모리를 적게 적은 요청합니다.

론:

나는 벤치마크와 다양한 도구에 대한 다른 인기 있는 솔루션입니다.

나는 더 많은 경험으로 낮은 수준의 TCP/IP 웹 개발,특히 http 구현입니다.나는 자신감을 나는 인식 할 수있는 좋은 http server 보다 나는 인식 할 수있는 좋은 웹 framework.

나는 알고 꼬보다 훨씬 더 많은 장고하거나 철탑.Http 스택에서는 아직까지 없이지만 그것은있을 것입니다.

개발중인 애플리케이션에 Google App Engine을 사용하고 있습니다. WSGI 응용 프로그램을 실행합니다.여기에 몇 비트의 정보가 있습니다.

이것은 내가 실제로 작업 한 최초의 웹 앱이므로 비교의 근거가 없지만 Google 팬이라면 조사하고 싶을 수도 있습니다. 나는 그것을 학습의 틀로 사용하여 많은 즐거움을 얻었습니다.

터보 가어 (2.0)

터보 가어 2.0 떠나는 중 베타 다음 달 안에 (많은 시간을 보냈습니다). 2.0은 1.0 시리즈에 개선되며 최고의 BRED WSGI 스택을 제공하려고 시도하므로 최소한의 소란을 원한다면 기본 선택을합니다.

그것은 있습니다 tg* 1.x 시리즈의 테스트 및 배포 도구이지만 이제는 paster 2.0 시리즈의 동등한 점은 pylons.

tg-admin quickstart —> paster quickstart
tg-admin info —> paster tginfo
tg-admin toolbox –> paster toolbox
tg-admin shell –> paster shell
tg-admin sql create –> paster setup-app development.ini

철론

WSGI 스택 (ORM의 선택, 템플릿 선택, 형태 선택)에서 더 유연하게 유연하게 만들고 싶습니다. Pylons는 통합 선택이되었습니다. 이것은 될 것입니다 내 추천 선택, 우수한 문서화를 제공하고 다른 구성 요소를 실험 할 수 있으므로.

결과적으로 함께 일하게되어 기쁘고 Apache (생산 배포) 또는 독립형 (테스트 및 실험 단계에 도움이)에서 작업하는 것이 기쁩니다.

따라서 Pylons로 둘 다 할 수 있습니다.

  • 2 테스트 단계 옵션 (python 독립형)

  • 확장 가능한 생산 목적 (4) (FastCGI, 선택한 데이터베이스가 유지 될 수 있다고 가정합니다)

Pylons Admin 인터페이스는 터보 가어와 매우 유사합니다. 여기 장난감이 있습니다 독립형 예시:

$ paster create -t pylons helloworld
$ cd helloworld
$ paster serve --reload development.ini

프로덕션 클래스 배포의 경우 설정 안내서를 참조 할 수 있습니다. Apache + FastCGI + mod_rewrite 사용할 수 있습니다 여기. 이것은 대부분의 요구로 확장됩니다.

apache httpd + mod_fcgid web.py (WSGI 응용 프로그램)를 사용합니다.

매력처럼 작동합니다.

우리는 일부 웹 서비스에 순수한 페이스트를 사용하고 있습니다. 내부 배포 메커니즘을 사용하여 배포하기 쉽고 페이스트 배포를 사용하지 않거나 그와 비슷한 것을 사용하지 않습니다. 프로덕션 시스템과 개발자 워크 스테이션에서 실행되는 것의 차이를 최소화하는 것이 좋습니다. 경고 : 우리는 요청의 헤비급 특성으로 인해 페이스트 자체에서 낮은 대기 시간을 기대하지 않습니다. 일부 원유 벤치마킹에서 우리는 얻지 못했습니다 환상적입니다 결과; 우리의 일반적인 요청 핸들러의 비용으로 인해 결국 무질서하게되었습니다. 지금까지 잘 작동했습니다.

정적 데이터는 다양한 방식으로 S3, Akamai, Apache 및 IIS의 사용을 포함하여 완전히 분리 된 (유기적으로 성장하는) 스택으로 처리되었습니다.

아파치+mod_wsgi,

간단하고 깨끗합니다. (4 줄의 Webserver Config), 다른 sysadimns가 머리를 돌리기 쉽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top