일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 라이엇
- lol
- drf
- 롤
- 프로그래머스
- Riot
- 리그오브레전드
- 자바
- greedy
- github
- programmers
- 내일배움캠프
- 코딩테스트
- git
- 코딩테스트준비
- SQL
- 장고
- 백준
- API
- 스파르타내일배움캠프TIL
- python
- java
- sort
- 파이썬
- Django
- 알고리즘
- 그리디
- 그리디알고리즘
- 스파르타내일배움캠프
- 탐욕알고리즘
- Today
- Total
Lina's Toolbox
배포하기 본문
퍼블릭 IPv4주소
인스턴스 상태 - 인스턴스 재부팅 하면 바뀐다. -> 유동 ip 주소!
고정 ip주소를 쓰고 싶다면 ? -> 탄력적 IP주소를 발급 받으면됨 . (근데 유료임..)
재부팅만 안하면 그대로이므로 우리는 지금은 그냥 해보자.
서버에서는 절대 makemigrations은 해주지 않는다!!
migrate만 해준다.
이제 접속이 된다!!
💡 사실 이렇게까지만 하고 써도 되긴하지만,
python3 manage.py runserver
이렇게 하면 개발용으로 서버를 키는 것이다!!
개발 서버는 20명정도만 동시 접속해도 펑 터짐...
(Django에 내장되어있는 간단한 WSGI임)
그러므로 배포할 때는 앞에 여러가지 장치를 붙여서 배포를 해야한다!
개발 서버에서 벗어나기
- 지금까지 Django 서버를 실행할 때는 계속 Django에 내장된 개발 서버를 사용했지만, 배포 환경에서는 더 효율적인 처리를 할 수 있는 환경이 필요합니다.
- 일반적으로 Django는 Gunicorn과 Nginx를 사용해서 배포 환경을 구성해요!
정적 파일이 제공되고 있지 않기때문 ! → 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 : 링크 생성해 준다
내가 잘한 게 맞는 지 확인하고 싶다면?
sudo nginx -t # 설정이 올바른지 테스트
실제로 작동할 지는 아직 모른다.
문법적인 오류만 체크해주는 명령어.
Nginx 실행하기
이제 이 nginx를 켜보자!
sudo systemctl start nginx
Nginx 실행
잘 실행되고 있는거 맞나?
sudo systemctl status nginx
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 해주자!!
'스파르타 내일 배움 캠프 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 |