본문 바로가기
클라우드/aws

aws ec2사용하기 2편-ec2로 django 배포해보기

by kimjunhee9339 2024. 5. 17.

django는 파이썬으로 웹서비스를 제작할 수 있는 플랫폼이다. 주로 백엔드 서비스를 만들때 사용하고 프론트엔드로도 활용 가능하긴 하다.

django icon

0. django project 생성하기

이 단계는 프로젝트가 있다면 넘어가도 좋다.

django-admin startproject mysite

mysite자리에 원하는 타이틀을 입력하고 다음과 같이 입력하면 된다.

 

이 후 프로젝트의 settings.py 파일을 다음과 같이 수정해야한다.

DEBUG=False #말 그대로 디버깅(컴파일)할때만 True로 바꾸는 것이다.
'''
...
'''
#STATIC_URL="static/"있는 곳 밑에 추가
STATIC_ROOT=BASE_DIR / "static"
MEDIA_URL = "media/"
MEDIA_ROOT = BASE_DIR / "media"

이후 터미널에서 requirements.txt를 추가한다.

python freeze > requirements.txt

 

 

1. 터미널 접속

다음과 같이 입력

sudo apt update
sudo apt upgrade -y
sudo apt install -y python3-pip python3-dev python3-venv

 

2. home폴더에 ssh 연결로 git clone을 해준다. 

ssh-keygen -t rsa -b 4096
한뒤 엔터 3번

cat ${public key 위치}

 

 

출력 내용 복사후 github 계정 settings에 들어가서 ssh and GPG keys 로 들어가 ssh keys에 key를 추가한다.

git clone ${프로젝트ssh주소}

하고 yes하면 클론 성공

 

3.  python package 설치

다음과 같이 입력

cd ${포로젝트폴더명}
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

 

4. 보안 설정 추가

ec2-인스턴스-보안-보안 그룹 아래의 링크-인바운드 규칙 편집에서 8000포트를 추가 해준다. (규칙 추가-8000포트 추가-규칙 저장)

8000포트를 추가한 결과

 

5. css 설정 후 웹사이트 접속 테스트

python manage.py collectstatic 
python manage.py runserver 0.0.0.0:8000 
안되면
python3 manage.py collectstatic 
python3 manage.py runserver 0.0.0.0:8000

 

이 후 공용 ip주소:8000/<추가한 페이지>로 들어가서 주소에 접속이 되는지 확인해본다.

잘되면 터미널에서 Ctrl+c를 눌러 웹사이트를 종료한다.

 

6. gunicorn 설치 후 설정

pip install gunicorn
sudo vim /etc/systemd/system/gunicorn.service

vm으로 들어왔다면...

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/[루트폴더이름]
ExecStart=/home/ubuntu/[루트폴더이름]/venv/bin/gunicorn --access-logfile -  --workers 3 --bind unix:/home/ubuntu/[루트폴더이름]/[프로젝트이름].sock [프로젝트이름].wsgi:application

[Install]
WantedBy=multi-user.target
입력 후 :wq

이 후 터미널에서 다음과 같이 입력해준다.

sudo systemctl enable gunicorn
sudo systemctl start gunicorn
sudo systemctl status gunicorn
후에 active unicorn 뜨면 잘 되는 거임

 

7. nginx 설치 후 설정

다음과 같이 입력

sudo apt install -y nginx
sudo vim /etc/nginx/sites-available/[프로젝트이름]

vim으로 들어왔다면

server {
    listen 80;
    server_name [여러분의주소];
    
    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/[루트폴더이름]/[프로젝트이름].sock;
    }
    
    location /static {
        root /home/ubuntu/[루트폴더이름]/;
    }
    
    location /media {
        root /home/ubuntu/[루트폴더이름]/;
    }
}
입력 후 :wq

이 후 다음과 같이 입력

sudo ln -s /etc/nginx/sites-available/[파일이름(위에서 프로젝트이름으로 설정함)] /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
sudo systemctl status nginx

이후 active인지 확인

 

이제 사이트에 다시 접속해보고 502 에러가 발생한다면 다음과 같이 입력해준다.

chmod 755 ~
chmod 755 ~/[루트폴더이름]

이제 사이트에 다시 접속해보면 잘되는 것을 확인할 수 있다.

 

이로써 ec2로 django 프로젝트 배포해보기를 마치겠다.