장고 - pyenv 가상환경 설정, 장고 설치, 테스팅서버 구동

pyenv 설치

curl 명령어로 pyenv 설치

1
$ curl -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash

명령어를 실행하면 pyenv가 설치가 진행된다. 그리고 아마도 다음과 같은 Warning 메세지를 받게 될 것이다.

WARNING: seems you still have not added 'pyenv' to the load path.

# Load pyenv automatically by adding
# the following to ~/.bashrc:

export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

패쓰설정이 필요하다는 메세지이다. 에디터로 ~/.bashrc 파일을 열고, 다음과 같이 수정해준다.

1
2
3
export PATH="/root/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

.bashrc 설정 파일을 수정한 이후에는, 해당 터미널 창을 종료하고, 새 터미널 창을 열어준다. pyenv 명렁어를 입력하여 다음과 같은 메세지가 출력되면 정상적으로 설치가 된 것이다.

pyenv 1.2.9
Usage: pyenv <command> [<args>]

Some useful pyenv commands are:
   commands    List all available pyenv commands
   local       Set or show the local application-specific Python version
   global      Set or show the global Python version
   shell       Set or show the shell-specific Python version
   install     Install a Python version using python-build
   uninstall   Uninstall a specific Python version
   rehash      Rehash pyenv shims (run this after installing executables)
   version     Show the current Python version and its origin
   versions    List all Python versions available to pyenv
   which       Display the full path to an executable
   whence      List all Python versions that contain the given executable

