찰리의 놀이터

[EC2] Django REST Framework 배포하기(feat. Miniconda, Gunicorn, NginX) 본문

AWS

[EC2] Django REST Framework 배포하기(feat. Miniconda, Gunicorn, NginX)

차알리 2023. 3. 20. 17:49

지난 포스팅에서 EC2 Local에서 다루는 MySQL을 보여드렸습니다.

EC2 인스턴스 생성은 지난 포스팅에서 다루었기 때문에 EC2 인스턴스를 만들고 MySQL 설정이 끝난 시점부터 시작하도록 하겠습니다.

Git 설치 후 레포지토리 복제

Django Project는 github로 가져옵니다.
가져온 이 후, MySQL 설정을 해주시고 migrate를 진행해주시면 됩니다.

$ sudo apt-get install git

$ git clone [Repository 주소]

Miniconda 설치

저는 기존 Local에서 Anaconda 가상환경을 사용하고 Virtualenv 사용 시 pip 설치할 때, 설치할 수 있는 최신버젼이 맞지 않아 Miniconda를 사용합니다.

miniconda 공식 사이트에서도 확인할 수 있습니다.

wget으로 파일을 설치합니다.

$ wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

권한 변경을 해줍니다.

$ chmod -R 755 Miniconda3-latest-Linux-x86_64.sh

받은 파일을 설치합니다. 중간중간 yes 또는 엔터를 눌러줍니다.
엔터로 넘어가는 속도가 느리면 스페이스바를 눌러주시면 됩니다.

$ ./Miniconda3-latest-Linux-x86_64.sh

conda 설치가 완료되면 아래 명령어로 새로 추가된 PATH를 활성화 시켜주도록 합니다. 실행시키고 입력창 앞에 (base)가 뜬다면 설치 완료입니다.

$ source ~/.bashrc

requirements.txt

개발 진행한 가상환경의 설치 프로그램을 옮기기 위해 requirements.txt를 설치하셨을겁니다.

가상환경을 생성하신 후 모두 다운로드 받도록 합니다.

Gunicorn

Gunicorn 설치

$ pip install gunicorn

Gunicorn 세팅

settings.py에 정적파일 저장할 경로 추가 및 정적파일 저장

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

또는

STATIC_ROOT = '/static/'

manage.py가 있는 디렉토리에서 아래 명령어를 실행합니다.

$ python manage.py collectstatic

DRF를 그냥 불러오면 DRF에서 보이는 HTML, CSS, JavaScript가 없어서 이상한 모습으로 렌더링됩니다.

Gunicorn 파일 설정

gunicorn 대신 다른 이름을 쓰셔도 됩니다.

$ cat /etc/systemd/system/gunicorn.service

  • WorkingDirectory : Django Project의 절대경로
  • EnvironmentFile : Django Project의 환경변수
  • ExecStart : gunicorn을 install한 가상환경 내의 gunicorn 위치
[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=ubuntu
Group=ubuntu
WorkingDirectory=/home/ubuntu/[Django Project]
EnvironmentFile=/home/ubuntu/[Django Project]/.env
ExecStart=/home/ubuntu/miniconda3/envs/de/bin/gunicorn \
        --workers 2 \
        --bind unix:/tmp/gunicorn.sock \
        config.wsgi:application

[Install]
WantedBy=multi-user.target

Gunicorn 명령어

서비스 등록

$ sudo systemctl start gunicorn
$ sudo systemctl enable gunicorn

서비스 재시작(Django 파일 수정 시 수행)

$ sudo systemctl daemon-reload
$ sudo service gunicorn restart

상태 확인

$ systemctl status gunicorn

NginX

NginX 설치

$ pip install nginx

NginX 파일 설정

$ sudo vi /etc/nginx/sites-available/프로젝트이름

server {
        listen 80;
        server_name [Public DNS 또는 IP];

        location = /favicon.ico { access_log off; log_not_found off; }

        location /static/ {
                root /home/ubuntu/[Django Project];
        }

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

$ sudo ln -s /etc/nginx/sites-available/프로젝트이름 /etc/nginx/sites-enabled

이미 존재한다고 뜬다면 f 옵션을 걸어줍니다.

$ sudo ln -sf /etc/nginx/sites-available/django_test /etc/nginx/sites-enabled

문법 검사 후 NginX를 다시 시작합니다.

$ sudo nginx -t
$ sudo systemctl restart nginx

Errors

Failed to start A high performance web server and a reverse proxy server
[https://stackoverflow.com/questions/51525710/nginx-failed-to-start-a-high-performance-web-server-and-a-reverse-proxy-server]

server name has suspicious symbols
[https://2vup.com/nginx-server-name-has-suspicious/]

could not build server_names_hash, you should increase server_names_hash_buck\
[https://pram.tistory.com/entry/django-nginx-error-%EC%9E%A5%EA%B3%A0%EC%97%90%EB%9F%AC-emerg-could-not-build-the-servernameshash-you-should-increase-servernameshashbucketsize-64]

'AWS' 카테고리의 다른 글

[EC2] EC2 mysql 설정하기 + DBeaver 연결하기  (0) 2023.03.20