Django 기반 애플리케이션 배포

- Amazon Lightsail

Amazon Lightsail은 AWS를 시작하는 가장 쉬운 방법으로, 가상 서버, 스토리지, 데이터베이스 및 네트워킹은 물론 비용 효율적인 월간 요금제를 제공합니다.

이 자습서에서는 예제 Django 기반 애플리케이션을 Lightsail에 배포합니다. 먼저 인스턴스를 생성하고 애플리케이션을 배포합니다. 다음으로, Django의 내장 웹 서버를 사용하여 애플리케이션이 정상적으로 실행되고 있는지 확인합니다. 마지막으로, 애플리케이션을 호스팅하도록 Apache를 구성합니다.

무료로 Lightsail을 시작하십시오.

사전 조건

이 중급 자습서에서는 독자가 다음 소양을 갖추었다고 가정합니다.

  • Linux 명령줄(cp, cat 등)에 대한 기본적인 이해
  • Linux 텍스트 편집기(vi, nano 등) 사용 능력
  • Django 및 Python에 대한 기본적인 이해(최소 기준)
  • 무료 Amazon Web Services 계정
자습서 소개
시간 30분                                     
요금 제한이 적용될 수 있음
사용 사례 컴퓨팅
제품 Amazon Lightsail
대상 개발자
레벨 중급자용 
최종 업데이트 날짜 2020년 3월 23일

계정이 있습니까? 로그인

1. Lightsail 인스턴스 생성

a. AWS 계정에 로그인하여 Lightsail 홈 페이지로 이동합니다.


b. [Create Instance(인스턴스 생성)]를 클릭합니다.

django1

c. 적절한 AWS 리전을 선택합니다.

add django
django2

d. 가용 영역을 선택합니다.

django3
django4

e. [Select a blueprint(블루프린트 선택)]에서 [Django]를 선택합니다.

 

django5

f. 다른 설정은 기본값으로 두면 됩니다. 화면 하단으로 스크롤하여 [Create Instance(인스턴스 생성)]를 클릭합니다.

 

2. Django 프로젝트 배포

이 섹션에서는 간단한 “Hello, World” 애플리케이션을 배포합니다. Django의 명령줄을 사용하여 새 프로젝트와 새 애플리케이션을 생성한 후 다음 섹션에서 실제 애플리케이션 코드를 추가하게 됩니다.

작성해 둔 Django 애플리케이션이 있는 경우 이 자습서에 사용해도 됩니다. 단, “Hello, World” 애플리케이션에 사용된 디렉터리 구조를 기록해 두십시오. 이 정보는 애플리케이션을 구성할 때 중요합니다.

Django 프로젝트의 디렉터리

/opt/bitnami/apps/django/django_projects/tutorial

프로젝트 자체가 저장되는 디렉터리

/opt/bitnami/apps/django/django_projects/tutorial/tutorial

앱이 생성되는 디렉터리

/opt/bitnami/apps/django/django_projects/tutorial/tutorial/hello_world


a. Lightsail 홈 페이지에서 Django 인스턴스의 브라우저 기반 SSH 클라이언트 아이콘을 클릭합니다. 그러면 인스턴스에 대한 SSH 세션이 시작됩니다. 다음 명령을 해당 세션에서 모두 실행해야 합니다.

django6

b. 다음 명령을 입력하여 django_projects 디렉터리로 변경하고 new tutorial 프로젝트를 생성합니다.
cd /opt/bitnami/apps/django/django_projects && \
django-admin.py startproject tutorial

c. 다음 명령을 입력하여 tutorial 프로젝트 디렉터리로 변경하고 새 hello_world 앱을 생성합니다.

cd tutorial && python3 manage.py startapp hello_world

3. 애플리케이션 코드 추가

애플리케이션의 스캐폴딩이 생성되었으므로 코드를 추가할 수 있습니다. 이 애플리케이션은 웹 페이지가 로드될 때마다 “Hello, World”를 표시합니다.

이들 명령은 Lightsail 브라우저 기반 SSH 클라이언트 창에서 실행해야 합니다.


a. 다음 명령을 입력하여 Vim 텍스트 편집기에서 views.py 파일을 엽니다.

sudo vim /opt/bitnami/apps/django/django_projects/tutorial/hello_world/views.py

b. I 키를 눌러 파일을 편집하고 기존 코드를 다음 코드로 바꿉니다.

from django.http import HttpResponse

def index(request):
     return HttpResponse("Hello, world")

c. Esc 키를 누르고 :wq!를 입력하고 Enter 키를 눌러 저장한 후 Vim을 종료합니다.