See `pyenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/pyenv/pyenv#readme


Python 구동에 필요한 패키지 설치

pyenv 가상환경에 Python을 설치하기에 앞서, Python 구동에 필요한 패키지들을 설치한다.

1
sudo apt-get install build-essential libreadline-dev zlib1g-dev libbz2-dev libsqlite3-dev libssl-dev


pyenv에 Python 설치

먼저, 가상환경에 설치할 수 있는 Python의 버전을 확인해본다.

1
$ pyenv install --list

위의 명령어를 실행하면, 현재의 가상환경에서 설치할 수 있는 릴리즈 버전들이 출력된다. 이 가운데에서 각자의 프로젝트에 적합한 버전을 설치한다.

1
$ pyenv install 3.6.2

현재의 가상환경에 설치된 파이썬 버전들을 확인하는 방법은 다음과 같다.

1
2
3
$ pyenv versions
* system (set by /root/.pyenv/version)
  3.6.2

\*로 표시된 부분은 현재 가상환경에 설정된 버전을 가리킨다. 앞서 설치한 파이썬 버전을 전역에서 사용하기 위해서는 다음과 같은 명령어를 실행한다.

1
$ pyenv global 3.6.2

다시 한번 파이썬 목록을 확인하면 다음과 같이 파이썬 버전이 변경된 것을 확인할 수 있다.

1
2
3
$ pyenv versions
  system
* 3.6.2 (set by /root/.pyenv/version)

설치된 파이썬의 경로를 확인하는 방법은 다음과 같다.

1
2
$ pyenv which python
/root/.pyenv/versions/3.6.2/bin/python


가상환경 생성

pyenv에 가상환경을 생성하는 명령어는 pyenv virtualenv [version] [env_name]이다.

1
2
3
$ pyenv virtualenv 3.6.2 django-jiam
Requirement already satisfied: setuptools in /root/.pyenv/versions/3.6.2/envs/django-jiam/lib/python3.6/site-packages
Requirement already satisfied: pip in /root/.pyenv/versions/3.6.2/envs/django-jiam/lib/python3.6/site-packages

파이썬 목록을 확인하면 다음과 같이 출력된다.

1
2
3
4
5
$ pyenv versions
  system
* 3.6.2 (set by /root/.pyenv/version)
  3.6.2/envs/django-jiam
  django-jiam

가상환경을 활성화시키는 명령어는 pyenv activate [env_name]이다. 가상환경을 활성화시키면, 커맨드라인에 가상환경명[env_name]이 표시된다.

1
2
3
4
5
6
$ pyenv activate django-jiam
(django-jiam)$ pyenv versions
  system
  3.6.2
  3.6.2/envs/django-jiam
* django-jiam (set by PYENV_VERSION environment variable)

가상환경을 비활성화시키는 명령어는 pyenv deactivate이다.

1
$ pyenv deactivate


Dajngo 설치

가상환경에 장고를 설치한다. 먼저 pyenv activate [env_name] 명령어를 실행하여 가상환경을 활성화시킨다. 가상환경이 활성화되면, 다음의 명령어를 실행하여 장고를 설치한다.

1
$ pip install Django==2.1.5


Django Project 생성

장고에서 폴더 구조는 매우 중요하다. 따라서 장고 설치에 앞서 프로젝트를 위한 디렉토리 구조를 설계한다. 설계된 디렉토리 구조에 따라 원하는 디렉토리로 들어가서 장고 프로젝트를 생성한다. 장고 프로젝트 생성 명령어는 django-admin startproject [project-name] 이다.

1
(django-jiam)$ django-admin startproject mysite .

다음과 같은 구조의 장고 프로젝트가 생성되었다. tree 패키지를 사용하면 다음과 같이 트리맵의 형태로 디렉토리 구조를 출력할 수 있다.

1
2
3
4
5
6
7
8
(django-jiam)$ tree
.
├── manage.py
└── conf
    ├── wsgi.py
    ├── urls.py
    ├── settings.py
    └── __init__.py


장고 테스팅서버 구동

장고에 내장된 테스팅서버를 구동하여 웹브라우저에 화면을 출력할 수 있다. 이를 위해 반드시 필요로 하는 설정만 진행해보면 다음과 같다.

먼저 conf/settings.py 설정 파일에서 호스트 규칙을 수정한다.

1
ALLOWED_HOSTS = '\*'

다음으로 AWS EC2 대시보드에서 인바운드 규칙을 설정한다. 네트워크 및 보안 > 보안 그룹인바운드 탭에서 포트를 열어준다. 여기에서는 아래의 그림과 같이 8000번 포트를 열어주었다.

inbound editing

마지막으로 프로젝트 디렉토리 하위의 manage.pyrunserver 명령어를 실행하여 테스팅 서버를 구동한다.

1
(django-jiam)$ python manage.py runserver 0.0.0.0:8000

웹브라우저에서 http://인스턴스IP주소:포트번호를 입력하여 서버가 정상적으로 작동하는지 확인한다. 성공하면 다음과 같이 로켓을 볼 수 있다.

django-rocket

동시에 runserver를 실행시킨 쉘을 확인해보면, 다음과 같은 메세지가 출력된 것을 확인할 수 있다.

cap-runservershell

빨간색으로 출력된 메세지는 아직 migrate 명령을 실행하지 않았다는 의미이다. migrate를 비롯하여 여러 설정들을 지정해주자.


Django 설정

지역시각 및 다국어 설정

1
2
3
4
5
LANGUAGE_CODE = 'ko-kr'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_L10N = True
USE_TZ = True

정적 파일 설정

STATIC_URL = '/static/' 아래에 다음과 같이 추가한다.

1
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

데이터베이스 마이그레이션

프로젝트 디렉토리에서 데이터베이스 마이그레이션을 위한 명령어를 실행한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
(django-jiam)$ python manage.py migrate
perations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
  Running migrations:
    Applying contenttypes.0001_initial... OK
	Applying auth.0001_initial... OK
	Applying admin.0001_initial... OK
	Applying admin.0002_logentry_remove_auto_add... OK
	Applying admin.0003_logentry_add_action_flag_choices... OK
	Applying contenttypes.0002_remove_content_type_name... OK
	Applying auth.0002_alter_permission_name_max_length... OK
	Applying auth.0003_alter_user_email_max_length... OK
	Applying auth.0004_alter_user_username_opts... OK
	Applying auth.0005_alter_user_last_login_null... OK
	Applying auth.0006_require_contenttypes_0002... OK
	Applying auth.0007_alter_validators_add_error_messages... OK
	Applying auth.0008_alter_user_username_max_length... OK
	Applying auth.0009_alter_user_last_name_max_length... OK
	Applying sessions.0001_initial... OK

Tags:

aws_ec2 django