본문 바로가기
Infra & Cloud/AWS (아마존 웹 서비스)

[AWS] AWS로 서버 배포(Deployment) (2) : EC2 인스턴스 환경설정 (Git 설치, Python 가상환경, RDS 연동)

by newstellar 2021. 9. 10.
반응형

2021.09.10 - [웹 & 앱 개발] - [AWS] AWS로 서버 배포(Deployment) (1) : EC2 인스턴스 생성

 

[AWS] AWS로 서버 배포(Deployment) (1) : EC2 인스턴스 생성

[AWS] 1. EC2 입문 : 인스턴스 생성 0. AWS 가입하기 AWS는 가입 후 1년까지 매우 낮은 수준의 가상 컴퓨터를 무료로 제공하는 프리티어 (Free Tier) 서비스를 제공하고 있다. (단, 가입 시 1$가 소비되니 넉

newstellar.tistory.com


 

[AWS] 2. EC2 입문 : 인스턴스 환경설정 (Git 설치, Python 가상환경, RDS 연동)

1. git 설치 및 Repository clone

  • terminal에서 가장 많이 쓰는 명령어였던 git조차 설치되어 있지 않은 깨끗한 컴퓨터가 눈 앞에 있습니다. cd, ls 등의 명령어를 통해 해당 컴퓨터를 털어봅시다.

  • sudo yum install git 명령어로 git을 설치합니다.

  • git clone {Your git clone https 주소} 명령어를 통해 remote repository를 EC2에 다운받도록 합시다.

  • 물론 github ID, Password를 입력하라는 문구가 뜹니다.

  • 설치가 정상적으로 완료되었다면 git branch 등으로 브랜치를 확인해봅시다.

 

 


2. Python 가상환경 설치

  • EC2에서 python --version으로 파이썬 버젼을 확인해보면 2.7.18. 버젼 파이썬이 존재하는데, 이는 우리가 인스턴스 생성 시에 설치한 환경이 갖고 있는 기본 설정값이다.

  • 따라서 Django 실행 시 정해둔 python 버젼을 다운받아야 하는데, 이를 편리하게 해주는 pyenv를 EC2에서도 이용한다.

  • 아래의 명령어를 차례대로 입력하자. (pyenv를 EC2에 설치하는 과정)
sudo yum install -y zlib-devel bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel curl git
curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
  • 이제 pyenv가 설치되었고, pyenv install {python version}으로 Django 버젼에 맞는 (주로 requirements.txt로 관리) 파이썬 버젼을 설치한다.

  • BUILD FAILED (Amazon Linux 2 using python-build 1.2.21) 문구가 뜰텐데 이는 AMAZON LINUX 인스턴스에서 소프트웨어 컴파일이 준비되어 있지 않기 때문이다. (참조 : Linux 인스턴스용 사용설명서)

  • 다시 아래의 명령어로 gcc 컴파일러, 그리고 이외에 필수적으로 요구되는 라이브러리를 설치하자.

  • > sudo yum install gcc > sudo yum install libffi-devel

  • 이제 pyenv install {python version}을 다시 입력하면 이제 BUILD FAILED 따위의 메시지가 뜨지 않고 다소 긴 시간을 소비해 해당 버젼의 파이썬을 설치하게 된다.

  • 마지막으로 pyenv virtualenv {python version} {가상환경 이름}을 통해 설치한 파이썬 버젼을 이용하는 가상환경을 설치할 수 있다.

  • pyenv activate {가상환경 이름}으로 가상환경을 활성화시킨 후 python 버젼을 체크해보자! 만약 그대로 2.7.18이 뜬다면 새로운 Terminal에서 실행시켜보자.

 


3. pip 패키지 설치

  • 이제 일련의 과정을 거쳐 어느 정도 환경 설정이 끝난 새로운 컴퓨터가 우리 앞에 주어졌다. requirements.txt에 명시된 Django에 필요한 각종 패키지를 다운받도록 하자.
pyenv activate {가상환경 이름}
python --version # 원하는 파이썬 버젼이어야 함.
pip install -r requirements.txt
sudo yum install mysql

 

  • 이때 mysqlclient 관련 에러가 터질 수 있는데 mysql-devel을 설치함으로써 해결할 수 있다.

sudo yum install -y mysql-devel
pip install -r requirements.txt
  • 이제 Django를 위한 사전준비가 끝났다!

 

  • 만약 MySQL이 아니라 Postgresql을 이용하고자 한다면 이 링크를 참고하자.

 


4. RDS 연동

  • 앞서 pip를 통해 Django, Djangorestframework, mysqlclient 등 필요한 모든 패키지를 설치했다. 그렇다면 localhost에서 항상 실행시키는 명령어인 python manage.py runserver가 동작하는지 살펴보자.

 

  • 틀림 없이 아래와 같은 에러가 나타날 것이다.
django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)")

 

  • 위 에러는 말 그대로 MySQL을 연결할 수 없다는 뜻인데, user가 없을 때나 user의 권한이 없을 때, 그리고 DB 자체가 존재하지 않을 때 이런 메시지가 나타난다. 지금까지 DB를 생성한 기억이 있는지...? 즉, DB 자체가 없는 상황인 것이다.

  • 다시 AWS로 접속하여 RDS 서비스에서 데이터베이스를 생성하자. 데이터베이스 종류로는 MySQL을, 그리고 프리 티어기 때문에 당연히 템플릿으로 프리 티어를 선택했다.

  • rds가 생성되어 시작되면 엔드포인트가 생성되는데, 이것을 settings.py의 DATABASES의 HOST로서 설정해주면 된다.

  • HOST는 대략 다음의 이름을 갖는다.
    {DB name}.cf1b7zf4o8nc.ap-northeast-2.rds.amazonaws.com

  • 그렇다면 이 HOST를 settings.py에 잘 plug-in 해주면 해결될까? 그것도 아니다. 왜냐하면 localhost에는 아직 AWS RDS와 연결한 적이 없고, Database 및 User도 생성하기 전이기 때문이다. 따라서 RDS 설정 시 생성한 master user 대신 MySQL Workbench, DataGrip, 또는 CLI를 사용하여 Database, User 생성 및 권한을 부여하도록 하자. 한 가지 주의 사항은 user 생성 시 'localhost'로의 접근이 아닌 '%'로 외부에서도 접근가능하게 만든다.

  • 위 작업은 이전에 다룬 Database 게시글을 참조하면 된다. EC2 인바운드 규칙과 더불어 RDS 보안그룹 인바운드 규칙에서도 나의 현재 IP (Workbench, DataGrip 등 사용가능하게) 및 EC2가 RDS에 접근할 수 있도록 설정하는 것도 잊지 말자.

 


2021.09.10 - [클라우드 컴퓨팅 (Cloud Computing)/AWS (아마존 웹 서비스)] - [AWS] AWS로 서버 배포(Deployment) (3) : EC2, Nginx와 uWSGI

 

[AWS] AWS로 서버 배포(Deployment) (3) : EC2, Nginx와 uWSGI

2021.09.10 - [웹 & 앱 개발] - [AWS] AWS로 서버 배포(Deployment) (2) : EC2 인스턴스 환경설정 (Git 설치, Python 가상환경, RDS 연동) [AWS] AWS로 서버 배포(Deployment) (2) : EC2 인스턴스 환경설정 (Git..

newstellar.tistory.com

 

반응형

댓글