django의 daphne 사용법 정리 - 명령어 실행, 설정 파일로 실행
- 해당 글에는 channel과 관련된 정보를 정리하는게 아닌, asgi 서비스를 위한 daphne 설치 관련 정보만 담는다.
- channel과 관련된 내용은 reference에 추가 정리만 한다.
- 참고 페이지 : https://fly.io/django-beats/asgi-deployment-options-for-django/
ASGI deployment options for Django
Documentation and guides from the team at Fly.io.
fly.io
- 공식 저장소 : https://github.com/django/daphne
GitHub - django/daphne: Django Channels HTTP/WebSocket server
Django Channels HTTP/WebSocket server. Contribute to django/daphne development by creating an account on GitHub.
github.com
- 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
Django Channels 배포
Deubot 프로젝트 Django와 Django Channels로 만든 앱을 배포하기 위해 검색을 한 결과 Nginx, Daphne, Gunicorn 세개의 서버로 구축하게 되었다. Deubot 프로젝트 구조를 간략하게 도식화하면 아래와 같다. 우선
gunjoon.tistory.com
https://blog.mirisu.co.kr/entry/DjangoDaphneSupervisordNginx-%EC%84%A4%EC%A0%95-VI-1
장고 channels를 위한 Daphne + nginx + supervisord 서비스 설치
이제 서비스를 위한 준비는 되었습니다. 제가 준비하는 서비스는 django + Channels 서비스입니다. Channels를 사용하려면 asgi를 사용하여 서비스를 하여야 합니다. asgi서비스를 위해서는 uwsgi를 사용하
blog.mirisu.co.kr
https://medium.com/@soverignchriss/chat-application-with-django-channels-htmx-dd8174f59a03
Chat Application with Django-channels & Htmx
WebSocket is a computer communications protocol, that provides simultaneous two-way communication channels over a single Transmission…
medium.com
https://sungbinlee.dev/django/django-channels/
Django/Channels 실시간 채팅을 구현하려면?
개요 이 문서는 Django 기반의 채팅 서비스를 구축하는 방법에 대해 다룹니다. HTTP Polling, Long Polling, HTTP Streaming, 그리고 WebSocket과 같은 다양한 통신 방식을 소개하며, Redis Pub/Sub를 통한 메시지 전
sungbinlee.dev
https://github.com/ESTsoft-Ormi-1/LiveChatDjango
GitHub - ESTsoft-Ormi-1/LiveChatDjango: Django와 Channels를 활용하여 구축한 실시간 채팅 어플리케이션입니
Django와 Channels를 활용하여 구축한 실시간 채팅 어플리케이션입니다. Contribute to ESTsoft-Ormi-1/LiveChatDjango development by creating an account on GitHub.
github.com
https://oraange.tistory.com/22
[Django] Channels 사용하기 - 1
Django의 Chaanels는 Django에서 웹 소켓을 사용할 수 있게 해주는 라이브러리이다. Channels는 django에서 HTTP이외의 웹 소켓이나, IoT 프로토콜과 같은 다양한 프로토콜을 지원하기 위해 만들어졌다. Channe
oraange.tistory.com
https://oraange.tistory.com/23?category=1007661
[Django] Channels 사용하기 - 2
이 글은 [Django] Channels 사용하기 - 1에서 이어집니다. room view 추가 특정 채팅방에서 게시된 메세지를 볼 수 있는 room view를 추가하도록 하자. chat/templates/chat/room.html파일을 추가하자. chat/ __init__.py t
oraange.tistory.com
https://oraange.tistory.com/24?category=1007661
[Django] Channels 사용하기 - 3
이 글은 [Django] Channels 사용하기 - 2에서 이어집니다. 비동기 consumer 작성하기 기존에는 동기적인 consumer를 만들었다. 동기 consumer는 특별한 코드없이 Django 모델에 동기적으로 접근할 수 있어서 편
oraange.tistory.com
https://oraange.tistory.com/25?category=1007661
[Django] Channels 사용하기 - 4
이 글은 [Django] Channels 사용하기 - 3에서 이어집니다. views 테스트하기 Selenium을 사용하여 end-to-end 테스트를 할 것이다. 메시지를 보낼 때, 같은 방에 있는 모두가 그 메시지를 보는가 메시지를 보
oraange.tistory.com
[AWS][Django] DRF로 만든 웹소켓 채팅서버를 Docker, nginx, daphne를 이용하여 AWS EC2에 배포하기(1)
이번 포스팅은 저번시간까지 만들었던 웹소켓 채팅을 서버에 배포를 해보고자한다. 나는 github repository에 private로 저장 및 관리를 해오고 있었고 이제 클라우드 플랫폼인 AWS의 EC2에 배포를 해보
velog.io
[AWS][Django] DRF로 만든 웹소켓 채팅서버를 Docker, nginx, daphne를 이용하여 AWS EC2에 배포하기(2)
이제 저번 포스팅에이어 채팅서버를 배포하는 절차를 이어 나가보겠다. github에 있는 내 프로젝트를 git clone하여 EC2 서버에 끌고와야한다. repository가 public으로 되어있다면 git clone하면 바로 될것
velog.io
[AWS][Django] DRF로 만든 웹소켓 채팅서버를 Docker, nginx, daphne를 이용하여 AWS EC2에 배포하기(3)
우분투 업데이트 및 도커 설치 > sudo apt-get update 명령어로 우분투에서 소프트웨어를 설치할때 주로 사용하는 apt-get을 최신정보로 업데이트합니다. > sudo apt install docker.io 명령어로 도커를 설치합
velog.io
https://victorydntmd.tistory.com/265
[Django] Django Channels 배포 ( Nginx + Daphne + SSL )
Daphne Django와 WebServer가 주고 받기 위해서는 WSGI 프로토콜을 사용합니다. 이와 관련된 글은 여기를 참고해주세요 ! Django Channels를 배포하기 위해서는 HTTP 요청은 uWSGI 프로토콜로 받고, WS( Web Socket )
victorydntmd.tistory.com
https://victorydntmd.tistory.com/261
[Django] 실시간 채팅 - Channels 튜토리얼 (1)
Channels 라이브러리가 개선됨에 따라 해당 시리즈의 내용이 유효하지 않은것 같습니다. 참고용으로만 봐주시길 바라며, 공식 문서를 참고해주세요! [Django] 실시간 채팅 - Channels 튜토리얼 (1) [Django
victorydntmd.tistory.com
https://victorydntmd.tistory.com/262
[Django] 실시간 채팅 - Channels 튜토리얼 (2)
Channels 라이브러리가 개선됨에 따라 해당 시리즈의 내용이 유효하지 않은것 같습니다. 참고용으로만 봐주시길 바라며, 공식 문서를 참고해주세요! [Django] 실시간 채팅 - Channels 튜토리얼 (1) [Django
victorydntmd.tistory.com
https://victorydntmd.tistory.com/263
[Django] 실시간 채팅 - Channels 튜토리얼 (3)
Channels 라이브러리가 개선됨에 따라 해당 시리즈의 내용이 유효하지 않은것 같습니다. 참고용으로만 봐주시길 바라며, 공식 문서를 참고해주세요! [Django] 실시간 채팅 - Channels 튜토리얼 (1) [Django
victorydntmd.tistory.com
https://victorydntmd.tistory.com/266
[Django] Django Channels 스케일 업 ( 대용량 트래픽 해결 )
이전 글에서 Django Channels를 배포하는 방법에 대해 알아보았습니다. ( 링크 )이번에는 Nginx worker, uWSGI worker를 조정하고 또한 Daphne 인스턴스를 늘리고 load balancing을 통해 대용량 트래픽에 대한 해결
victorydntmd.tistory.com
'Study > django' 카테고리의 다른 글
django에서 manage.py에 정의된 config 파일이 아닌 다른 파일을 참조하는 경우 (0) | 2024.10.11 |
---|---|
django기반 SSE (Server-Sent-Events), celery를 이용한 실시간 SSE 만들기 (0) | 2024.07.21 |
django의 Uvicorn 사용법 정리 - 명령어 실행, 설정 파일로 실행 (1) | 2024.07.14 |
celery 팁 정리 (0) | 2024.07.13 |
[인프런] 실리콘밸리 엔지니어와 함께하는 샐러리(Celery) 학습 소감 (0) | 2024.07.07 |
댓글