가장 잘 작동하는 "설정"은 무엇입니까? 나는 virtualenv를 사용하고 내 django 프로젝트를이 환경으로 옮겼지만, 가상 환경을위한 폴더와 프로젝트를위한 다른 폴더가있는 다른 설정을 보았습니다.
virtualenv는 Python 환경을 격리하는 방법입니다. 따라서 배포 시 큰 역할을하지 않지만 개발 및 테스트 중에 강력히 권장되지 않는 경우 필수 사항입니다.
virtualenv에서 얻을 수있는 가치는 애플리케이션에 대해 올바른 버전의 라이브러리가 설치되었는지 확인할 수 있다는 것입니다. 따라서 가상 환경 자체를 어디에 고정시키는지는 중요하지 않습니다. 소스 코드 버전 관리 시스템의 일부로 포함하지 않도록하십시오.
파일 시스템 레이아웃은 중요하지 않습니다. 디렉토리 레이아웃의 장점과 시작점으로 복제 할 수있는 골격 프로젝트를 칭찬하는 많은 기사를 볼 수 있습니다. 나는 이것이 어려운 요구 사항보다 개인적인 선호에 더 가깝다고 생각합니다. 물론 가지고있는 것이 좋습니다. 하지만 이유 를 모르면 배포 프로세스에 가치를 추가하지 않습니다. 따라서 시나리오에 맞지 않는 한 일부 블로그에서 권장하므로 수행하지 마십시오. 예를 들어 setup.py
배포 워크 플로의 일부인 개인 PyPi 서버가없는 경우 파일 을 만들 필요 가 없습니다.
단일 서버에서 여러 사이트를 호스팅 할 수 있도록 설정하려면 어떻게해야합니까?
여러 사이트 설정을 수행하려면 다음 두 가지가 필요합니다.
- SSL이있는 경우 포트 80 및 / 또는 포트 443에서 공용 IP를 수신하는 서버.
- 실제 django 소스 코드를 실행하는 많은 "프로세스".
사람들은 매우 빠른 프록시이고 Apache와 같은 포괄적 인 서버의 오버 헤드가 없기 때문에 # 1에 nginx를 사용합니다. 아파치에 익숙하다면 자유롭게 사용할 수 있습니다. "여러 사이트의 경우 nginx를 사용하십시오"라는 요구 사항은 없습니다. 해당 포트에서 수신 대기하는 서비스가 필요하고 실제 django 코드를 실행하는 프로세스로 리디렉션 (프록시)하는 방법을 알고 있습니다.
# 2의 경우 이러한 프로세스를 시작하는 몇 가지 방법이 있습니다. gevent / uwsgi가 가장 인기있는 것입니다. 여기서 기억 해야 할 것은 프로덕션에서 runserver를 사용하지 않는 것입니다. 입니다.
이것이 절대적인 최소 요구 사항입니다. 일반적으로 사람들은 실행중인 모든 "django 서버"(# 2)를 제어하기 위해 일종의 프로세스 관리자를 추가합니다. 여기에서 볼 수 있습니다 upstart
및 supervisor
언급했다. 나는 전체 시스템을 인수 할 필요가 없기 때문에 감독자를 선호합니다 (신생 기업과 달리). 그러나 다시 말하지만 이것은 어려운 요구 사항 이 아닙니다 . 당신은 완벽하게screen
세션을 하고 분리 할 수 있습니다. 단점은 서버가 다시 시작되면 화면 세션을 다시 시작해야한다는 것입니다.
개인적으로 다음을 추천합니다.
- # 1을위한 Nginx
- uwsgi와 gunicorn 중에서 선택하십시오. 저는 uwsgi를 사용합니다.
- 감독자백엔드 프로세스를 관리하는 .
- 호스팅하는 각 애플리케이션에 대한 개별 시스템 계정 (사용자).
제가 # 4를 추천하는 이유는 권한을 분리하기 위해서입니다. 다시 말하지만 요구 사항은 아닙니다.
어떤 사람들은 gunicorn_django -b 0.0.0.0:8000 사용을 제안하고 다른 사람들은 gunicorn_django -b 127.0.0.1:8000을 제안하는 이유는 무엇입니까? Amazon EC2 인스턴스에서 후자를 테스트했지만 전자가 문제없이 작동하는 동안 작동하지 않았습니다.
0.0.0.0
"모든 IP 주소"를 의미합니다. 메타 주소 (즉, 자리 표시 자 주소)입니다. 127.0.0.1
항상 로컬 시스템을 가리키는 예약 된 주소입니다. 이것이 "localhost"라고 불리는 이유입니다. 동일한 시스템에서 실행중인 프로세스에만 도달 할 수 있습니다.
일반적으로 공용 IP 주소에서 수신 대기하는 프런트 엔드 서버 (위 목록에서 # 1)가 있습니다. 당신은 해야 명시 적으로 바인드 서버에 하나 개의 IP 주소 .
그러나 어떤 이유로 DHCP를 사용하고 있거나 IP 주소가 무엇인지 모르는 경우 (예 : 새로 프로비저닝 된 시스템) nginx / apache / 다른 프로세스에 0.0.0.0
. 이것은 일시적인 스톱 갭 조치 여야합니다. .
프로덕션 서버의 경우 고정 IP가 있습니다. 동적 IP (DHCP)가있는 경우 0.0.0.0
. 하지만 프로덕션 머신에 DHCP가있는 경우는 매우 드뭅니다.
gunicorn / uwsgi를이 주소에 바인딩하는 것은 프로덕션 환경에서 권장되지 않습니다 . 백엔드 프로세스 (gunicorn / uwsgi)를에 바인딩하면 0.0.0.0
프런트 엔드 프록시 (nginx / apache / etc)를 우회하여 "직접"액세스 할 수 있습니다. 특히 프론트 엔드 서버 (nginx)와 백엔드 프로세스 (django / uwsgi / gevent)가 동일한 머신에서 실행중인 경우 누군가가 http://your.public.ip.address:9000/
직접 애플리케이션을 요청 하고 액세스 할 수 있습니다. .
하지만 프런트 엔드 프록시 서버를 실행하는 번거 로움을 원하지 않는다면 자유롭게 할 수 있습니다.
nginx의 구성 파일 뒤에있는 논리는 무엇입니까? 완전히 다른 구성 파일을 사용하는 자습서가 너무 많아 어느 것이 더 나은지 혼란 스럽습니다. 예를 들어, 어떤 사람들은 "alias / path / to / static / folder"를 사용하고 다른 사람들은 "root / path / to / static / folder"를 사용합니다. 선호하는 구성 파일을 공유 할 수 있습니다.
nginx에 대해 가장 먼저 알아야 할 것은 Apache 또는 IIS와 같은 웹 서버 가 아니라는 것입니다 . 프록시입니다. 따라서 '업스트림'/ '다운 스트림'과 같은 다른 용어와 여러 "서버"가 정의되는 것을 볼 수 있습니다. 시간을내어 nginx 매뉴얼을 먼저 살펴보십시오.
nginx를 설정하는 방법에는 여러 가지가 있습니다. 그러나 여기에 귀하의 질문에 한 대답이다 alias
대는 root
. root
nginx의 문서 루트 ( "홈 디렉토리")를 바인딩하는 명시 적 지시문입니다. 다음과 같은 경로없이 요청을 할 때 볼 디렉토리입니다.http://www.example.com/
alias
"이름을 디렉토리에 매핑"을 의미합니다. 별칭 이 지정된 디렉토리는 문서 루트의 하위 디렉토리 가 아닐 수 있습니다 .
/ etc / nginx에서 사용 가능한 사이트와 사용 가능한 사이트간에 심볼릭 링크를 만드는 이유는 무엇입니까?
이것은 데비안 (그리고 우분투와 같은 데비안 유사 시스템)에 고유합니다. sites-available
시스템의 모든 가상 호스트 / 사이트에 대한 구성 파일을 나열합니다. 해당 사이트 또는 가상 호스트 sites-enabled
를 sites-available
"활성화" 하기 위한 심볼 링크입니다 . 구성 파일을 분리하고 호스트를 쉽게 활성화 / 비활성화하는 방법입니다.