TIL(Today I Learned)

5월 23일 TIL - Django to EC2(1)

Hyerin P. 2023. 5. 23. 20:58

▷ 오늘의 일정

09:10 ~ 10:10 aws 배포 강의 듣기
12:00 ~ 13:00 점 심 식 사
13:00 ~ 16:00 딥러닝 강의 듣기
16:00 ~ 18:00 배포 연습
18:00 ~ 19:00 저 녁 식 사
19:00 ~ 20:40 하루 공부 내용 정리 및 TIL
20:40 ~ 21:00 하루 공부 내용 공유

 

▷ 오늘의 배움

  • 딥러닝 모델이란?
    • 문제는 입력(Input)과 출력(Output)으로 정의됩니다. 
    • 입력과 출력을 결정하는 '알 수 없는 기계'가 바로 딥러닝 모델!
  • anaconda로 가상환경 설정해주기
    • 딥러닝 구현을 위해 가상환경 생성 후 tensflow, opencv-python, dlib 설치!
  • 이미지 처리
    • 이미지 불러오기 = cv2.imread('이미지명.확장자')
    • 이미지.shape = > (높이, 너비, 채널-'BGR 빛의 삼원색')
    • !컴퓨터는 숫자로 이미지를 표현할 수 있다!

▷ 오늘의 시도

❗️EC2 서버 배포해보자❗️

 

1. 인스턴스 생성하기

2. 인스턴스 connect 클릭

3. 우분투 패키지 업그레이드 & 기본 세팅

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

4. 깃 허브에 있는 프로젝트 클론하기

5. 로컬에서 첫 클론할 때 세팅하는 것처럼 동일하게 세팅해주기

# 가상환경 세팅
python3 -m venv venv
# 가상환경 실행
source venv/bin/activate
# 설치목록 설치하기
pip install -r requirements.txt
# 시크릿키 생성하기(시크릿키 생성을 해야하는 걸 몰라서 당황했다;;)
vim .env

6. security그룹에서 8000포트 추가해주기

7. settings.py 수정 (터미널에서 vim을 이용해 파일을 열어서 수정해 주거나, 직접 파일 수정 후 git pull)

ALLOWED_HOSTS = [
"localhost",
"인스턴스의 Public IPv4 address입력"
]

 

💬 runserver로는 배포를 하면 안된다. 이를 대신해 웹서버(ngnix)와 연결시켜 줄 수 있는 WSGI(gunicorn)을 사용해주자.

 8. gunicorn 설정

# gunicorn 설치
pip install gunicorn

#gunicorn 세팅
sudo vim /etc/systemd/system/gunicorn.service
[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
# 인스턴스 시작시 자동시작
sudo systemctl enable gunicorn
# 지금 시작
sudo systemctl start gunicorn
# 상태 확인 => active(running)이면 잘 돌아가고있다!
sudo systemctl status gunicorn

 

 9. ngnix 설정

# nginx 설치
sudo apt install nginx

# nginx 설정
sudo vim /etc/nginx/sites-available/{프로젝트이름}
server {
    listen 80; # nginx가 80번 포트에서 http 요청을 수신
    server_name your_domain_or_ip; # 실제 도메인 이름이나 주소 입력 

	# 장고 애플리케이션에 대한 요청 처리
    location / {
        include proxy_params;
        # 요청을 지정된 Unix 소켓이나 TCP 주소로 전달. Django 애플리케이션이 실행 중인 위치를 지정.
        proxy_pass http://unix:/home/ubuntu/{루트폴더이름}/{프로젝트이름}.sock;
    }
    
    # 장고가 정적 파일을 처리하지 않고 ngnix가 직접 처리
    location /static {
            root /home/ubuntu/{루트폴더이름}/;
    }

    location /media {
            root /home/ubuntu/{루트폴더이름}/;
    }

}

# location 블록을 구성하여 다른 URL 경로에 대한 요청을 처리하고 적절한 내용을 제공.

위에 만들어 둔 파일을 실제 작동할 수 있도록 복사해서 옮겨 주기

sudo ln -s /etc/nginx/sites-available/{프로젝트이름} /etc/nginx/sites-enabled/
# 잘 설치됐는지 확인
sudo nginx -t
# nginx 새로 시작 후 상태 확인
sudo systemctl restart nginx
sudo systemctl status nginx

❗️❗️502 Bad Gateway❗️❗️

# 에러 확인
tail -f /var/log/nginx/error.log

-> 권한 오류가 발생

# 권한확인
namei -nom /home/ubuntu/{루트폴더이름}/{프로젝트이름}.sock

# 권한 부여하기
chmod 755 ~/{루트폴더이름}/
chmod 755 ~

*css가 안될 때

python manage.py collectstatic

**

# 어드민 페이지 확인
python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser

👏장고랑 ec2랑 연결 성공👏

 

,,이 아냐... CSRF 검증에 실패!!!! 😨 

 

후... 내일 붙어보자! 아자자

 

 

 

*시크릿키 도움주신 분: https://jmpop.tistory.com/86