gunicorn & Nginx를 사용하여 Django AWS 우분투 서버에 배포

김유신·2024년 2월 12일
0

Django

목록 보기
2/3
post-thumbnail

사전 진행 사항 - ec2 ubuntu 22.04 LTS t2.micro 생성후 진입상태

$ sudo apt update
$ sudo apt install python3-pip python3-dev nginx

Python 가상 환경 만들기

$ sudo pip3 install virtualenv
$ sudo apt install python3-virtualenv

깃허브에서 프로젝트 클론해오기
(Django 애플리케이션을 호스팅할 프로젝트 디렉터리를 만들고)

해당 디렉터리 내에 가상 환경 제작

$ git clone https://github.com/rashiddaha/blogprojectdrf.git
$ cd ~/blogprojectdrf
$ then
$ virtualenv env

env 가상 환경이 생성됩니다. 가상 환경을 활성화해 보겠습니다.

$ source env/bin/activate
$ pip install -r requirements.txt

Django 및 gunicorn 설치

$ pip install django gunicorn

가상 환경에 Django와 gunicorn이 설치되었습니다.

Django 프로젝트 설정

  • settings.py의 ALLOWED_HOSTS 변수에 IP 주소나 도메인을 추가. * ~/blogprojectdrf/blog

마이그레이션 실행

$ python manage.py makemigrations
$ python manage.py migrate
$ python manage.py collectstatic

가져오기 정적 파일에 관한 사항입니다 (필요시 수행)
. seeting.py 파일에 추가해야하는 사항입니다.

설정 파일의 Installed_apps 에 ' whitenoise.runserver_nostatic '줄을 추가합니다 .
설정 파일의 MiddleWare에 'whitenoise.middleware.WhiteNoiseMiddleware'를 추가합니다.
또한 블로그/URL 하단에 다음 줄을 추가하세요 blog/urls. py file.

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
    urlpatterns += static(settings.STATIC_URL, document_root = settings.STATIC_URL)
 

블로그/URL 상단에 추가 blog/urls. py file.

from django.conf import settings # new
 from django.conf.urls.static import static #new

whitenoise 설치
Django 에서 DEBUG = False시기존 static 파일들이 모두 경로를 못찾게 된다. WhiteNoise 를 설치해 문제를 해결 가능.
WhiteNoise는 static파일들을 collectstatics 명령수행시 지정경로에 파일들을 모아주는 역할을 한다.

$ pip install whitenoise

gunicorn 구성

가상 환경을 비활성화합니다.

$ deactivate

gunicorn용 시스템 소켓 파일을 만들기

$ sudo vim /etc/systemd/system/gunicorn.socket

해당 내용을 입력.

[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target

gunicorn용 서비스 파일을 생성

$ sudo vim /etc/systemd/system/gunicorn.service

해당 내용을 입력.

[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/blogprojectdrf
ExecStart=/home/ubuntu/blogprojectdrf/env/bin/gunicorn \
          --access-logfile - \
          --workers 3 \
          --bind unix:/run/gunicorn.sock \
          blog.wsgi:application
[Install]
WantedBy=multi-user.target

Gunicorn 소켓 시작및 활성화

$ sudo systemctl start gunicorn.socket
$ sudo systemctl enable gunicorn.socket
 

cd /etc/nginx/sites-enabled/ 이동후 default 삭제 sudo rm -r default

Nginx 역방향 프록시로 구성
Nginx에 대한 구성 파일을 만듭니다.

$ sudo vim /etc/nginx/sites-available/blog

해당 내용을 입력. 필요에 따라 location /static / < location /staticfiles/로 변경

server {
    listen 80 default_server;
    server_name _;
    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/ubuntu/blogprojectdrf;
    }
    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

작성한 Nginx 구성을 활성화

$ sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/

정적 파일을 로드가 필요할시 명령어.

$ sudo gpasswd -a www-data 사용자 이름

```ubuntu 환경임으로  ```

$ sudo gpasswd -a www-data ubuntu

nginx를 다시 시작, 변경 사항 적용

$ sudo systemctl restart nginx
$ sudo service gunicorn restart
$ sudo service nginx restart

추가적으로 오류가 있는 경우

오류 로그를 확인하려면

$ sudo tail -f /var/log/nginx/error.log

nginx가 잘 작동하는지 확인하려면

$ sudo systemctl status nginx

마지막!

$ sudo fuser -k 8000/tcp
$ sudo lsof -t -i tcp:8000 | xargs kill -9. # to kill termianl
# https://amalgjose.com/2020/02/27/gunicorn-connection-in-use-0-0-0-0-8000/

                                            끝!
profile
KYS's blog

0개의 댓글