아마존 웹서비스 EC2 리눅스 서버에 django와 postgresql을 설치하고 연동하는 과정을 정리한다. 이미 아마존 리눅스를 운영체제로 하는 EC2 인스턴스를 할당 받았고, ssh를 통해 접속할 수 있다는 가정 하에 시작한다. python 3.5버젼, postgresql 9.5 버젼을 사용할 것이다.

django에 대한 내용이 주가 아니기 때문에, EC2 인스턴스에 올리기 위한 django 프로젝트는 이미 다 준비가 되어있으며, 그 소스코드를 github 저장소를 이용해 간단히 clone한다고 가정하겠다.

EC2 인스턴스에 이것 저것 설치하기

아마존 리눅스는 yum이라는 패키지 매니저를 제공하므로 이를 통해 python와 postgresql을 설치한다.


# EC2 기본 계정
$ sudo yum install python35 python35-devel
$ sudo yum install gcc postgresql95 postgresql95-server postgres95-devel

python 가상 환경을 사용하기 위해, 덤으로 python이 잘 설치되었는지 확인할 겸 다음과 같이 설치한다.


$ python35 -m pip install virtualenv

또 postgresql 서버가 잘 설치되었는지 아래 명령을 통해 확인한다.


$ sudo service postgresql95 initdb
$ sudo service postgresql95 start

두 명령 모두 OK 사인이 뜬다면 정상적으로 설치된 것이다.

그럼 이제 postgresql의 여러 설정을 맞춰놓자. 그러기 위해 우선 postgresql 설치와 함께 기본으로 따라오는 계정 postgres을 통해 psql 터미널을 열어야 한다.


$ sudo su - postgres
# 터미널이 바뀔 것이다
> psql

이제 psql 콘솔에 도착했다. postgresql의 기본 사용자인 postgres에 비밀번호를 새로 설정하자.


# psql 콘솔
- ALTER USER postgres WITH PASSWORD 'MY_COMPLEX_PASSWORD';

그리고 django 프로젝트가 연결할 데이터베이스를 생성한다. 그리고 EC2 메인 터미널로 나가자.


#psql 콘솔
- CREATE DATABASE mydb WITH OWNER postgres;
- \l # 방금 생성된 데이터베이스를 확인할 수 있다.
- \q # psql 콘솔을 나간다.

# EC2: postgres 계정
> exit # 기본 계정으로 나간다.

마지막으로 해야 할 postgresql 설정은 접근 권한을 주는 것이다. 관리자 권한을 가지고 pg_hba.conf 파일을 수정해야 한다.


# EC2: 기본 계정
$ sudo su
# 관리자 권한
> cd /var/lib/pgsql95/data
> vim pg_hba.conf

이제 아주 훌륭한 vim 텍스트 편집기가 뜰 것이다. 이제 다음과 같이 파일 내용을 바꾸고 저장하자.

TYPE        DATABASE        USER        ADDRESS        METHOD
=============================================================

# local
local       all             all                        trust

# ip v4
host        all             postgres    127.0.0.1/32   md5

vim을 잘 모르는 분들을 위한 빠르고 부정확한 팁:

  • 처음으로 vim 창이 뜨면 아무 키나 누르지 말자. a 키를 누름으로 수정 모드가 되며 텍스트 커서가 나오고, 수정할 수 있다.
  • 수정을 다 했다면, esc를 눌러서 다시 명령어 모드로 돌아간다.
  • :wq를 입력하고 엔터를 치면 저장 후 종료가 되며 터미널로 돌아간다. :q 는 저장하지 않고 그냥 종료

EC2에 django 프로젝트 설치

이제 EC2 쪽에서의 준비는 다 끝났다. 이제 github에서 준비해놓은 django 프로젝트를 가져오자. 당신이 준비해 놓은 django 프로젝트는EC2에서 설정해 놓은 postgres의 비밀번호를 맞게 설정해 놓아야 하고, 가상 환경을 제외하는 .gitignore 파일이 있으며, pip의 손쉬운 설치를 위한 requirements.txt가 준비되어 있다고 가정한다. 가상 환경을 제외하고 requirements.txt 파일만 준비함으로써 저장소의 용량을 크게 줄일 수 있다.

이제 다시 EC2 콘솔에 접속해서 github을 통해 django 프로젝트를 가져오자, 물론 가상 환경 위에서.


# EC2: 기본 계정
# 적당한 위치에
$ git clone https://github.com/mygithubaccount/myproject.git
$ cd myproject
$ python3 -m virtualenv .venv # python 3.5 가상환경을 시작하기 위해서
$ source .venv/bin/activate # (.venv) 가상 환경 시작
(.venv) $ pip install -r requirements.txt

github쪽 django 프로젝트가 실수 없이 잘 준비되어 있다면, 이제 모든 것이 준비됐다. 이제 postgresql이 잘 연결되는 지 확인해보자.


# (.venv) 가상 환경 위에서
(.venv) $ python manage.py migrate

마이그레이션이 잘 된다면 성공.

우선 큰 틀만 써 놓았고, 나중에 여유가 된다면 스크린샷과 함께 더 자세한 내용을 추가하겠다.


참조 링크

postgresql 권한 설정: pg_hba.conf에 대해서
http://www.postgresdba.com/bbs/board.php?bo_table=B12&wr_id=36
https://www.postgresql.org/docs/9.5/static/auth-pg-hba-conf.html