-
[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