django - channels 배치 (supervisor + daphne + nginx)
channels
모듈 을 선 택 했 습 니 다. 주로 channels
배치 설정 과 구덩이 가 기록 되 어 있 습 니 다. 원래 프로젝트 는 nginx + uwsgi 를 통 해 배 치 된 것 입 니 다. 여 기 는 변경 되 지 않 았 습 니 다. Nginx 를 통 해 특정한 요청 경 로 를 daphne 에 대리 할 뿐 입 니 다. 배치 전 쌍 django
설정 의 일부 수정 은 공식 문 서 를 직접 참고 할 수 있 습 니 다. 이것 은 비교적 간단 하고 문제 가 없습니다.supervisor + daphne
첫 번 째: 이것 은 제 가 처음에 인터넷 에서 설정 을 찾 은 것 입 니 다. 많은 글 들 이 대체적으로 비슷 합 니 다.
[program:asgi]
directory=/your/path/project-name #
command=daphne -b localhost -p 8001 --proxy-headers project-name.asgi:application #
autostart=true
autorestart=true
stdout_logfile=/tmp/asgi.log
redirect_stderr=true
주의해 야 할 것 은 프로젝트 가 가상 환경 에서 실행 되 고 슈퍼 visor 가 주 환경 에 설치 되 어 있다 면
daphne
절대 경 로 를 사용 해 야 합 니 다. 이 설정 은 사용 가능 하지만 하나의 프로 세 스 만 실행 할 수 있 는 문제 가 있 습 니 다. 여러 프로 세 스 (추가 numprocs=n
를 열 면 포트 가 차지 하 는 오 류 를 보고 할 수 있 습 니 다.두 번 째 는 공식 설정 입 니 다. 문서 에서 제공 하 는 설정 은 다 중 프로 세 스 이지 만 작은 문제 가 있 습 니 다. 먼저 제 설정 을 붙 입 니 다.
[fcgi-program:asgi]
socket=tcp://localhost:8001
directory=/my/app/path
#
command=daphne --fd 0 --access-log - --proxy-headers mysite.asgi:application
###########
numprocs=4
process_name=asgi%(process_num)d
autostart=true
autorestart=true
stdout_logfile=/your/log/asgi.log
redirect_stderr=true
메모: fcgi - program 은 프 록 시 를 만 들 었 습 니 다. 현재 네트워크 요청 의 전달 은 nginx - > 슈퍼 visor - > daphne - > backend - app 입 니 다. 그래서 여기 daphne 에 연 결 된 유 닉 스 - socket 이나 파일 설명 자 는 모두 슈퍼 visor 와 통신 하 는 것 입 니 다. 이것 은 위의 첫 번 째 설정 과 다 릅 니 다.
나 는
-u xxx/xxx.sock
의 설정 항목 을 지 웠 습 니 다. 이 항목 은 필요 하지 않 기 때 문 입 니 다. 명령 행 에서 daphne
의 도움말 을 보 았 습 니 다. 이 두 가지 옵션 이 있 습 니 다. --fd FILE_DESCRIPTOR
옵션 은 파일 설명자 에 연결 되 고 host / port 와 유 닉 스 - socket 에 대한 연결 을 바 꿉 니 다.메모: 슈퍼 visor: fcgi - program 문서 에 따 르 면 fcgi - program 에 배 치 된 프로그램 은 파일 설명자 0 을 통 해 슈퍼 visor 와 만 통신 할 수 있 습 니 다. 따라서 유 닉 스 - socket 만 사용 하면 유효 하지 않 습 니 다.
nginx
nginx 설정 기본 참조 channels 문서:
upstream channels-backend {
server localhost:8001;
}
...
server {
...
location /ws/ {
proxy_pass http://channels-backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
...
}
(나 는 사실 문서 에 언급 된 try files 의 용법 을 이해 하지 못 했다 - -!)
내 가 만난 작은 문제 중 하 나 는 처음에 슈퍼 바 이 저 설정 에서
127.0.0.1
을 사용 한 다음 에 nginx 에서 localhost
를 사 용 했 는데 연결 이 되 지 않 는 다 는 것 을 알 게 되 었 다. 그 제야 처음으로 그 두 사람 이 차이 가 있다 는 것 을 깨 달 았 다. localhost
의 전송 은 네트워크 카드 나 방화벽 의 제한 을 받 지 않 기 때문에 로 컬 프로그램 간 통신 용 localhost
을 권장 했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.