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