문제

저는 Django가 제공하는 중간 규모의 사이트를 배포하려고 합니다.전용 Ubuntu 서버가 있습니다.

어떤 서버 소프트웨어를 사용해야 할지 정말 혼란스럽습니다.그래서 나는 속으로 이렇게 생각했습니다.왜 stackoverflow에 물어 보지 않겠습니까?

내가 찾고 있는 것은:

  • 간편한 설정
  • 빠르고 쉬운 리소스
  • 미디어 파일을 제공할 수 있습니다.
  • 동일한 서버에서 여러 djangosite를 제공할 수 있습니다.
  • 나는 PHP나 리소스를 낭비하고 쓸모가 없는 다른 것을 설치하지 않는 편이 낫습니다.

나는 Apache, nginx 및 lighty에서 mod_wsgi 및 mod_python에 대해 들었습니다.이것의 장단점은 무엇이며 누군가를 그리워 했습니까?

@배리:어쩐지 나는 아파치가 나를 부풀리는 것 같은 느낌이 든다.대안은 어떻습니까?

@BrianLy:좋아, mod_wsgi를 좀 더 확인해 보겠습니다.그런데 lighty로 정적 파일을 제공하는 경우 Apache가 필요한 이유는 무엇입니까?나는 또한 lighty로 django 앱 자체를 제공했습니다.어쨌든 그게 나쁜 건가요?너무 멍청해서 죄송해요 :-)

업데이트:lighty와 nginx는 어떻습니까? 이것이 완벽한 선택인 경우의 사용 사례는 무엇입니까?

도움이 되었습니까?

해결책

좀 더 심층적인 답변을 찾고 있었기 때문에 문제를 직접 심층적으로 조사하기로 결정했습니다.제가 잘못 이해한 것이 있으면 알려주세요.

일반적인 권장 사항은 미디어 처리를 위해 별도의 웹 서버를 사용하는 것입니다.별도로, Django를 실행하지 않는 웹서버를 의미합니다.예를 들어 이 서버는 다음과 같습니다.

  • Lighttpd (라이트티)
  • 엔진엑스(EngineX)
  • 아니면 다른 경량 서버

그런 다음 Django의 경우 다른 경로를 따라갈 수 있습니다.다음 중 하나를 수행할 수 있습니다.

  • 다음을 통해 Django 제공 아파치 그리고:

    • mod_python

      이는 안정적이고 권장되며 잘 문서화되어 있는 방법입니다.단점:메모리를 많이 사용합니다.

    • mod_wsgi

      내가 이해한 바로는 mod_wsgi가 새로운 대안입니다.리소스를 사용하는 것이 더 빠르고 쉬운 것 같습니다.

    • mod_fastcgi

      FastCGI를 사용하면 Django 서비스를 다른 프로세스에 위임하게 됩니다.mod_python은 모든 요청에 ​​Python 인터프리터를 포함하므로 많은 메모리를 사용합니다.이것이 해당 문제를 우회하는 방법입니다.또한 몇 가지 보안 문제도 있습니다.

      당신이 하는 일은 별도의 프로세스에서 Django FastCGI 서버를 시작한 다음 필요할 때 이 프로세스를 호출하도록 재작성을 통해 Apache를 구성하는 것입니다.

또는 다음을 수행할 수 있습니다.

  • 장고를 섬기다 아파치를 사용하지 않고 그러나 FastCGI를 기본적으로 지원하는 다른 서버에서는 다음과 같습니다.

    (문서에는 Apache에 특정한 요구 사항이 없는 경우 이 작업을 수행할 수 있다고 언급되어 있습니다.아마도 메모리를 절약하기 위한 이유인 것 같습니다.)

    • Lighttpd

    유튜브를 운영하는 서버입니다.빠르고 사용하기 쉬운 것 같지만 메모리 누수에 대한 보고서를 본 적이 있습니다.

    • nginx

    나는 이 서버가 lighttpd보다 훨씬 빠르다고 주장하는 벤치마크를 본 적이 있습니다.하지만 대부분 러시아어로 문서화되어 있습니다.

