이번에는 저번 게시글에서 언급했던 WSGI 서버중 하나인 Gunicorn(구니콘)을 설치해본다.

 

1. Gunicorn 설치

 Gunicorn 은 운영을 위한 도구이기 때문에 서버 환경에 설치한다. MobaXterm 으로 AWS 서버에 접속하고

가상환경에 진입한 뒤 다음 명령어를 실행하여 Gunicorn 을 설치한다.

 

pip install gunicorn

 

Gunicorn 이 정상적으로 설치되었다.

 

 

2. Gunicorn 테스트

 이제 Gunicorn 이 정상적으로 실행되는지 다음 명령을 실행하여 확인해보자.

 

gunicorn --bind 0:8000 config.wsgi:application

 

--bind 0:8000 은 8천번 포트로 WSGI 서버를 실행한다는 의미이며 config.wsgi:application 은 WSGI 서버가 호출할

WSGI 애플리케이션이 config/wsgi.py 파일의 application 이라는 의미이다. 실행하면 정상적으로 서버가 구동되는 것을

확인할 수 있다.

 

그런데 서버에 접속해보면 위와 같이 화면이 이상하게 표시된다. 이는 Gunicorn 이 동적 페이지만을 처리하는 

서버라서 정적 파일인 css 파일 등을 해석하지 못하기 때문이다.  정적 페이지의 처리는 웹 서버인 Nginx 에서 할 일이니

우선 Gunicorn 이 정상 동작하는 것만 확인하고 서버를 종료한다.

 

 

3. Gunicorn 소켓

 앞서 테스트에서 Gunicorn 을 실행한 것 처럼 포트번호를 통해 서버를 구동할 수도 있지만 Unix 계열 시스템에서는

포트로 서비스하는 것 보다 유닉스 소켓을 사용하는 것이 빠르고 효율적이다.  현재 pybo 가 설치된 서버는 Linux 환경이니 유닉스 소켓을 사용하여 서버를 구동해보자. 

 

gunicorn --bind unix:/tmp/gunicorn.sock config.wsgi:application

 

--bind 뒷부분이 0:8000 대신 unix:<소켓 경로> 의 형식인 것을 확인할 수 있다. 

 

포트로 구동했을 때와 달리 소켓으로 서버를 구동하면 직접 서버에 접속할 수 없으며 Nginx 와 같은 웹 서버를 통해서

접속해야 한다.

 

 

4. Gunicorn 서비스

이제 AWS 서버에 Gunicorn 을 서비스로 등록하여 Gunicorn 의 시작, 중지를 쉽게하고 AWS 서버를 다시 시작할 때

Gunicorn을 자동으로 실행하도록 해보자. 

 

 

먼저 ~/venvs 디렉토리에서 mysite.env 파일을 위와 같이 작성하자.  nano 혹은 vi를 사용하여 작성하면 된다.

Gunicorn 이 서비스로 실행될 경우 alias 나 셸스크립트 등을 통해 생성되는 DJANGO_SETTINGS_MODULE 환경변수가

생성되지 않기 때문에 직접 환경변수 파일을 생성해두어야 한다.

 

 

cd /etc/systemd/system/
sudo vi mysite.service

 

 

그리고 /etc/systemd/system/ 디렉토리에 위와 같이 mysite.service 라는 파일을 작성한다.  시스템 디렉토리에 파일을 저장해야하기 때문에 슈퍼유저 권한을 사용하여 작업한다.  서비스 파일에는 유저와 그룹, 작업디렉토리와 환경변수

파일, 실행 명령어 등을 정의해둔다.  --workers 2 는 프로세스를 두개 사용한다는 의미이다.

 

 

 

sudo systemctl start mysite.service
sudo systemctl status mysite.service

이제 위의 두 명령어를 실행하여 서비스를 실행하고 정상적으로 실행중인지 확인하자.  정상적으로 실행되지 않을 경우

/var/log/syslog 의 로그를 확인하여 오류를 확인, 수정해야한다.

 

 

마지막으로 아래의 명령어를 실행하여 서비스가 AWS 서버가 켜졌을 때 자동으로 실행되도록 등록해준다.

 

systemctl enable mysite.service

 

 

이제 AWS 서버가 켜지면 Gunicorn 서버가 자동으로 구동된다.

 

 

5. Gunicorn 서비스 종료, 재시작

 서비스를 종료하거나 재시작하고 싶을 경우 아래 두 명령어를 사용하면 된다.

# 서비스 종료
sudo systemctl stop mysite.service

# 서비스 재시작
sudo systemctl restart mysite.service

 

'개인 프로젝트 > Django-mysite' 카테고리의 다른 글

#35 서버 관리자  (0) 2021.10.15
#34 Nginx  (0) 2021.10.15
#32 WSGI  (0) 2021.10.15
#31 터미널 접속  (0) 2021.10.14
#30 settings.py 분리  (0) 2021.10.14

+ Recent posts