將以 Django 為基礎的應用程式部署

至 Amazon Lightsail

Amazon Lightsail 是開始使用 AWS 最簡單的方法。其提供虛擬伺服器、儲存、資料庫和網路,外加符合成本效益的每月計劃。

在此教學中,您將以 Django 為基礎的範例應用程式部署至 Lightsail。您透過建立執行個體與部署應用程式來開始。接下來,使用 Django 內建 web 伺服器來確保應用程式正確執行。最後,設定 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.在選取藍圖下,選擇 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 首頁按一下以瀏覽器為基礎的 SSH 用戶端圖示,來開始 Django 執行個體。這麼做會在執行個體中啟動 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 內建的 web 伺服器來驗證一切都如預期般運作。依預設,Apache 在 Lightsail 執行個體上使用的是連接埠 80,因此您執行的 Django web 伺服器是在連接埠 8000。若要能夠存取網站,您需要在 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,並變更 ALLOWED_HOSTS 行來包含 Lightsail 執行個體的 IP 地址,如下列範例所示。

備註:編輯 settings.py 檔案時,務必使用執行個體的公有 IP 地址取代 192.0.2.143。

ALLOWED_HOSTS = ['192.0.2.143']

h.按下 Esc,輸入 :wq!,並按下 Enter 來儲存並結束 Vim。


i. 輸入以下命令,在連接埠 8000 上啟動 Django 的 web 伺服器:

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

j. 將 web 瀏覽器指向執行個體 IP 地址的連接埠 8000 (例如,http:// 192.0.2.143:8000)。

您應看到「Hello, world」,證明您的應用程式正在執行。

5.使用 Apache 託管應用程式

不建議使用 Django 內建伺服器來執行生產應用程式。因此,在此最後章節,您將設定 Apache 來為應用程式提供服務。

您透過將應用程式設定為使用 Web Services Gateway Interface (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 來全部選取,並刪除 bitnami.conf 檔案的內容


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.將 web 瀏覽器指向執行個體的 IP 地址 (例如,http:// 192.0.2.143)。

您應看到「Hello, world」,證明您的應用程式正在執行。

恭喜

恭喜,您已完成此教學。您已在 Lightsail 上順利部署以 Django 為基礎的應用程式。

Amazon Lightsail 是開發、建置和部署各種應用 (例如 WordPress、網站和部落格平台) 的好選擇。 

本教學對您有幫助嗎?

感謝您
請告訴我們您喜歡的部分。
關閉
抱歉,讓您失望
是有內容過時、令人困擾,或不準確嗎? 請提供意見回饋,協助我們改進此教學課程。
關閉