ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Django] AWS 배포 → Gunicorn, Nginx 설치 및 설정
    Django 2024. 9. 8. 21:03

     

    Django, AWS 배포 (Deploy) 이어서...

     

     

    gunicorn 설치 및 설정하기

     

     

     

    설치과정에서 나오는 설정들은 tab해서 모두 OK로 설치하면 된다.

    $ sudo apt-get update
    $ sudo apt-get install gunicorn

     

     

    Gunicorn 실행

     

    manage.py가 있는 프로젝트 폴더에서 실행해준다.

    gunicorn --bind 0:8000 api_pjt.wsgi:application

    다시 웹브라우저로 들어가봐도 잘 동작하는 것을 볼 수 있다.

     

     

     

    그런데 /admin/ 으로 들어가면?

    정적 파일이 제공되지 않고 있지 않기 때문이다 → Nginx에서 처리 예정

     

    정적 파일 다루기

     

    정적파일 설정 및 한 곳으로 모으기

     

    settings.py에 static 파일들이 위치할 경로와 url을 지정해준다.

    # settings.py
    STATIC_URL = "static/"
    STATIC_ROOT = BASE_DIR / "static"

     

     

    • 코드변경 → commit → puth 이후 EC2에서 pull !
    • 정적파일 한 곳에 모으기
    python3 manage.py collectstatic

     


     

    Nginx 설치 및 설정하기

     

    sudo apt install nginx -y

    중간에 멈추어서 물어보는 구간에서는 엔터를 이용해서 모두 넘겨주며 설치

     

     

    /etc/nginx/stites-available 이동해서 설정을 등록해준다.

    cd /etc/nginx/sites-available

     

     

    내 설정 파일 생성

    sudo vi django
    server {
            listen 80;
            server_name *.compute.amazonaws.com;
            charset utf-8;
    		    client_max_body_size 128M;
    
            location /static {
                    alias /home/ubuntu/edu-django-test/static;
            }
    
            location / {
                    include proxy_params;
                    proxy_pass http://unix:/tmp/gunicorn.sock;
            }
    }

    esc → :wq 입력 후 Enter로 빠져나오기

     

    📕 listen 80
    ·  80 포트로 들어오면 웹 서버를 만날 수 있음
    ·  HTTP의 기본 포트는 80 포트 (www.aidenlim.dev:80 == www.aidenlim.dev)

     

     

    설정 파일 적용 하기

    • 작성한 django 설정 파일을 Nginx에게 등록해주는 과정이 필요
    • sites-available 에 설정 목록을 만들어두고 sites-enabled 에서 실제로 적용하는 구조
    cd /etc/nginx/sites-enabled
    sudo rm default # 기본 설정 삭제
    sudo ln -s /etc/nginx/sites-available/django

    sudo nginx -t # 설정이 올바른지 테스트

     

     

    nignx 유저 정보 바꿔주기

    sudo vi /etc/nginx/nginx.conf

    i 입력해 INSERT 모드 들어가 바꿔주고 esc 나온후 :wq 이용해 반영

     

     

    Nginx 실행

    sudo systemctl start nginx

    Nginx 실행

    sudo systemctl stop nginx

    Nginx 중지

    sudo systemctl restart nginx

    Nginx 재시작

     

     

    80 포트 열어주기

     

     

     

    이제 포트번호 없이 내 ip 주소로 바로 들어가면 Nginx 설정을 만날 수 있다!


     

    Gunicorn 서비스 설정 및 실행

     

    이전에는 아래의 명령어를 이용해서 Gunicorn을 실행했다.

    gunicorn --bind 0:8000 api_pjt.wsgi:application

     

    ·  이 방식은 포트를 이용해서 연결하는 방식이지만, 유닉스 계열 시스템에는 소켓을 이용하는 것이 효율적인 방법이다.

      (소켓으로 연결하면 좋구나 정도로만 생각해두자!)

     

    ·  더구나 지금은 Shell을 종료하면 Gunicorn도 종료된다.

      → 계속해서 동작해야 하고, AWS 서버를 재시작해도 동작해야한다.

      → 서비스(service)로 등록이 필요하다.

     

     

    • gunicorn 서비스 파일 생성
    cd /etc/systemd/system
    sudo vi gunicorn.service

     

    • 예시 코드이므로 이대로 입력하면 안되고 내 경로를 입력해야 한다.
    [Unit]
    Description=gunicorn daemon
    After=network.target
    
    [Service]
    User=ubuntu
    Group=ubuntu
    WorkingDirectory=<manage.py가 위치한 디렉토리 pwd>
    ExecStart=<gunicorn이 설치된 가상환경 위치> \
            --workers 2 \
            --bind unix:/tmp/gunicorn.sock \
            <wsgi.py가 있는 디렉토리 이름>.wsgi:application
    
    [Install]
    WantedBy=multi-user.target
    [Unit]
    Description=gunicorn daemon
    After=network.target
    
    [Service]
    User=ubuntu
    Group=ubuntu
    WorkingDirectory=/home/ubuntu/edu-django-test
    ExecStart=/usr/bin/gunicorn \
            --workers 2 \
            --bind unix:/tmp/gunicorn.sock \
            api_pjt.wsgi:application
    
    [Install]
    WantedBy=multi-user.target

     

     

     

    다시 ip 주소로 들어가보면 👀

     

    정적 파일도 잘 적용됐다!

     


    배포 마무리

    개발 모드 종료하기

    settings.py

    # SECURITY WARNING: don't run with debug turned on in production!
    DEBUG = False

     

    commit → push & EC2 pull !

     

     

    Gunicorn 재시작

    sudo systemctl restart gunicorn
    sudo systemctl status gunicorn

     

     

    동작 상태 확인

     

    이제는 내부 정보가 보이지 않는다.

     

     

    Postman 동작 확인

     

    • 마지막으로 postman 동작을 확인해보자

     

     

    • 환경 변수로 등록해서 사용해보기

     

     

    끄으으읕!!🚀

     

     

    'Django' 카테고리의 다른 글

    Django DRF 개인과제 트러블 슈팅  (0) 2024.09.10
    [Django] API 문서화  (2) 2024.09.10
    Django, AWS 배포 (Deploy)  (2) 2024.09.06
    Django 외부 API 연동하기  (1) 2024.09.05
    Token Auth with JWT  (1) 2024.09.03
Designed by Tistory.