사전 진행 사항 - ec2 ubuntu 22.04 LTS t2.micro 생성후 진입상태
$ sudo apt update
$ sudo apt install python3-pip python3-dev nginx
Python 가상 환경 만들기
$ sudo pip3 install virtualenv
$ sudo apt install python3-virtualenv
깃허브에서 프로젝트 클론해오기
(Django 애플리케이션을 호스팅할 프로젝트 디렉터리를 만들고)
해당 디렉터리 내에 가상 환경 제작
$ git clone https://github.com/rashiddaha/blogprojectdrf.git
$ cd ~/blogprojectdrf
$ then
$ virtualenv env
env 가상 환경이 생성됩니다. 가상 환경을 활성화해 보겠습니다.
$ source env/bin/activate
$ pip install -r requirements.txt
Django 및 gunicorn 설치
$ pip install django gunicorn
가상 환경에 Django와 gunicorn이 설치되었습니다.
Django 프로젝트 설정
마이그레이션 실행
$ python manage.py makemigrations
$ python manage.py migrate
$ python manage.py collectstatic
가져오기 정적 파일에 관한 사항입니다 (필요시 수행)
. seeting.py 파일에 추가해야하는 사항입니다.
설정 파일의 Installed_apps 에 ' whitenoise.runserver_nostatic '줄을 추가합니다 .
설정 파일의 MiddleWare에 'whitenoise.middleware.WhiteNoiseMiddleware'를 추가합니다.
또한 블로그/URL 하단에 다음 줄을 추가하세요 blog/urls. py file.
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root = settings.STATIC_URL)
블로그/URL 상단에 추가 blog/urls. py file.
from django.conf import settings # new
from django.conf.urls.static import static #new
whitenoise 설치
Django 에서 DEBUG = False시기존 static 파일들이 모두 경로를 못찾게 된다. WhiteNoise 를 설치해 문제를 해결 가능.
WhiteNoise는 static파일들을 collectstatics 명령수행시 지정경로에 파일들을 모아주는 역할을 한다.
$ pip install whitenoise
gunicorn 구성
가상 환경을 비활성화합니다.
$ deactivate
gunicorn용 시스템 소켓 파일을 만들기
$ sudo vim /etc/systemd/system/gunicorn.socket
해당 내용을 입력.
[Unit]
Description=gunicorn socket
[Socket]
ListenStream=/run/gunicorn.sock
[Install]
WantedBy=sockets.target
gunicorn용 서비스 파일을 생성
$ sudo vim /etc/systemd/system/gunicorn.service
해당 내용을 입력.
[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/blogprojectdrf
ExecStart=/home/ubuntu/blogprojectdrf/env/bin/gunicorn \
--access-logfile - \
--workers 3 \
--bind unix:/run/gunicorn.sock \
blog.wsgi:application
[Install]
WantedBy=multi-user.target
Gunicorn 소켓 시작및 활성화
$ sudo systemctl start gunicorn.socket
$ sudo systemctl enable gunicorn.socket
cd /etc/nginx/sites-enabled/ 이동후 default 삭제 sudo rm -r default
Nginx 역방향 프록시로 구성
Nginx에 대한 구성 파일을 만듭니다.
$ sudo vim /etc/nginx/sites-available/blog
해당 내용을 입력. 필요에 따라 location /static / < location /staticfiles/로 변경
server {
listen 80 default_server;
server_name _;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /home/ubuntu/blogprojectdrf;
}
location / {
include proxy_params;
proxy_pass http://unix:/run/gunicorn.sock;
}
}
작성한 Nginx 구성을 활성화
$ sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/
정적 파일을 로드가 필요할시 명령어.
$ sudo gpasswd -a www-data 사용자 이름
```ubuntu 환경임으로 ```
$ sudo gpasswd -a www-data ubuntu
nginx를 다시 시작, 변경 사항 적용
$ sudo systemctl restart nginx
$ sudo service gunicorn restart
$ sudo service nginx restart
추가적으로 오류가 있는 경우
오류 로그를 확인하려면
$ sudo tail -f /var/log/nginx/error.log
nginx가 잘 작동하는지 확인하려면
$ sudo systemctl status nginx
마지막!
$ sudo fuser -k 8000/tcp
$ sudo lsof -t -i tcp:8000 | xargs kill -9. # to kill termianl
# https://amalgjose.com/2020/02/27/gunicorn-connection-in-use-0-0-0-0-8000/
끝!