또 다른 점은 Python의 제한으로 인해 서버가 스레드가 아닌 분기 모드에서 실행되어야 한다는 것입니다.

그래서 이것은 나의 현재 연구이지만 더 많은 의견과 경험을 원합니다.

다른 팁

Cherokee 를 사용하고 있습니다.

그들의 벤치 마크 (그들에 대한 소금)에 따르면로드를 더 잘 처리합니다.Lighttpd와 nginx보다 ...하지만 그게 제가 사용하는 이유가 아닙니다.

cherokee-admin를 입력하면 로그인 할 수있는 새 서버 (일회성 비밀번호 사용)를 시작하고 아름답게 완성 된 웹민을 통해 전체 서버를 구성하기 때문에 사용합니다.그것은 킬러 기능입니다.이미 많은 시간을 절약했습니다.그리고 내 서버에 많은 리소스를 절약하고 있습니다!

장고의 경우 스레드 SCGI 프로세스로 실행하고 있습니다.잘 작동합니다.Cherokee도 계속 실행할 수 있습니다.다시 한 번 아주 멋진 기능입니다.

현재 Ubuntu repo 버전은 매우 오래되었으므로 해당 PPA .행운을 빕니다.

@Barry가 말했듯이 문서는 mod_python 을 사용합니다. 저는 Ubuntu를 서버로 사용하지 않았지만 Solaris에서 mod_wsgi에 대한 좋은 경험을했습니다. mod_wsgi 및 Django 에 대한 설명서는 mod_wsgi 사이트

요구 사항에 대한 빠른 검토 :

  • 쉽게 설정 apache 2.2를 구축하고 설치하기가 상당히 쉽습니다.
  • 빠르고 간편한 리소스 사용량과 트래픽에 따라 달라질 수 있습니다. * Apache를 사용하여 모든 파일을 서버 화하지 않고 정적 파일 서버에 LightTPD (lighty)를 사용하지 않을 수 있습니다.
  • 미디어 파일을 제공 할 수 있습니까? 이미지, 플래시 파일을 의미한다고 생각하십니까? 아파치는 이것을 할 수 있습니다.
  • 동일한 서버의 여러 사이트 Apache에서 호스팅하는 가상 서버
  • 다른 확장 프로그램을 설치하지 마세요. Apache 구성에서 원하지 않는 부분을 주석 처리합니다.

장고 프로젝트를 배포하는 공식적으로 권장되는 방법은 아파치와 함께 mod_python을 사용하는 것입니다.이 내용은 문서 에 설명되어 있습니다.가장 잘 문서화되고 가장 지원되며 가장 일반적인 배포 방법입니다.단점은 아마도 가장 빠르지 않다는 것입니다.

최상의 구성은 그렇게 알려지지 않은 것 같습니다.하지만 여기 있습니다 :

  1. 요청을 처리하는 데 nginx를 사용합니다 (앱에 동적, 정적 콘텐츠 직접).
  2. 동적 콘텐츠를 제공하려면 Python 웹 서버를 사용하세요.

    파이썬 기반 웹 서버를위한 가장 빠른 두 가지 솔루션은 다음과 같습니다.

    • cogen
    • fapws2

      Google에서 django의 현재 최상의 구성을 찾아야합니다 (아직 개발 중).

nginx (0.6.32 Sid에서 가져옴 )를 사용하고 있습니다.a>) mod_wsgi 로.아무 것도 시도하지 않았기 때문에 대안보다 나은지 말할 수는 없지만 매우 잘 작동합니다.Nginx에는 Django 캐싱 미들웨어와 상호 운용 될 수있는 memcached 지원이 내장되어 있습니다 (실제로 사용하지 않고 대신 python-memcache를 사용하여 수동으로 캐시를 채우고 변경이있을 때 무효화합니다), 따라서 캐시 적중은 Django를 완전히 우회합니다 (제 개발 머신은 초당 약 3000 개의 요청을 처리 할 수 있습니다).

