django의 daphne 사용법 정리 - 명령어 실행, 설정 파일로 실행
- 해당 글에는 channel과 관련된 정보를 정리하는게 아닌, asgi 서비스를 위한 daphne 설치 관련 정보만 담는다.
- channel과 관련된 내용은 reference에 추가 정리만 한다.
- 참고 페이지 : https://fly.io/django-beats/asgi-deployment-options-for-django/
- 공식 저장소 : https://github.com/django/daphne
- channel 공식 문서 내 정보 : https://channels.readthedocs.io/en/stable/deploying.html
1. 기본 설치 및 설정 방법
- Daphne 패키지 설치
- pip 설치
python -m pip install Daphne
pip freeze > requirements.txt
- poetry 설치
poetry add Daphne
- settins.py에 설정
# config/settings.py
INSTALLED_APPS = [
"daphne", # 최상위 위치에 입력
...,
]
ASGI_APPLICATION = "config.asgi.application"
- 서버 실행
daphne -b 0.0.0.0 -p 8000 config.asgi:application
2. 옵션
usage: daphne [-h] [-p PORT] [-b HOST] [--websocket_timeout WEBSOCKET_TIMEOUT]
[--websocket_connect_timeout WEBSOCKET_CONNECT_TIMEOUT]
[-u UNIX_SOCKET] [--fd FILE_DESCRIPTOR] [-e SOCKET_STRINGS]
[-v VERBOSITY] [-t HTTP_TIMEOUT] [--access-log ACCESS_LOG]
[--log-fmt LOG_FMT] [--ping-interval PING_INTERVAL]
[--ping-timeout PING_TIMEOUT]
[--application-close-timeout APPLICATION_CLOSE_TIMEOUT]
[--root-path ROOT_PATH] [--proxy-headers]
[--proxy-headers-host PROXY_HEADERS_HOST]
[--proxy-headers-port PROXY_HEADERS_PORT] [-s SERVER_NAME]
[--no-server-name]
- 옵션을 사용한 명령어 실행 방법
daphne -e tcp:port=8000 \
-t 120 \
--websocket_timeout 60 \
--websocket_connect_timeout 20 \
--ping-interval 20 \
--ping-timeout 30 \
--root-path /myapp \
--proxy-headers \
-v 2 \
--application-close-timeout 30 \
-s my_daphne_server \
myproject.asgi:application
- 옵션 :
1. -p PORT:
- 설명: Daphne가 사용할 TCP 포트를 지정합니다.
- 예시: daphne -p 8001
2. -b HOST :
- 설명: 바인딩할 호스트를 지정합니다.
- 예시: daphne -b 0.0.0.0
3. --websocket_timeout WEBSOCKET_TIMEOUT:
- 설명: WebSocket 연결의 타임아웃(초)을 설정합니다.
- 예시: daphne --websocket_timeout 60
4. --websocket_connect_timeout WEBSOCKET_CONNECT_TIMEOUT:
- 설명: Daphne가 수신 대기할 엔드포인트 목록을 지정합니다.
- 예시: daphne --websocket_connect_timeout 30
5. -u UNIX_SOCKET:
- 설명: UNIX 소켓 경로를 지정합니다
- 예시: daphne -u /var/run/daphne.sock
6. --fd FILE_DESCRIPTOR:
- 설명: 파일 디스크립터를 사용하여 소켓을 지정합니다.
- 예시: daphne --fd 3
7. -e SOCKET_STRINGS:
- 설명: 여러 소켓 경로나 설정을 콤마로 구분하여 지정합니다.
- 예시: daphne -e tcp:port=8000,unix:/var/run/daphne.sock
8. -v VERBOSITY:
- 설명: 로그 출력의 상세도를 설정합니다. (0부터 4까지 가능)
- 예시: daphne -v 2
9. -t HTTP_TIMEOUT:
- 설명: HTTP 요청의 타임아웃(초)을 설정합니다.
- 예시: daphne -t 120
10. --access-log ACCESS_LOG:
- 설명: Daphne가 수신 대기할 엔드포인트 목록을 지정합니다.
- 예시: daphne --access-log /var/log/daphne/access.log
11. --log-fmt LOG_FMT:
- 설명: 로그의 형식을 지정합니다.
- 예시: daphne --log-fmt '[%(asctime)s] %(levelname)s: %(message)s'
12. --ping-interval PING_INTERVAL:
- 설명: ping 요청에 대한 타임아웃(초)을 설정합니다.
- 예시: daphne --ping-timeout 30
13. --ping-timeout PING_TIMEOUT:
- 설명: ping 요청에 대한 타임아웃(초)을 설정합니다.
- 예시: daphne --ping-timeout 30
14. --application-close-timeout APPLICATION_CLOSE_TIMEOUT:
- 설명: 애플리케이션 종료 타임아웃(초)을 설정합니다.
- 예시: daphne --application-close-timeout 45
15. --root-path ROOT_PATH:
- 설명: 루트 경로를 설정합니다.
- 예시: daphne --root-path /myapp
16. --proxy-headers:
- 설명: 프록시 헤더를 사용합니다.
- 예시: daphne --proxy-headers
17. --proxy-headers-host PROXY_HEADERS_HOST:
- 설명: 프록시 헤더의 호스트를 설정합니다.
- 예시: daphne --proxy-headers-host example.com
18. --proxy-headers-port PROXY_HEADERS_PORT:
- 설명: 프록시 헤더의 포트를 설정합니다.
- 예시: daphne --proxy-headers-port 443
19. -s SERVER_NAME:
- 설명: 서버 이름을 설정합니다.
- 예시: daphne -s my_daphne_server
20. --no-server-name:
- 설명: 서버 이름을 사용하지 않음을 설정합니다.
- 예시: daphne --no-server-name
* daphne은 아직 설정 파일로 실행하는 방버을 지원하지 않는다.
* 서비스 포트와 SOCKET_STRINGS의 포트가 동일하면 중복 포트 사용의 에러가 발생한다.
* root-path가 정의되면 redirect시 url에 추가되어 문제가 된다.
* 테스트 완료한 명령어는 다음과 같다.
daphne -p 8000 -b 0.0.0.0 --websocket_timeout 60 \
--websocket_connect_timeout 20 -v 2 -t 120 \
--access-log /log/uvicorn/daphne.log --ping-interval 20 \
--ping-timeout 30 --application-close-timeout 30 \
-s config config.asgi:application
- reference :
https://gunjoon.tistory.com/54
https://blog.mirisu.co.kr/entry/DjangoDaphneSupervisordNginx-%EC%84%A4%EC%A0%95-VI-1
https://medium.com/@soverignchriss/chat-application-with-django-channels-htmx-dd8174f59a03
https://sungbinlee.dev/django/django-channels/
https://github.com/ESTsoft-Ormi-1/LiveChatDjango
https://oraange.tistory.com/22
https://oraange.tistory.com/23?category=1007661
https://oraange.tistory.com/24?category=1007661
https://oraange.tistory.com/25?category=1007661
https://victorydntmd.tistory.com/265
https://victorydntmd.tistory.com/261
https://victorydntmd.tistory.com/262
https://victorydntmd.tistory.com/263
https://victorydntmd.tistory.com/266