지금까지 한 것
- channels daphne로 연결하기 (https)
- nginx에서 daphne로 연결한 channels 사용하기
- bolt프런트에 연결해보기
디버깅에 연속이었다... 디버깅을 하면서 느낀 점은 정말.. 다양하다는 거였다. 정말 사소한 부분부터 큰 부분까지.. 정말 어렵고 힘들었지만 그래도 하나하나 해결했을 때 큰 성취감을 느꼈다. 삽질하는 과정에서 배우는 부분도 많아서 좋은 경험이었다고 생각한다.
전에 포스팅한 channels 앱을 가지고 ssl 연결해서 https로 실행하였는데 certbot에서 key를 받아오는 과정에서 많은 삽질을 하였다.... 먼저
key를 받아오는 과정은 생략하고 https연결 시 ws 통신하는 법에 대하여 작성하려 한다.
먼저 현재는 http 통신을 위한 wsgi.py에 연결점이 작성이 되어있다. ws 통신을 위해 asgi.py를 통해 비동기 연결점을 만들어 주어야 한다.
#mysite/asgi.py
import os
import django
from channels.routing import get_default_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
django.setup()
application = get_default_application()
이제 daphne를 설치하고 daphne로 실행한다.
$ daphne -b 0.0.0.0 -p 8000 mysite.asgi:application
또한 lets encrypt로부터 받아온 인증서를 사용하여 ssl을 적용한 daphne를 실행할 수 있다.
$ daphne -e \
ssl:8443:privateKey=/privkey.pem:\
certKey=/ert.pem \
mysite.asgi:application
https로 실행할 때 주의할 점은 front에서 websocket으로 연결할 때 ws 프로토콜이 아닌 wss프로토콜임을 명시해 주어야 한다.
var chatSocket = new WebSocket(
'wss://' + window.location.host +
'/ws/chat/' + roomName + '/');
로컬에서 혼자 연결을 한 뒤에 bolt 서버의 nginx에 이를 적용하는 과정을 하였는데 계속 에러가 나서.. 정말 고생을 많이 했다. 처음에는 버전 문제인 줄 알았으나 daphne서버를 실행할 때 경로에 문제가 있었다. 이를 해결하고 다시 연결을 시도하였는데...!!! ㅠㅠ 또 다른 에러가 발생했다. 구글링,, 하면서 삽질의 연속 중 nginx에서 daphne로 연결 시에 비동기로 처리되는 부분 때문에 설정 파일에 timeout을 주어야 한다는 글을 보고 timeout을 주었더니.. 해결됐다. 삽질로 고생 좀 했지만 공부가 많이 됐다. nginx, daphne, redis 등 더 살펴보아야겠다고 생각했다.
'TIL' 카테고리의 다른 글
20210423 final project #5 (0) | 2021.04.23 |
---|---|
20210409 final project #3 (0) | 2021.04.09 |
20210406 final project #2 (0) | 2021.04.06 |
20210404 final project #1 (0) | 2021.04.04 |
20210325 first project #5 (0) | 2021.03.26 |
댓글