주의 사항 : nginx 'mod_wsgi는 이름이 지정된 위치를 매우 싫어하므로 (SCRIPT_NAME로 전달하려고 시도 함) 명백한'error_page 404 = @django '로 인해 수많은 모호한 오류가 발생합니다.수정을 위해 mod_wsgi 소스를 패치해야했습니다.

모든 옵션을 이해하는 데 어려움을 겪고 있습니다.이 블로그 게시물 에서mod_python과 비교하여 mod_wsgi의 이점을 설명했습니다.

작은 VPS에서 트래픽이 적은 여러 사이트는 RAM 소비를 주요 관심사로 만들고 mod_python은 나쁜 옵션처럼 보입니다.lighttpd와 FastCGI를 사용하여 간단한 Django 사이트의 최소 메모리 사용량을 58MiB 가상 및 6.5MiB 상주 (다시 시작하고 RAM이 많은 단일 요청을 제공 한 후)로 줄였습니다.

Debian Etch에서 Python 2.4에서 2.5로 업그레이드하면 Python 프로세스의 최소 메모리 사용 공간이 몇 퍼센트 증가한 것으로 나타났습니다.반면 2.5의 더 나은 메모리 관리는 장기 실행 프로세스에 더 큰 반대 효과를 줄 수 있습니다.

제 생각에 가장 빠른 스택은 varnish-nginx-uwsgi-django입니다. 그리고 성공적으로 사용하고 있습니다.

lighthttpd를 사용하는 경우 Django를 제공하기 위해 FastCGI를 사용할 수도 있습니다.속도가 mod_wsgi와 어떻게 비교되는지 잘 모르겠지만 메모리가 올바르게 작동하면 mod_python에서는 얻을 수없는 mod_wsgi로 얻을 수있는 몇 가지 이점을 얻을 수 있습니다.주된 이유는 각 애플리케이션에 자체 프로세스를 제공 할 수 있다는 것입니다 (이는 여러 앱의 메모리를 분리하고 멀티 코어 컴퓨터를 활용하는 데 매우 유용합니다.

편집 : nginix에 대한 업데이트와 관련하여 추가하기 위해 메모리가 다시 올바르게 제공되면 nginix는 "greenlet"을 사용하여 동시성을 처리합니다.즉, 하나의 앱이 서버의 모든 시간을 소모하지 않도록 조금 더주의해야 할 수도 있습니다.

우리는 모든 Django 배포에 nginx와 FastCGI를 사용합니다.이것은 주로 우리가 Slicehost에 배포하고 모든 메모리를 Apache에 기부하고 싶지 않기 때문입니다.이것이 우리의 "사용 사례"라고 생각합니다.

문서에 대한 설명은 대부분 러시아어로되어 있습니다. 에서 대부분의 정보를 찾았습니다.영어 위키 는 매우 유용하고 정확합니다.이 사이트에는 Django에 대한 샘플 구성도 있으며 여기에서 고유 한 nginx 구성을 조정할 수 있습니다.

이 작업을 수행하는 방법은 여러 가지가 있으므로 DjangoAdvent.com에서 배포 프로세스와 관련된 기사를주의 깊게 읽어 보는 것이 좋습니다. Eric Florenzano-FastCGI로 Django 배포 : http://djangoadvent.com/1.2/deploying-django-site-using-fastcgi / 읽기 : Mike Malone-Django 확장 Stochastictechnologies 블로그 : 완벽한 Django 설정 Mikkel Hoegh 블로그 : 35 % 응답 시간 개선 전환 uwsgi-nginx

감사합니다

Cherokee 사용에 대한 경고가 있습니다.Django를 변경하면 Cherokee는 OLD 프로세스를 종료하고 새 프로세스를 시작하는 대신 유지합니다.

Apache에서이 기사를 강력히 추천합니다.

http://www.djangofoo.com/17/django-mod_wsgi-배포 예시

쉽게 설정하고 변경 한 후 쉽게 종료하거나 재설정 할 수 있습니다.

단말기에 입력하기 라코 디스

변경 사항이 즉시 표시됩니다.

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