반응형
2021.09.10 - [웹 & 앱 개발] - [AWS] AWS로 서버 배포(Deployment) (1) : EC2 인스턴스 생성
[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에 접근할 수 있도록 설정하는 것도 잊지 말자.
반응형
'Infra & Cloud > AWS (아마존 웹 서비스)' 카테고리의 다른 글
[AWS] AWS CloudFormation이란? (클라우드 리소스 라이프사이클 관리도구) (0) | 2022.08.09 |
---|---|
[AWS] AWS로 서버 배포(Deployment) (3) : EC2, Nginx와 uWSGI (0) | 2021.09.10 |
[AWS] AWS로 서버 배포(Deployment) (1) : EC2 인스턴스 생성 (0) | 2021.09.10 |
댓글