-
TIL 2023.05.12내일배움캠프 2023. 5. 12. 19:44
장고 프로젝트 EC2로 배포하기!
먼저 EC2 인스턴스를 생성해주자.
후에 ssh 연결을 하고
sudo apt update sudo apt upgrade
입력하여 패키지들을 업데이트를 해주자
sudo apt install python3-pip python3-dev python3-venv
파이썬 관련 패키지들도 설치해주고
장고의 settings.py를 수정해줘야 한다.
DEBUG = False STATIC_URL = "static/" STATIC_ROOT = BASE_DIR / "static" MEDIA_URL = "media/" MEDIA_ROOT = BASE_DIR / "media" ALLOWED_HOSTS = [ 'EC2 퍼블릭 ip' ]
ALLOWED_HOSTS 에는 본인 EC2 퍼블릭 ip를 넣어주자
깃허브로 푸시하고
EC2에서 클론할 준비를 해보자
ssh-keygen -t rsa -b 4096
ssh 키젠을 생성하자
cat /home/ubuntu/.ssh/id_rsa.pub
입력하면 ssh-rsa 로 시작하는 긴 문자들이 보일 것이다. 전부 복사해서
깃허브 Settings -> SSH and GPG keys -> New SSH key
Key 란에 붙여넣고 Add SSH key 눌러주면 완료
그 후엔 깃허브 레포지토리 ssh 주소로 클론이 가능하다.
클론 후엔 가상환경 세팅해주고
의존성 패키지 설치해주고
장고 마이그레이션도 해주자
python manage.py collectstatic
어드민 페이지 관련해서 css 파일도 모아주기 위해 위 코드를 입력하자
Gunicorn과 Nginx
- gunicorn:
- gunicorn은 Django와 같은 웹 애플리케이션을 실행하는 서버입니다.
- 여러 개의 동시 요청을 처리하기 위해 여러 프로세스를 사용합니다.
- 안정적인 실행과 빠른 응답 속도를 제공합니다.
- 주로 프로덕션 환경에서 Django 애플리케이션을 실행하는 데 사용됩니다.
- Nginx:
- Nginx는 웹 서버로, 정적 파일 서비스와 프록시 서버 기능을 수행합니다.
- 정적 파일 서비스는 웹 사이트의 이미지, CSS, JavaScript와 같은 정적 파일을 빠르게 제공합니다.
- 프록시 서버는 클라이언트 요청을 받아 애플리케이션 서버(예: gunicorn)로 전달합니다.
- 또한 로드 밸런싱과 SSL/TLS 암호화와 같은 기능도 제공합니다.
- Nginx는 보안, 성능 및 부하 분산을 위해 주로 프로덕션 환경에서 사용됩니다.
간단히 말하자면, gunicorn은 Django 애플리케이션을 실행하는 서버이고, Nginx는 정적 파일 서비스와 프록시 서버 기능을 가진 웹 서버입니다. 프로덕션 환경에서는 Nginx를 앞단에 위치시켜 정적 파일 제공 및 로드 밸런싱을 담당하고, Nginx는 요청을 애플리케이션 서버(gunicorn)로 전달하여 동적인 처리를 수행합니다. 이렇게 함으로써 보안, 성능 및 확장성을 향상시킬 수 있습니다.
라고 권기현 튜터님이 알려주셨다.
Gunicorn 세팅
먼저 설치부터
pip install 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 // 상태 sudo systemctl status gunicorn
Nginx 세팅
먼저 설치부터
sudo apt install nginx
sudo vim /etc/nginx/sites-available/drf_project
server { listen 80; server_name your_domain_or_ip; location / { include proxy_params; proxy_pass http://unix:/home/ubuntu/{루트폴더이름}/{프로젝트이름}.sock; } location /static { root /home/ubuntu/{루트폴더이름}/; } location /media { root /home/ubuntu/{루트폴더이름}/; } }
마찬가지로 해주자
- listen 80;: Nginx가 80번 포트에서 HTTP 요청을 수신합니다.
- server_name your_domain_or_ip;: 실제 도메인 이름이나 IP 주소로 **your_domain_or_ip**을 대체하세요.
- location / 블록은 Django 애플리케이션에 대한 요청을 처리합니다.
- **include proxy_params;**는 필요한 프록시 매개변수를 포함합니다.
- **proxy_pass <http://unix>:/path/to/your/django/project/myproject.sock;**는 요청을 지정된 Unix 소켓이나 TCP 주소로 전달합니다. 여기서 Django 애플리케이션이 실행 중인 위치를 지정하세요.
- location /static 블록은 정적 파일에 대한 요청을 처리합니다.
- **root /home/ubuntu/{루트폴더이름}/;**는 정적 파일이 위치한 루트 디렉토리를 지정합니다. **{루트폴더이름}**을 실제 루트 폴더 이름으로 대체하세요.
- 이러한 location 블록을 구성함으로써 Nginx는 다른 URL 경로에 대한 요청을 처리하고 적절한 내용을 제공합니다. 루트 URL ("/")에 대한 요청은 Django 애플리케이션으로 전달되며, "/static" 및 "/media"에 대한 요청은 지정된 디렉토리에서 제공됩니다.
라고 기현튜터님이 말씀하십니다.
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
예비로 작성한 파일을 실제 작동할 곳으로 옮겨주기 윈도우의 바로가기랑 비슷함
sudo nginx -t
nginx 문법 검사
sudo systemctl restart nginx sudo systemctl status nginx
권한 문제 발생시
tail -f /var/log/nginx/error.log
namei -nom /home/ubuntu/{루트폴더이름}/{프로젝트이름}.sock
chmod 755 ~/django_deploy/ chmod 755 ~
chmod는 리눅스 및 유닉스 시스템에서 파일 및 디렉토리의 퍼미션(권한)을 변경하는 명령입니다. "chmod"은 "change mode"의 약자입니다. chmod 명령은 파일 또는 디렉토리의 소유자, 그룹 및 기타 사용자에 대한 읽기, 쓰기 및 실행 권한을 설정하거나 변경합니다.
chmod 명령은 숫자 모드 또는 기호 모드를 사용하여 권한을 설정합니다.
숫자 모드: 숫자 모드는 퍼미션을 3비트 단위로 표현하며, 각 비트는 읽기(4), 쓰기(2) 및 실행(1) 권한을 나타냅니다. 이러한 권한의 조합으로 3비트 숫자를 생성하여 퍼미션을 설정합니다.
- 사용법: chmod [퍼미션 숫자] [파일 또는 디렉토리]
예를 들어, **chmod 755 filename**은 파일 **filename**에 대해 소유자에게 읽기, 쓰기, 실행 권한(7), 그룹 및 기타 사용자에게 읽기 및 실행 권한(5)을 부여합니다.
라고 또 기현튜터님이 말씀하십니다.
후에 로드밸런서 연결 리스너 설정 -> Route 53 a name alias 연동
으로 도메인과 https 까지 완료
어드민 페이지 로그인 안되는 문제는 아직 해결하지 못했다.
'내일배움캠프' 카테고리의 다른 글
TIL 2023.05.15 (0) 2023.05.15 WIL 내일배움캠프 9주차 (0) 2023.05.12 TIL 2023.05.11 (0) 2023.05.11 TIL 2023.05.10 (0) 2023.05.10 TIL 2023.05.09 (6) 2023.05.09 - gunicorn: