在 App Engine 標準環境執行 Django

您可以輕鬆開始開發在 Google App Engine 標準環境執行的 Django 應用程式,且由於 App Engine 會依據流量動態進行資源調度,因此您可以確定,無論使用者只有幾人還是有數百萬人,App Engine 都可調度資源,為所有使用者提供服務。

本教學課程假設您已熟悉 Django 網路開發流程,其中將協助您逐步瞭解正式的 Django 教學課程應用程式,也就是編寫第一個 Django 應用程式。建議您先進行該項教學課程,然後再進行此項教學課程,特別是在您初次接觸 Django 開發的情況下。應用程式模型代表包含問題的意見調查,您可利用 Django 管理控制台與模型互動。

本教學課程需要 Python 3.7

事前準備

請在完成下列各步驟後勾選核取方塊。

  1. check_box_outline_blank check_box 在 Google Cloud Platform 主控台中建立專案。
    如果您尚未建立專案,請立即建立。專案可讓您管理應用程式的所有 Google Cloud Platform 資源,包括部署、存取權控管、計費和服務。
    1. 開啟 GCP 主控台
    2. 在頂端的下拉式選單中,選取 [Create a project] (建立專案)
    3. 按一下 [Show advanced options] (顯示進階選項),然後在「App Engine location」 (App Engine 位置) 底下選取位在美國的地點。
    4. 為您的專案命名。
    5. 記下專案 ID,這組 ID 可能與專案名稱不同。專案 ID 會在指令和設定中用到。
  2. check_box_outline_blank check_box 為專案啟用計費功能,並申請免費試用。

    如果您尚未為專案啟用計費功能,請立即啟用計費功能,並申請免費試用。啟用計費功能後,應用程式就能使用計費資源,例如執行執行個體和儲存資料。 在免費試用期間,您不需要為任何服務付費。

  3. check_box_outline_blank check_box 安裝 Cloud SDK。

    如果您尚未安裝 Cloud SDK,請立即安裝並初始化 Google Cloud SDK。這個 Cloud SDK 包含的工具和程式庫可讓您在 GCP 上建立及管理資源。

  4. check_box_outline_blank check_box 為您的專案啟用 API

    這會將您導向 GCP 主控台,並自動啟用本教學課程使用的 API。使用的 API 為:Google Cloud SQL API。

下載並執行應用程式

在您完成必要條件後,可以下載及部署 Django 範例應用程式。以下章節將逐步引導您設定、執行及部署範例。

複製 Django 應用程式

Django 範例應用程式的程式碼位於 GitHub 的 Google Cloud Platform python-docs-samples 存放區。

將存放區複製到本機電腦中:

git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git

前往包含程式碼範例的目錄:

Linux/macOS

cd python-docs-samples/appengine/standard_python37/django

Windows

cd python-docs-samples\appengine\standard_python37\django

您也可以下載 zip 格式的範例,然後解壓縮該檔案。

設定您的本機環境

部署作業完成後,應用程式會使用 App Engine 環境內建的 Cloud SQL Proxy 與您的 Cloud SQL 執行個體進行通訊。不過,如要在本機測試應用程式,您就必須在開發環境安裝並使用 Proxy 本機複本。

進一步瞭解 Cloud SQL Proxy

如要在 Cloud SQL 執行個體上執行基本的管理工作,您可以使用 MySQL 用戶端。

安裝 Cloud SQL Proxy

下載並安裝 Cloud SQL Proxy。Cloud SQL Proxy 在本機執行時會連線至您的 Cloud SQL 執行個體。

Linux 64 位元

  1. 下載 Proxy:
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.amd64 -O cloud_sql_proxy
    
  2. 將 Proxy 設定為可執行:
    chmod +x cloud_sql_proxy
    

Linux 32 位元

  1. 下載 Proxy:
    wget https://dl.google.com/cloudsql/cloud_sql_proxy.linux.386 -O cloud_sql_proxy
    
  2. 將 Proxy 設定為可執行:
    chmod +x cloud_sql_proxy
    

macOS 64 位元

  1. 下載 Proxy:
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
    
  2. 將 Proxy 設定為可執行:
    chmod +x cloud_sql_proxy
    

macOS 32 位元

  1. 下載 Proxy:
    curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.386
    
  2. 將 Proxy 設定為可執行:
    chmod +x cloud_sql_proxy
    

