이것저것 적어보는 블로그

AWS에 Django 서비스 배포하기 1 - uWSGI 연결 본문

개발&코딩

AWS에 Django 서비스 배포하기 1 - uWSGI 연결

dona0408 2023. 7. 6. 23:18
반응형

EC2에 git레포 클론해서 가져오는 건 했다고 가정하고, 프로젝트를 웹 서버와 이어주는 작업을 해야 한다.

Django는 웹 서버와 직접적으로 통신할 수 없기 때문에 이를 중간에서 이어 줄 python 프레임워크인 WSGI(Web Server Gateway Interface) server를 설치해 주어야 한다.

 

먼저, 가상환경을 만들기 전에 python3-venv를 설치

sudo apt-get install python3-venv

가상환경의 위치는 현재 사용하고 있는 유저인 ubuntu의 홈 폴더에 만들었다.

cd ~

python3 -m venv myvenv

그리고 만든 가상환경을 활성화한다. 활성화가 되면 사용자 이름 앞에 (가상환경 폴더명)이 붙는다.

source myvenv/bin/activate

이후 장고 프로젝트 폴더로 돌아가 python3 manage.py runserver 0:8080 을 입력해 주고

EC2 인스턴스의 퍼블릭 IPv4 DNS:8080 에 접속하면 장고 프로젝트를 외부에서 접속할 수 있다.

(ec2-43-202-37-179.ap-northeast-2.compute.amazonaws.com← 이런 주소)

 

보안설정을 통해서 포트를 열어주지 않으면 접속이 안되니 열어주자

사진에 보면 8080말고도 다른 일부 포트가 열려 있다. 특히 80포트! 추후 nginx 설정하면서 필요하니 미리 설정해두자.

사진과 같이 포트를 열어주면…! DisallowedHost at / 라는 에러가 반겨준다.

장고 프로젝트의 settings.pyALLOWED_HOSTS에 주소를 추가해줘야 한다.

mysite/settings.py

ALLOWED_HOSTS = [
    ".ap-northeast-2.compute.amazonaws.com"
]

Django는 웹 서버와 직접 통신할 수 없어서 uWSGI라는 Python 패키지를 설치해야 하여 Django와 연결해 주어야 한다

아까 만든 가상환경을 활성화하고 uwsgi 패키지를 설치!

source ~/myvenv/bin/activate

pip3 install uwsgi

설치를 끝내고 uwsgi 서버를 이용해 Django 프로젝트를 연결을 위해 아래의 명령어를 이용하면 된다.

uwsgi --http :[포트번호] --home [가상환경 경로] --chdir [장고프로젝트폴더 경로] -w [wsgi 모듈이 있는 폴더].wsgi
  • 포트번호: 8080
  • 가상환경 경로: uwsgi를 설치한 myvenv의 경로, 절대 경로로 지정해 주는 것이 좋다고 한다.
  • wsgi 모듈이 있는 폴더: 프로젝트 폴더 내 wsgi.py가 있는 경로

정상적으로 실행이 되면 runserver를 실행하지 않아도 Django 프로젝트에 접속이 가능해진다.

저걸 매번 치기 귀찮으니 한방에 가능하도록 스크립트를 작성

그전에 로그 저장할 폴더를 만들고 소유권을 ubuntu로 변경한다

sudo mkdir -p /var/log/uwsgi/mysite

sudo chown -R ubuntu:ubuntu /var/log/uwsgi/mysite/

나는 장고 프로젝트 폴더 내에 만들었는데 ini의 저장 경로는 어디든 상관이 없다

.config/uwsgi/mysite.ini

[uwsgi]
chdir = '장고 프로젝트 폴더의 경로 적으면 된다'
module = '입력했던 -w 옵션 뒤의 값과 같으나 뒤에 :application을 붙이기'
home = '가상환경의 경로'

uid = ubuntu
gid = ubuntu

http = : 8080

enable-threads = true
master = true
vacuum = true
pidfile = /tmp/mysite.pid
logto = /var/log/uwsgi/mysite/@(exec://date +%%Y-%%m-%%d).log
log-reopen = true

mysite.ini에 있는 옵션을 이용해 uwsgi 서버를 다시 켜는 건 아래와 같이 하면 된다

sudo /home/ubuntu/myvenv/bin/uwsgi -i [mysite.ini 저장경로]

다음은 nginx를 연결할 차례다. ”Client ↔ Nginx ↔ uWSGI ↔ Django” 의 구조가 되도록 구축을 하는 것이다.

반응형
Comments