EC2 인스턴스에 로컬로 작성한 프로젝트를 배포하는 준비 과정
(== 개인 PC에서 개발한 것과 마찬가지로 EC2 서버에 비슷한 개발환경을 설치하는 과정)
- pem 파일이 있는 폴더로 이동 --> pem 파일을 이용하여 SSH로 EC2에 접속 (
ssh -i [pem파일이름] [SSH서버주소]
--> EC2 서버 접속 완료- 이후 전체 플로우는: miniconda 설치, 패키지 업그레이드, 최소한의 패키지만 설치. 하나씩 환경설정할 것.
- miniconda 설치 스크립트 (각자의 OS에 맞는 것으로) 다운로드 우클릭 후 주소 복사 --> 터미널로 데려와서
wget [복사한주소]
--> 이후ls
시, 미니콘다 설치 완료 확인 가능 (ex.Miniconda3-latest-Linux-x86_64.sh
)chmod +x [Miniconda3-latest-Linux-x86_64.sh]
- 이후 바로
./Miniconda3-latest-Linux-x86_64.sh
실행 시켜서 미니콘다 설치- 나오는 것에 다
yes
- 모두 설치한 후에는
source .bashrc
입력 --> 명령 라인 가장 앞에 (base)가 생김
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gcc
sudo apt-get install libmysqlclient-dev
conda create -n [conda이름] python=3.8
conda activate [conda이름]
git clone [repo주소]
이후ls
시, 잘 클론 되었음.주의할 점은 이 때, 클론된 프로젝트 속의
requirements.txt
를 가상환경에 모두 설치해줘야하는 것.
한 번에 requirements 내용 모두 설치하는 명령어는
pip install -r requirements.txt
이후pip freeze
로 패키지 모두 설치되었는지 확인
퍼블릭 아이피 확인: AWS EC2 접속 후, running중인 EC2 인스턴스 클릭 --> IPv4 퍼블릭 주소 확인 가능
복사하여, settings.py의
ALLOWED_HOSTS
에 붙여넣기
(ex.['*', 'IPv4서버주소', 'IPv4서버주소:8000']
프로젝트의 root directory에 my_settings.py 생성하여,
DATABASES, SECRET_KEY 설정
이 때 DATABASES에 들어가는 디테일은 RDS에 연동된 DB 디테일(ex.
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '--보안--', 'USER': '--보안--', 'PASSWORD': '--보안--', 'HOST': '[SSH주소(RDS엔드포인트)]', 'PORT': '3306', } } SECRET = { 'secret': '--보안--', }
[참고] 로컬환경에서의 RDS 접속 명령어
mysql -u root -h [RDS엔드포인트주소] -p
후 패스워드 입력이후
python manage.py runserver
로 서버 돌려 확인
(혹시 이 때 TimeZone setting error 시, 'Asia/Seoul' 잘 쓰여져 있는지 다시 한 번 확인)
python manage.py runserver 0:8000
을 써야 퍼블릭 아이피 사용하는 것이후 포스트맨으로 다시 한 번 확인
퍼블릭 아이피/[작성한 엔드포인트 주소] 호출하여 확인
여기까지만 해도 호출은 원활하게 이루어지지만,
장고에서의 기본 manage.py runserver
명령어는 단일 스레드로 동작
--> 개발 및 테스트로는 적당하지만, 리퀘스트가 많을 수 있는 운영환경에서는 적합 X
따라서, 멀티쓰레드를 지원하는 웹 애플리케이션 서버 프로그램인 구니콘을 설치하여 배포하는 것이 좋다
구니콘 역시 설치 방법은
pip install gunicorn
구니콘 설치 이후에도 SSH 세션이 끊어져도 서버를 동작시켜주기 위해 nohup이라는 툴을 써서, 구니콘을 백그라운드로 동작시켜주도록 한다.
gunicorn --bind=0.0.0.0:8000 [프로젝트명].wsgi
명령어는 백그라운드로 돌리지 않고 그냥 돌리는 것
nohup gunicorn --bind=0.0.0.0:8000 [프로젝트명].wsgi &
명령어는
장고의 웹 애플리케이션을 지정해주는 역할을 하는 wsgi를 다시 적어 백그라운드로 돌리는 명령어
(&
는 백그라운드로 동작하는 명령)
ps ef | grep python
이 ps 명령어는 구니콘이 잘 실행되는지, PID는 몇인지 알 수 있게 해주는 명령어
이후에는 포스트맨으로 다시 한 번 호출하여 호출이 잘 되는지 확인 필수주의점!
gunicorn을 계속 띄워 두지 말고
포스트맨으로 확인이 모두 끝난 후에는kill [확인한PID번호]
로 구니콘을 종료하도록 한다.이후
nohup gunicorn --bind=0.0.0.0:8000 [프로젝트명].wsgi
명령어 입력 시,
구니콘이 정상종료된 것을 확인할 수 있다.