Windows 64 位元

https://dl.google.com/cloudsql/cloud_sql_proxy_x64.exe 上按一下滑鼠右鍵,然後選取 [Save Link As] (另存連結為) 來下載 Proxy。將檔案重新命名為 cloud_sql_proxy.exe

Windows 32 位元

https://dl.google.com/cloudsql/cloud_sql_proxy_x86.exe 上按一下滑鼠右鍵,然後選取 [Save Link As] (另存連結為) 來下載 Proxy。將檔案重新命名為 cloud_sql_proxy.exe
如果這裡沒有列出您的作業系統,您也可以從原始碼編譯 Proxy

建立 Cloud SQL 執行個體

  1. 建立 MySQL 適用的 Cloud SQL 第二代執行個體,

    將執行個體命名為 polls-instance 或類似名稱。執行個體可能需要幾分鐘的時間才能準備就緒。執行個體準備就緒之後,會顯示在執行個體清單中。

  2. 現在請使用 Cloud SDK 來執行下列指令,其中 [YOUR_INSTANCE_NAME] 是您 Cloud SQL 執行個體的名稱。
    gcloud sql instances describe [YOUR_INSTANCE_NAME]

    在輸出中,記下 [CONNECTION_NAME] 顯示的值。

    [CONNECTION_NAME] 值的格式為 [PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME]

初始化 Cloud SQL 執行個體

  1. 使用上一步的 [CONNECTION_NAME] 值啟動 Cloud SQL Proxy。

    Linux/macOS

    ./cloud_sql_proxy -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:3306

    Windows

    cloud_sql_proxy.exe -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:3306

    [YOUR_INSTANCE_CONNECTION_NAME] 改成您在上一步記下的 [CONNECTION_NAME] 值。

    這個步驟會將本機電腦連線至 Cloud SQL 執行個體,以利進行本機測試。本機測試應用程式期間請讓 Cloud SQL Proxy 全程保持運作。

  2. 建立 Cloud SQL 使用者與資料庫。

    GCP 主控台

    1. 針對您的 Cloud SQL 執行個體 polls-instance使用 GCP 主控台建立新資料庫。例如,您可以使用 polls 這個名稱。
    2. 針對您的 Cloud SQL 執行個體 polls-instance使用 GCP 主控台建立新使用者

    MySQL 用戶端

    1. 另外開啟一個指令列分頁,並使用 MySQL 用戶端或類似程式連線至執行個體。系統提示時,請使用您設定的根密碼。
      mysql --host 127.0.0.1 --user root --password
    2. 使用下列指令,在 Cloud SQL 資料庫中建立需要的資料庫、使用者與存取權限。將 [MYSQL_USER][MYSQL_PASSWORD] 改成您想要用的使用者名稱和密碼。
      CREATE DATABASE polls;
      CREATE USER '[MYSQL_USER]' IDENTIFIED BY '[MYSQL_PASSWORD]';
      GRANT ALL ON . TO '[MYSQL_USER]';

進行資料庫設定

  1. 開啟 mysite/settings.py 進行編輯。

  2. 請將 [YOUR-USERNAME][YOUR-PASSWORD] 兩處更換為您之前在「建立 Cloud SQL 執行個體」步驟中建立的資料庫使用者名稱及密碼。這有助於針對 App Engine 部署及本機測試設定連線至資料庫。

  3. 執行下列指令。複製輸出的「connectionName」值用於下個步驟。

    gcloud sql instances describe [YOUR_INSTANCE_NAME]
    
  4. [YOUR-CONNECTION-NAME] 更換為上一步的「connectionName」

  5. [YOUR-DATABASE] 更換為「初始化 Cloud SQL 執行個體」步驟期間選擇的名稱。

  6. 關閉並儲存 settings.py

在本機電腦上執行應用程式

  1. 若要在本機電腦執行 Django 應用程式,就需要設定 Python 開發環境,包括 Python、pip 及 virtualenv。操作說明請參閱 Google Cloud Platform 適用的設定 Python 開發環境

  2. 建立獨立的 Python 環境,並安裝依附元件:

    Linux/macOS

    virtualenv env
    source env/bin/activate
    pip install -r requirements.txt
    

    Windows

    virtualenv env
    env\scripts\activate
    pip install -r requirements.txt
    

  3. 執行 Django 遷移以設定模型:

    python manage.py makemigrations
    python manage.py makemigrations polls
    python manage.py migrate
    
  4. 啟動本機網路伺服器:

    python manage.py runserver
    
  5. 在網路瀏覽器中,輸入下列網址:

    http://localhost:8000
    