d. 다음 명령을 입력하여 views.py 파일과 같은 디렉터리에 애플리케이션의 urls.py 파일을 생성합니다.

sudo vim /opt/bitnami/apps/django/django_projects/tutorial/hello_world/urls.py

e. I 키를 눌러 파일을 편집하고 다음 코드를 추가합니다.

from django.urls import path
from . import views

urlpatterns = [
     path('', views.index, name='index'),
]

f. Esc 키를 누르고 :wq!를 입력하고 Enter 키를 눌러 저장한 후 Vim을 종료합니다.


g. 다음 명령을 입력하여 urls.py 파일을 엽니다.

sudo vim /opt/bitnami/apps/django/django_projects/tutorial/tutorial/urls.py

h. I 키를 눌러 파일을 편집하고 기존 코드를 다음 코드로 바꿉니다.

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('', include('hello_world.urls')),
    path('admin/', admin.site.urls),
]

i. Esc 키를 누르고 :wq!를 입력하고 Enter 키를 눌러 저장한 후 Vim을 종료합니다.


4. 애플리케이션 테스트

다음으로, Django의 내장 웹 서버를 사용하여 모든 구성 요소가 정상적으로 작동하는지 확인합니다. 기본적으로 Apache는 Lightsail 인스턴스에 포트 80을 사용하므로 포트 8000에서 Django 웹 서버를 실행합니다. 웹 사이트에 액세스하려면 Lightsail 방화벽에서 포트 8000을 열어야 합니다.


a. Lightsail 홈 페이지로 돌아가 Django 인스턴스의 이름을 클릭합니다.


b. 가로 메뉴에서 [Networking(네트워킹)]을 클릭합니다.

django7

c. [Firewall(방화벽)]에서 [Add Another(방화벽 추가)]를 클릭합니다.

django8

d. [Port Range(포트 범위)]에 8000을 입력하고 [Save(저장)]를 클릭합니다.

django9

e. Lightsail 홈 페이지로 돌아가 인스턴스 IP 주소를 기록해 둡니다.

django10

f. 터미널 세션으로 돌아간 후 다음 명령을 입력하여 settings.py 파일을 엽니다.

sudo vim /opt/bitnami/apps/django/django_projects/tutorial/tutorial/settings.py

g. I 키를 누르고 다음 예제에서 보듯이 여러분의 Lightsail 인스턴스 IP 주소를 포함하도록 ALLOWED_HOSTS 줄을 변경합니다.

참고: settings.py 파일을 편집할 때 192.0.2.143을 인스턴스의 퍼블릭 IP 주소로 바꾸십시오.

ALLOWED_HOSTS = ['192.0.2.143']

h. Esc 키를 누르고 :wq!를 입력하고 Enter 키를 눌러 저장한 후 Vim을 종료합니다.


i. 다음 명령을 입력하여 포트 8000에서 Django의 웹 서버를 시작합니다.

cd /opt/bitnami/apps/django/django_projects/tutorial/ && python3 manage.py runserver 0.0.0.0:8000

