본문 바로가기

IT/Django

장고 channels를 위한 Daphne + nginx + supervisord 서비스 설치

이제 서비스를 위한 준비는 되었습니다.

제가 준비하는 서비스는 django + Channels 서비스입니다. Channels를 사용하려면 asgi를 사용하여 서비스를 하여야 합니다.

 

asgi서비스를 위해서는 uwsgi를 사용하지 않고 daphne를 이용하여 서비스를 해야합니다. daphne + Nginx를 연동하는 자료는 부족하였습니다. 구글 검색과 channels의 공식 설명서를 보면서 어렵게 daphne + Nginx 서비스를 구현하게 되었습니다.

 

이에 다음에 다른 프로젝트를 수행할 때 시행착오를 겪지 않으려고 자료를 남기려는 목적과 저 처럼 서비스를 구현하는데 어려움을 겪는 분들에게 조금이나봐 도움이 되었으면 하는 생각에 남기게 되었습니다.

 

daphne 설치

daphne는 python 패키지로 pip을 통해 설치 할 수 있습니다.

 

$ sudo pip install daphne

supervisord 설치

supervisord는 프로세스를 daemon으로 위탁관리해주는 tool입니다.

 설치방법

   ubuntu 기준 설치입니다. 

   $ sudo apt-get install supervisor

설치가 완료 되었습니다.

supervisord 기동 스크립트

$sudo service supervisor start

$sudo service supervisor status

이렇게 실행되고 있는 상태를 확인할 수 있습니다.

 

supervisor conf 재로드

 

$sudo supervisorctl reread

 

supervisor에 channels를 daemon화 config를 작성해보겠습니다.

 

아래와 같은 순서로 작성합니다.

 

$cd /etc/supervisor/conf.d 

$vi channels.conf

[fcgi-program:asgi]
# TCP socket used by Nginx backend upstream, nginx를 통해 들어오는 요청을 처리하기 위한 소켓
socket=tcp://localhost:8000

# Directory where your site's project files are located, 프로젝트 디렉토리입니다.
directory=/usr/local/share/iothook

# Each process needs to have a separate socket file, so we use process_num
# Make sure to update "mysite.asgi" to match your project name
# daphne를 실행하는 명령입니다. 밑은 numprocs의 갯수에 따라 소켓이 만들어집니다.
# config.asgi:application은 asgi.py의 내용을 확인하시면 됩니다.
# 별도로 asgi.py와 함께 설명드리겠습니다.
command=/root/.virtualenvs/iothook_env/bin/daphne -u /run/daphne/daphne%(process_num)d.sock --fd 0 --access-log - --proxy-headers config.asgi:application

#소켓의 숫자입니다. 늘이셔도 되고 줄이셔도 됩니다.
# Number of processes to startup, roughly the number of CPUs you have
numprocs=4

# 프로세스 이름을 어떻게 만들 것인지 입니다.
# Give each process a unique name so they can be told apart
process_name=asgi%(process_num)d

# 자동시작할 것인가, 그리고 문제가 발생했을때 다시 재시작을 어떻게 할 것인가 하는 부분입니다.
# Automatically start and recover processes
autostart=true
autorestart=true

# 로그파일을 저장할 위치입니다.
# Choose where you want your log to go
stdout_logfile=/usr/local/share/iothook/log/asgi.log
stderr_logfile=/usr/local/share/iothook/log/asgi_err.log
redirect_stderr=true
user=root  # 실행 user
group=root # 실행 그룹

이렇게 작성하여 저장 한 후, 

$ supervisorctl reread

$ $sudo service supervisor restart

 

하시면 supervisord가 daphne를 실행하게 됩니다.

실행이 제대로 되는 지 확인하기 위해서는 위 command =... 부분의 -u 옵션 뒤 /run/daphne/ 의 디렉토리를 확인하면 됩니다.

이곳에 아래와 같은 파일이 있으면 제대로 실행이 되는 것입니다.

1차 설정이 되었습니다. 이제 nginx 설정을 해보겠습니다

 

nginx 설치 및 설정

Nginx는 웹서버입니다.

웹서버는 보통 사용자의 요청들을 관리하여 WAS의 부하를 줄여주며 정적파일을 담당하고 응답해주는 역할을 합니다.

 

Nginx를 설치해보도록 하겠습니다.

 

$apt update

 

$ apt install nginx

 

Nginx 버전 및 상태 확인 - version/status

 

설치가 완료되면 nginx가 자동으로 실행됩니다.

아래 명령어로 nginx 버전과 상태를 확인 할 수 있습니다.

 

$nginx -v

 

$ service nginx status

 

Nginx 웹브라우저 확인

웹서버가 설치된 IP로 접근하면 위의 화면과 나오면 성공입니다.