您應該會看見一個顯示以下文字的簡單網頁:「Hello, world. You're at the polls index」。範例應用程式頁面是由在您電腦上執行的 Django 網路伺服器提供。當您準備好繼續進行時,請按下「Ctrl+C」停止本機網路伺服器。

使用 Django 管理控制台

  1. 建立超級使用者:

    python manage.py createsuperuser
    
  2. 啟動本機網路伺服器:

    python manage.py runserver
    
  3. 在網路瀏覽器輸入此網址。若要登入管理員網站,請使用您在執行 createsuperuser 時建立的使用者名稱及密碼。

    http://localhost:8000/admin/
    

將應用程式部署至 App Engine 標準環境

  1. 將所有靜態內容收集至單一資料夾。此指令會將所有應用程式的靜態檔案,移至 settings.py 之中 STATIC_ROOT 指定的資料夾。

    python manage.py collectstatic
    
  2. app.yaml 檔案所在的應用程式 python-docs-samples/appengine/standard/django 目錄執行下列指令,以上傳應用程式:

    gcloud app deploy
    

    等候更新完成通知訊息。

查看在 cloud 中執行的應用程式

在網路瀏覽器中,輸入下列網址:

https://<your_project_id>.appspot.com

這次您的要求是由在 App Engine 標準環境執行的網路伺服器提供。

這項指令會部署 app.yaml 中描述的應用程式,並將新部署的版本設為預設版本,將其用來提供所有新流量。

若您更新了應用程式,您可以輸入第一次部署應用程式時使用的指令來部署更新版本。新部署會為您的應用程式建立新版本,並會將它升級為預設版本。舊版應用程式仍會保留下來。請注意,這些應用程式版本全部都是計費資源。如需刪除非預設版本應用程式的相關資訊,請參閱清除

實際工作環境

當您準備好在實際工作環境提供內容時,請進行下列設定變更:

  1. 請在 mysite/settings.pyDEBUG 變更為 False

瞭解程式碼

Django 範例應用程式是以標準 Django 工具建立。以下指令將建立專案及意見調查應用程式:

django-admin startproject mysite
python manage.py startapp polls

settings.py 檔案包含 SQL 資料庫設定。settings.py 之中的程式碼使用 GAE_APPLICATION 環境變數,判定應用程式是在 App Engine 或本機電腦執行。應用程式於 App Engine 執行時,就會使用 /cloudsql Unix 通訊端連線至 MySQL。應用程式於本機電腦執行時,會使用 TCP 連線至 MySQL 主機 (需要使用者名稱及密碼)。

if os.getenv('GAE_APPLICATION', None):
    # Running on production App Engine, so connect to Google Cloud SQL using
    # the unix socket at /cloudsql/<your-cloudsql-connection string>
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '/cloudsql/[YOUR-CONNECTION-NAME]',
            'USER': '[YOUR-USERNAME]',
            'PASSWORD': '[YOUR-PASSWORD]',
            'NAME': '[YOUR-DATABASE]',
        }
    }
else:
    # Running locally so connect to either a local MySQL instance or connect to
    # Cloud SQL via the proxy. To start the proxy via command line:
    #
    #     $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
    #
    # See https://cloud.google.com/sql/docs/mysql-connect-proxy
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'HOST': '127.0.0.1',
            'PORT': '3306',
            'NAME': '[YOUR-DATABASE]',
            'USER': '[YOUR-USERNAME]',
            'PASSWORD': '[YOUR-PASSWORD]',
        }
    }

app.yaml 檔案包含部署至 App Engine 的設定資訊。此 app.yaml 檔案指定 App Engine 將由 static/ 目錄提供靜態檔案。

runtime: python37

handlers:
# This configures Google App Engine to serve the files in the app's static
# directory.
- url: /static
  static_dir: static/

# This handler routes all requests not caught above to your main app. It is
# required when static routes are defined, but can be omitted (along with
# the entire handlers section) when there are no static files defined.
- url: /.*
  script: auto
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