[Nginx + Gunicorn + Django] API 서버 구축
웹서버인 Nginx, 앱서버인 Django,
그리고 그 둘을 통신하게 도와주는 Guniron 인터페이스
이렇게 3개를 함께 구축하여 Rest API 통신을 하는 서버를 구축!
가상환경 구축 (Aanaconda)
$ wget https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh
- 아나콘다 공식 홈페이지에서 다운로드 할 경로를 받아와서 설치 진행
$ bash Anaconda3-2019.10-Linux-x86_64.sh
- yes로 설치 진행
- 아나콘다 설치 위치를 확인한다.
$ source ~/.bashrc
- 변경 된 사항 적용
<Trouble Shooting>
anaconda 설치 후 변경 사항 적용 후에도 conda not found 에러가 뜨는 경우
export PATH=~/anaconda3/bin:$PATH
위와 같이 경로 설정해주면 conda 사용가능
가상환경 생성 및 확인
$ conda create -n "가상환경이름" python=3.5.6
- 가상환경 생성
$ conda --version
- 가상환경 버전 확인
$ conda info --envs
- 가상환경 리스트 확인
$ conda remove -name "가상환경이름" -all
- 가상환경 삭제
$ conda activate "가상환경이름"
$ conda deactivate "가상환경이름"
- 가상환경 활성화, 비활성화
<Trouble Shooting>
가상환경 activate 할때 아래와 같이 에러 발생할 경우
CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'
source ~/.bashrc 를 통해 변경사항을 적용한다.
그럼 아래와 같이 잘 실행된다.
Django, DjangoFrameWork 설치
- pip으로 라이브러리 설치 전 업그레이드를 먼저 진행한다
$ pip install --upgrade pip
$ pip install django
$ pip install djangorestframework
장고 프로젝트 시작
$ django-admin startproject [프로젝트이름]
- 프로젝트 시작 시 프로젝트라는 이름으로 폴더가 생성된다.
- 또한 프로젝트 시작 위치에 실행을 시킬 수 있는 manage.py가 생성된다
# 기본 생성 파일
1) manage.py : 실행시 사용 ( runserver )
2) 프로젝트이름/settings.py : 장고 프로젝트 설정을 하는 곳
3) 프로젝트이름/urls.py : 앱단위 전체 url을 관리하는 곳
4) wsgi.py : 배포관련 파일이 존재하는 곳
$ python manage.py runserver 0.0.0.0:8000
- 외부에서 접속이 가능하게 하려면 runserver 뒤에 0.0.0.0을 붙여주고, 그렇지 않다면 포트만 작성
- 외부에서 접속이 가능하게 하는 또 다른 설정은 프로젝트/setting.py에서 아래와 같이 추가 수정
- 서버를 debug 모드로 실행시킬 때는 DEBUG = True로 설정한다.
- 실행 후 잘 접속이 된다면 제대로 장고가 설치가 된 것이다.
$ python manage.py startapp 앱이름
- 추가적으로 앱을 새로 시작한다.
- 앱이름으로 프로젝트 폴더 안에 앱 폴더가 생성된다.
- 이후 자세한 설정은 아래 포스팅 참고
https://soyoung-new-challenge.tistory.com/10?category=831257
Gunicorn 설치하기
$ conda install -c anaconda gunicorn
- 아나콘다를 사용하여 Gunicorn 설치 진행
$ gunicorn --bind 0.0.0.0:8000 장고프로젝트이름.wsgi:application
- Gunicorn이 설치가 완료되면, 장고 프로젝트 안에 manage.py가 있는 경로로 와서 위 명령어로 Gunicorn 실행
- 위와 같은 화면이 보여지면 잘 설치가 된것으로 확인
- 웹 브라우저로 http://서버IP:8000 로 접근해 제대로 작동하는지 한번 더 체크 후 종료
Gunicorn 설정하기
$ vi /etc/systemd/system/gunicorn.service
- system에 Gunicorn을 등록하기 위해 위 파일 생성하여 아래 내용을 입력해준다.
- Anaconda를 통해 Gunicorn을 설치했다면 gunicon(소켓? 실행파일)의 경로는 /anaconda3/가상환경이름/python3/bin/gunicorn이다.
- ExecStart : Gunicorn실행위치 --workers 숫자 --bind 0.0.0.0:8000 장고프로젝트이름.wsgi:application
$ sudo systemctl start gunicorn
$ sudo systemctl enable gunicorn
$ sudo systemctl status gunicorn.service
- 제대로 실행이 되었는지 확인
NGINX 설치하기
$ sudo apt-get update
$ sudo apt-get install nginx
- Nginx 설치하기
$ service nginx restart
$ service nginx status
- service로 nginx 시작하고 상태 확인하기
Nginx - Gunicorn - Django 연결하기 위한 설정
$ vi /etc/nginx/sites-enabled/장고프로젝트이름
>> 위 설정파일을 생성해서 아래와 같이 입력한다
server {
listen 80;
server_name [IP주소];
charset utf-8;
location / {
include proxy_params;
proxy_pass http://[IP주소]:8000;
}
}
>> 위 설정을 하고 nginx를 재시작한다
>> 80 포트로 요청을 보내면 8000번 구니콘 인터페이스에서 장고로 연결되어 요청이 처리된다.