서버 세팅하기 2부

2부에서는 DB 설치 및 Django 세팅을 다룰 예정이다. PostgreSQL 9.3.8, Django 1.8.2 버전을 기준으로 작성했다. 작성하면서 Digital Ocean의 튜토리얼을 참고했다.

1. DB 설치 및 접속

  1. sudo apt-get install postgresql postgresql-contrib로 postgresql를 설치한다.
  2. virtualenv에 pip install psycopg2로 PostgreSQL 파이썬 커넥터를 설치한다. 오류가 발생하는 경우 apt-get으로 libpq-dev 패키지를 설치한다.
  3. sudo -u postgres psql로 SQL 환경을 시작할 수 있다.

유용한 명령어들

  • \? 명령어 도움말을 보여준다.
  • \l 데이터베이스 목록을 보여준다.
  • \dt 테이블 목록을 보여준다.
  • \dg 유저 목록을 보여준다.
  • \c DATABASE_NAME 데이터베이스에 접속
  • \q SQL Environment 종료

template database

PostgreSQL을 설치하면 기본적으로 postgres, template0, template1 데이터베이스가 있다. PostgreSQL에서는 데이터베이스를 만들 때 기본적으로 template1을 복제해서 만들어지기 때문에 여기에 모든 데이터베이스에 적용할 확장 기능을 설치하는 식으로 이용한다. template0은 데이터베이스 초기의 순수한 상태 템플릿으로 이용하며, template0을 복제할 때는 DB의 인코딩이나 locale을 세팅할 수 있다.

2. 사용자 계정 생성

  1. CREATE DATABASE toytest;로 toytest 데이터베이스 생성. #
  2. CREATE USER toytest with PASSWORD 'password';로 계정 생성. 패스워드는 랜덤 제너레이터를 사용했다. #
  3. GRANT ALL PRIVILEGES ON DATABASE toytest TO toytest;로 toytest DB에 대한 권한을 toytest Role에 할당한다.

3. Django 세팅 파일 수정

Django를 VCS로 관리할 때 비밀 정보들이나 사이트마다 다른 로컬 세팅들은 VCS에 포함해서는 안 된다. 이런 정보들은 local_settings.py에 옮겨서 저장하자.

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'SECRET_KEY'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = False

ALLOWED_HOSTS = ['toytest.qwaz.io',]

# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'toytest',
        'USER': 'toytest',
        'PASSWORD': 'PASSWORD',
        'HOST': 'localhost',
        'PORT': '', # default port
    }
}

PostgreSQL의 기본 포트는 5432고, 기본 포트를 사용하는 경우 비워 놓아도 된다.

settings.py에서는 겹치는 설정을 제거해주고 LANGUAGE_CODE와 TIME_ZONE을 수정한다. LANGUAGE_CODE는 프로젝트 성격에 따라 en-us 또는 ko-kr로 설정하고, TIME_ZONE은 서버가 있는 Asia/Tokyo로 설정해 주자.

설정을 마치고 settings.py에 from .local_settings import *를 추가한다.

수정한 프로젝트를 다시 읽어오기 위해서는 여러가지 방법이 있는데 touch toytest_uwsgi.ini가 가장 편리하다. Emperor Mode로 uWSGi를 실행시켜두었기 때문에 ini 파일의 수정을 감지해 uWSGI가 다시 로드된다.

DB 연결이 끝나면 python manage.py migrate를 실행해 데이터베이스 연결이 잘 되었나 확인한다.

댓글 남기기