서버에 프로젝트 배포

hyeyul·2020년 8월 27일
3

AWS 배포

목록 보기
2/2

배포 과정

  1. pem key 접근이 가능하도록 권한 설정
$ chmod 400 key이름.pem
  1. 서버 접속
$ ssh -i key이름.pem ubuntu@ip주소
  1. miniconda 설치
$ wget https://repo.anaconda.com/miniconda/Miniconda-latest_Linux-x86_64.sh

chmod +x Miniconda-latest-Linux-x86.sh 		#미니콘다 실행권한 부여

$ ./Miniconda-latest-Linux-x86_64.sh		# 미니콘다 설치파일 실행

# yes 눌러주기
  1. 설치 후 환경 변수 설정
source .bashrc 
  1. 패키지 정보 업데이트
sudo apt-get update
  1. 패키지 정보 업그레이드
sudo apt-get upgrade
  1. gcc 설치
    *GCC(GNU C Compiler)
sudo apt-get install gcc
  1. mysqlclient 설치
sudo apt-get install libmysqlclient-dev
  1. 가상환경 만들기
conda create -n wemowa python=3.8
  1. 가상환경 활성화
conda activate wemowa
  1. 내 코드 가상환경에 올리기
git clone <git 레파지토리 주소>
  1. 필요한 패키지 확인 - 여기 설치되어 있는 것들을 다 설치하여야 한다.
cat requirment.txt
pip install requirements.txt
  1. pip freeze 를 통해 확인

  2. settings.py 에 가서 allowed host ec2의 서버의 퍼블릭 아이피로 수정

  3. my_settings.py 생성후 내 로컬에 있는 my_settings.py를 복사

DATABASES = {
    'default' : {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'wemowa',  # aws rds에 올렸던 데이터베이스 이름
        'USER': 'root',
        'PASSWORD': '', # 비밀번호
        'HOST': '',	   # rds의 엔드포인트 주소
        'PORT': '3306',
    }
}

SECRET_KEY = {
        'SECRET_KEY':'' # 숨기기,
}
  1. 서버 열기 - Postman으로 서버 돌아가는지 확인하기
python manage.p runserver 0:8000

장고에서 manage runserver 명령은 단일 스레드로 동작하여 개발 및 테스트 환경에서는 적절하지만 request가 많을 수 있는 운영 환경에서는 적절하지 않다. 그러므로 멀티스레드를 지원하는 웹 애플리케이션 서버 프로그램인 gunicorn을 설치하여 배포하려 한다.

gunicorn

gunicorn은 python wsgi http server이다. unix에서 사용하기 위해 만들어졌다.
즉, manage.py runserver를 대신하여 실행할 wsgi 서버이다. gunicorn은 상대적으로 빠르고 가볍고 사용이 용이하다.

  • WSGI(Web Server Gateway Interface)
    : Web서버가 받은 호출을 파이썬 어플리케이션에게 전달하고 응답받기 위한 호출조약.
  • WSGI 미들웨어
    : WSGI 호출조약의 구현체라고 볼 수 있다.
    더 자세한 내용은 이전 포스팅에석 볼 수 있다. wsgi란?

gunicorn 의 장점

  • Works with Paster,Django and WSGI out of the box.
  • Worker process management is automatic.
  • Many worker configurations can be used.
  • A variety of server hooks.
  • 파이썬에서 사용이 쉽다.

1. gunicorn 설치

pip install gunicorn

2. gunicorn을 백그라운드로 동작 - nohup 사용

nohup : 로그아웃 하여 터미널을 빠져나가도 실행중인 프로그램이 종료되지 않고 계속 수행될수 있게 하는 명령

명령어 & :여기서 '&'는 백그라운드로 실행하라는 뜻이다.
그런데, 이 방법은 실행한 사용자가 로그아웃하면 프로그램도 함께 종료된다.
이럴때는 nohup 이란 명령어를 사용하면 된다.

nohup gunicorn --bind=0.0.0.0:8000 app_name.wsgi &

실행을 시키고 제대로 실행이 됐는지 확인 하는 방법은 아래와 같다.

ps -ef | grep python

root       769     1  0 Jun04 ?        00:00:01 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root       832     1  0 Jun04 ?        00:00:00 /usr/bin/python3 /usr/share/unattended-upgrades/unattended-upgrade-shutdown --wait-for-signal
ubuntu    7635     1  0 05:07 ?        00:00:00 /home/ubuntu/miniconda3/envs/wemowa/bin/python /home/ubuntu/miniconda3/envs/wemowa/bin/gunicorn --bind=0.0.0.0:8000 wemowa_main.wsgi
ubuntu    7652  7635  0 05:12 ?        00:00:00 /home/ubuntu/miniconda3/envs/wemowa/bin/python /home/ubuntu/miniconda3/envs/wemowa/bin/gunicorn --bind=0.0.0.0:8000 wemowa_main.wsgi
ubuntu    7770  7736  0 05:34 pts/0    00:00:00 grep --color=auto python

postman에서 제대로 돌아가는지 다시한번 확인!

서버를 종료 시킬 때는

kill pid번호	# 명령으로 해당 프로세스 종료

RDS

파라미터 그룹

  • character_set -> utfmb4로 바꾸기
  • collation -> utfmb4 인지 확인
    -> 데이터베이스에 데이터 저장할 때 깨지는 것 방지

데이터베이스 생성

  • mysql
  • 프리티어
  • 데이터베이스 인스턴스 이름
    - 프로젝트 할때마다 rds 생성하는 것 아님
  • 커맨드 창에서 mysql -h < database host 주소 > -u root -p
  • 비밀번호 입력 후 mysql 접속
  • 로컬 데이터베이스에서 데이터 백업 후 덤프하기
    - mysql -h < database hoset address > -u root -p database명 > 백업파일명.sql

1개의 댓글

comment-user-thumbnail
2020년 8월 29일

좋은 글 감사합니다 잘 보고 갑니다~

답글 달기