Lina's Toolbox

배포하기 본문

 

퍼블릭 IPv4주소

인스턴스 상태 - 인스턴스 재부팅 하면 바뀐다. -> 유동 ip 주소! 

고정 ip주소를 쓰고 싶다면 ? -> 탄력적 IP주소를 발급 받으면됨 . (근데 유료임..)

재부팅만 안하면 그대로이므로 우리는 지금은 그냥 해보자.

 

 

 

서버에서는 절대 makemigrations은 해주지 않는다!!

migrate만 해준다.

 

 

 

이제 접속이 된다!!

 

💡 사실 이렇게까지만 하고 써도 되긴하지만,

python3 manage.py runserver​

이렇게 하면 개발용으로 서버를 키는 것이다!!
(Django에 내장되어있는 간단한 WSGI임)

개발 서버는 20명정도만 동시 접속해도 펑 터짐...
그러므로 배포할 때는 앞에 여러가지 장치를 붙여서 배포를 해야한다!

 

개발 서버에서 벗어나기

  • 지금까지 Django 서버를 실행할 때는 계속 Django에 내장된 개발 서버를 사용했지만, 배포 환경에서는 더 효율적인 처리를 할 수 있는 환경이 필요합니다.
  • 일반적으로 DjangoGunicornNginx를 사용해서 배포 환경을 구성해요!

 

 

 

 

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

 

정적 파일 다루기

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

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

...
STATIC_URL = "static/"
STATIC_ROOT = BASE_DIR / "static"
...

settings.py

STATIC_ROOT = 배포할 때 스태틱 파일들을 한 곳에 모으는 경로

 

 

Nginx 설치 및 설정하기

sudo apt install nginx -y

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

 

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

cd /etc/nginx/sites-available

 

 

이 경로에서 보이는 파일들(ex. dafualt)는 nginx에서 사용가능한 설정들을 정의해두는 것이다!

 

 

내 설정 파일 생성

sudo vi django
server {
        listen 80;
        server_name *.compute.amazonaws.com;
        charset utf-8;
		    client_max_body_size 128M;

        location /static {
                alias /home/ubuntu/여기는 내 git repository 이름을 넣어준다!!/static;
        }

        location / {
                include proxy_params;
                proxy_pass http://unix:/tmp/gunicorn.sock;
        }
}

i눌러서 입력 가능한 상태로 만든 후 복붙하고 esc → :wq 입력 후 Enter로 빠져나오기

 

내 리파지토리 이름이 뭔지 모르겠다면?

cd ~ 명령어를 입력하면 내 홈 디렉토리로 이동할 수 있다.

거기서 ls 했을 때 나오는 폴더 이름을 넣어주면 되는 것!!

 

 📕 listen 80
  • 80 포트로 들어오면 웹 서버를 만날 수 있음
  • HTTP의 기본 포트가 80포트 이므로!
    • www.naver.com:80 == www.naver.com
      기본 포트가 80이기 때문에 굳이 써주지 않는 것!!

 

 

  • 설정 파일 적용 하기
    • 작성한 django 설정 파일을 Nginx에게 등록해주는 과정이 필요
    • sites-available 에 설정 목록을 만들어두고 sites-enabled 에서 실제로 사용할 애들을 적용하는 구조
      (Windows로 치면, 바로가기 링크를 만들어주는 것과 같은 기능!)
cd /etc/nginx/sites-enabled
sudo rm default # 기본 설정 삭제
sudo ln -s /etc/nginx/sites-available/django

ln -s : 링크 생성해 준다

 

내가 작성한 설정 django만 남아있다!

 

내가 잘한 게 맞는 지 확인하고 싶다면?

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

실제로 작동할 지는 아직 모른다.

문법적인 오류만 체크해주는 명령어.

 

syntax is ok, test is successful → 문법적으로는 문제가 없다!

 

 

 

Nginx 실행하기

이제 이 nginx를 켜보자!

sudo systemctl start nginx

Nginx 실행

 

잘 실행되고 있는거 맞나?

sudo systemctl status nginx

active 상태로 잘 돌아가고 있음!

q 를 입력하여 나갈 수 있다.

 

이제 nginx를 끄고싶다?

sudo systemctl stop nginx

Nginx 중지

sudo systemctl restart nginx

Nginx 재시작

 

 

오케이, 이제 포트입력 없이 바로 내 퍼블릭 IPv4주소로 들어가면 되겠지?

→ 안뜬다! 😢

AWS에서 포트 8000번만 열어주고 아직 80번은 안열어줬기 때문임.

 

 

80 포트 열어주기

내가 만든 ec2 인스턴스 → 보안 → 보안그룹 눌러서 들어가서

 

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

 

Gunicorn 서비스 설정 및 실행

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

gunicorn --bind 0:8000 api_pjt.wsgi:application
  • 이 방식은 포트를 이용해서 연결하는 방식이지만,
    유닉스 계열 시스템(ex. Ubuntu)에는 소켓을 이용하는 것이 효율적인 방법입니다.
    (소켓으로 연결하면 좋구나 정도로만 생각해 둡시다!)
  • 더구나 지금은 Shell을 종료하면 Gunicorn도 종료되어 서비스가 되지 않음→ 서비스(service)로 등록 필요!
  • → 계속해서 동작하도록 하고 AWS 서버를 재시작해도 동작해야한다!

 

 

 

정적 파일도 잘 적용되었다 !

nginx에서 우리가 static파일을 모아놓은 폴더에서 가져다가 정적파일을 serving해주는 거!!

 

 

배포 마무리

개발 모드 종료하기

settings.py

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

우리 로컬에서 commit , push 해준 후

→ EC2 의 git root directory에서 pull 해주자!!

이 경로에서 pull 해줘야함 주의!!!!

 

 

 

 

 

 

 

현재 이런 구조!!!! nginx → gunicorn → Django 가 EC2안에 있다.

'스파르타 내일 배움 캠프 AI 웹개발 과정 > Django framework' 카테고리의 다른 글

Pydantic란? 사용법 / Serializer와 비교  (0) 2024.09.10
Redis  (0) 2024.09.10
API 문서화  (0) 2024.09.04
Django Auth  (1) 2024.09.04
장고 기초 이해도 테스트  (1) 2024.09.02