on
#33 Gunicorn
#33 Gunicorn
이번에는 저번 게시글에서 언급했던 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
from http://scala0114.tistory.com/122 by ccl(A) rewrite - 2021-10-15 21:01:29