이 포스팅에서는 AWS에서 서버를 셋팅할 것이기 때문에 AWS EC2 설정이 되어있다는 가정하에 진행한다.
또한 글쓴이의 OS 환경은 레드햇 페도라 환경에서 진행했다.
먼저 간단하게 서버 구조를 말하면 Nginx 80번 포트로 접속하면 uWSGI 8000번 포트로 요청을 보내 우리가 만든 Django 프로젝트에 접속하게 될 것이다.
우리가 사용자에게 listen할 포트(80)는 열어놔야하기 때문에 AWS 사용자 지정 포트에서 80번 포트를 열어줘야한다.
포트를 변경하고 싶으면 변경해도 되지만 설정한 포트에따라 사용자 지정 포트를 열어줘야 하는 것도 명심하자.
1. Django
django 프로젝트는 배포될 준비가 다 되어있다는 가정 하에 진행한다.
-
가상환경 셋팅
- static root 설정
- media root 설정
$ python manage.py collectstatic
2.Nginx
글쓴이는 Nginx 설정에 정말 삽질을 했다.
블로그를 보며 배포를 하려고 하는데 블로그에서는 sites-available 폴더에 conf 파일을 넣으면 된다고하는데.. 해당 폴더가없어서 삽질을 엄청했다.
이 포스팅은 sites-available
, sites-enabled
폴더가 없는 개발자들에게 유용한 포스트가 될 것이다.(그러길 바란다..)
먼저 uWSGI와 nginx 서버 등을 설정하기 위해 conf 파일을 생성한다.
etc/nginx/conf.d/testprj.conf 생성 (nginx의 경로는 OS 별로 다를 수 있기 때문에 꼭 확인해보자.)
[..] 대괄호 안에있는 것은 자신의 프로젝트의 이름이나 경로에 따라 알맞게 변경한다.
1 |
|
여기서
1 |
|
nginx 서버 확인 시 이런 오류가 난다면
nginx.conf
파일 수정을 해줘야 한다.
아래 설정을 http {} block
에 설정 안에 넣는다.
1 |
|
오류에는 64라고 되어있어 64로 했더니 오류가 사라지지 않아 512로하니까 되었다.
이렇게 하고 $ sudo nginx -t
수행 -> 성공하면 nginx 설정 끝!
3. uWSGI
가상환경이 활성화된 상태에서 uWSGI 설치
$ pip install uwsgi
잘 깔렸는지 확인해보자
$ wsgi --http :8000 --module [your-project-name].wsgi
(manage.py 디렉토리에서)
잘 되면 ini파일 생성
$ sudo vi [testprj].ini
1 |
|
이렇게 하구 저장!
- 실행
$ uwsgi testprj.ini (가상환경 안에서 )
- uWSGI 로그확인
$ vi testprj.uwsgi.log
- uWSGI 중지
$ uwsgi --stop [testprj].uwsgi.pid
uWSGI 가 실행된 상태에서 nginx 서버를 시작한다.
$ sudo service nginx start
이후 맨 처음 nginx에서 생성한 conf 파일의 server_name에 설정한 주소(AWS 주소)로 들어가보면 Django project가 띄어져 있을 것이다! 그러면 연동 끝!
설정 중 오류가 있으면 댓글 남겨주세요 💁
refer
https://medium.com/@charlesthk/deploy-nginx-django-uwsgi-on-aws-ec2-amazon-linux-517a683163c6
https://www.savour-it.com/posts/2018-02-06-nginx-uwsgi-django-setting/
https://blog.leop0ld.org/posts/use-python3-django-uwsgi-nginx/
http://charles.lescampeurs.org/2008/11/14/fix-nginx-increase-server_names_hash_bucket_size