j. 웹 브라우저에서 인스턴스 IP 주소의 포트 8000에 접속합니다(예: http:// 192.0.2.143:8000).

“Hello, world”가 표시되면 애플리케이션이 실행 중인 것입니다.

5. Apache를 사용하여 애플리케이션 호스팅

Django의 내장 서버를 사용하여 프로덕션 애플리케이션을 실행하지 않는 것이 좋습니다. 따라서 이 마지막 섹션에서는 애플리케이션을 호스팅하도록 Apache를 구성합니다.

이를 위해 WSGI(웹 서비스 게이트웨이 인터페이스)를 사용하도록 애플리케이션을 구성한 다음 Apache 가상 호스트(vHost)를 생성합니다.

이들 명령은 Lightsail 브라우저 기반 SSH 클라이언트 창에서 실행해야 합니다.


a. 다음 명령을 입력하여 wsgi.py 파일을 편집합니다.

sudo vim /opt/bitnami/apps/django/django_projects/tutorial/tutorial/wsgi.py

b. :1$d를 입력하고 Enter 키를 눌러 모두 선택한 후 wsgi.py 파일의 기존 내용을 삭제합니다.


c. I 키를 눌러 편집을 시작하고 wsgi.py 파일에 다음 코드를 추가합니다.

import os
import sys
sys.path.append('/opt/bitnami/apps/django/django_projects/tutorial')
os.environ.setdefault("PYTHON_EGG_CACHE", "/opt/bitnami/apps/django/django_projects/tutorial/egg_cache")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tutorial.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

d. Esc 키를 누르고 :wq!를 입력하고 Enter 키를 눌러 저장한 후 Vim을 종료합니다.


e. 다음 명령을 입력하여 애플리케이션의 conf 디렉터리를 생성합니다.

mkdir /opt/bitnami/apps/django/django_projects/tutorial/conf

f. 다음 명령을 입력하여, 방금 생성한 conf 디렉터리에 httpd-app.conf 파일을 생성합니다.

sudo vim /opt/bitnami/apps/django/django_projects/tutorial/conf/httpd-app.conf

g. I 키를 눌러 편집을 시작하고 다음 코드를 추가합니다.

<IfDefine !IS_DJANGOSTACK_LOADED>
      Define IS_DJANGOSTACK_LOADED
      WSGIDaemonProcess wsgi-djangostack   processes=2 threads=15    display-name=%{GROUP}
</IfDefine>

<Directory "/opt/bitnami/apps/django/django_projects/tutorial/tutorial">
    Options +MultiViews
    AllowOverride All
    <IfVersion >= 2.3>
        Require all granted
    </IfVersion>

    WSGIProcessGroup wsgi-djangostack

    WSGIApplicationGroup %{GLOBAL}
</Directory>

Alias /tutorial/static "/opt/bitnami/apps/django/lib/python3.7/site-packages/Django-2.2.9-py3.7.egg/django/contrib/admin/static"
WSGIScriptAlias /tutorial '/opt/bitnami/apps/django/django_projects/tutorial/tutorial/wsgi.py'

h. Esc 키를 누르고 :wq!를 입력하고 Enter 키를 눌러 저장한 후 Vim을 종료합니다.


i. 다음 명령을 입력하여 애플리케이션의 conf 디렉터리에 httpd-prefix.conf 파일을 생성합니다.

sudo vim /opt/bitnami/apps/django/django_projects/tutorial/conf/httpd-prefix.conf

j. I 키를 눌러 편집을 시작하고 다음 코드를 추가합니다.

Include "/opt/bitnami/apps/django/django_projects/tutorial/conf/httpd-app.conf"

k. Esc 키를 누르고 :wq!를 입력하고 Enter 키를 눌러 저장한 후 Vim을 종료합니다.


l. 다음 명령을 입력하여 bitnami-apps-prefix.conf 파일을 엽니다.

sudo vim /opt/bitnami/apache2/conf/bitnami/bitnami-apps-prefix.conf

m. I 키를 눌러 편집을 시작하고 파일의 끝에 다음 줄을 추가합니다.

Include "/opt/bitnami/apps/django/django_projects/tutorial/conf/httpd-prefix.conf"

n. Esc 키를 누르고 :wq!를 입력하고 Enter 키를 눌러 저장한 후 Vim을 종료합니다.


o. 다음 명령을 입력하여 bitnami.conf 파일을 엽니다:

sudo vim /opt/bitnami/apache2/conf/bitnami/bitnami.conf

p. :1,$d를 입력하고 Vim에서 Enter 키를 눌러 모두 선택한 후 wsgi.py 파일의 내용을 삭제합니다.


q. I 키를 눌러 편집을 시작하고 이 파일에 다음 코드를 추가합니다.

<VirtualHost _default_:80>
    WSGIScriptAlias / /opt/bitnami/apps/django/django_projects/tutorial/tutorial/wsgi.py

    <Directory /opt/bitnami/apps/django/django_projects/tutorial>
    AllowOverride all
        Require all granted
        Options FollowSymlinks
    </Directory>

    DocumentRoot /opt/bitnami/apps/django/django_projects/tutorial
</VirtualHost>

r. Esc 키를 누르고 :wq!를 입력하고 Enter 키를 눌러 저장한 후 Vim을 종료합니다.


s. 다음 명령을 입력하여 Apache를 다시 시작합니다.

sudo /opt/bitnami/ctlscript.sh restart apache

t. 웹 브라우저에서 인스턴스의 IP 주소에 접속합니다(예: http:// 192.0.2.143).

“Hello, world”가 표시되면 애플리케이션이 실행 중인 것입니다.

축하합니다!

축하합니다. 자습서를 완료하셨습니다. Lightsail에서 Django 기반 애플리케이션을 성공적으로 배포했습니다.

Amazon Lightsail은 WordPress, 웹 사이트 및 블로그 플랫폼과 같은 다양한 애플리케이션을 개발하고 구축하고 배포하는 데 유용한 도구입니다. 

이 자습서가 유용했습니까?

감사합니다.
좋아하는 사항을 알려주세요.
닫기
실망을 드려 죄송합니다.
오래되었거나 혼란스럽거나 부정확한 사항이 있습니까? 피드백을 제공하여 이 자습서를 개선할 수 있도록 도와주십시오.
닫기