Django + Gunicorn + Ngnix 배포해보자

이승연·2021년 7월 27일
1

DevOps

목록 보기
1/5

EC2에 장고 + Ngnix 서버 구동하기

  • ........하 즐거웠다
  • ec2 만드는건 넘나 쉬웠음. free tier로 그냥.. 만듬
  • 내 컴터에 ec2 접속, 업로드 스크립트 만드는 과정에서 권한설정을 배웠다.
  • 첨엔 둘 다 도커로 구성하려고 했는데 그건 나중에 리뉴얼 때 하고 지금은 정석으로 해보기로 했다
  • gunicorn 세팅
    • 일단 가상환경에 gunicorn은 세팅되어있으니까 gunicorn --bind unix:/tmp/gunicorn.sock :application 하니 구동 잘 됨
    • gunicorn.service 파일 때문에 고생했는데 아주 사소한 오타 때문이었다..
  • ngnix 세팅
    • default.conf에서도 사소한 오타 때문에 에러 났지만 손쉽게 해결
    • nginx 공부하자 이거

EC2 port redicrection 해주기

  • EC2는 80 포트를 열었으나 EC2 안에서 돌아가고 있는 장고 어플리케이션은 8000번 포트가 열려있다. 때문에 80을 8000으로 redirection 시켜야 EC2 public ip address로 들어갔을 때 나의 프로젝트가 보인다.
sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8000  //port redirection
sudo iptables -t nat -L  //see the list of the ports added
sudo iptables -D PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8000  //delete a port

그런데 nginx가 어차피 redirection을 따로 해준다..

  • 이거보고 해결은 했는데 default.conf 파일 때문에 고생 꽤나 했다. 우리가 미리 사놓은 도메인 주소를 스테이징 용으로 새로 파고 proxy_pass를 [ip 주소]:8000 으로 redirect해줬는데 이유는 장고를 [ip 주소]:8000으로 띄워놔서... 그런데 이래도 되나?
  • default.conf와 nginx.conf를 모두 수정한 후에는 sudo service nginx restart로 서버를 구동한다. 이때 이상한 에러가 났다. 에러메시지에서는 nginx.conf에서 "server" directive의 argument 수가 이상하다고 해서 nginx.conf만 보고 있었는데 알고 보니 default.conf에 오타가 두개나 있었다. server를 두개나 썼고 'location / ' 이렇게 띄어쓰기를 해줘야하는데 다 붙여써서 일어난 에러.

정적파일을 모아주자..

  • gunicorn의 최대 단점은 정적파일을 안모아준다는 건데 그래서 nginx를 쓰는 거다. 그런데 스테이징 서버 dns 치고 들어가도 css, js이 안보인다. 뭔가 정적파일을 모아주는게 있었던거 같은데...
  • settings.py에서 정적 파일 모아주는 폴더 지정해주는 코드가 있다. 나는 이렇게 바꿔줬다. 현재 디렉토리에서 static이라는 폴더를 root로 지정해주는 코드:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
  • 그리고 python3 manage.py collectstatic해서 정적파일을 다 모아준 다음에 내 서버 dns 주소로 들어가면 어드민 페이지가 예쁘게 보인다.
  • 이때 default.conf에 server /static/ 이라는 directive를 추가하고 alias로 static 폴더가 있는 곳을 명시해주어야 한다.

어드민 로그인이 안된다?

  • 새로운 superuser를 만들어줘서 해결

git pull origin 왜 안돼

참고문헌

Django + Nginx + Gunicorn
배포
도커

0개의 댓글