將 CakePHP 應用程式部署至 Elastic Beanstalk - AWS Elastic Beanstalk

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將 CakePHP 應用程式部署至 Elastic Beanstalk

CakePHP 是 的開放原始碼MVC架構PHP。本教學課程會逐步引導您產生 CakePHP 專案、將其部署到 Elastic Beanstalk 環境,以及將其設定為連線至 Amazon RDS 資料庫執行個體。

必要條件

本教學假設您具備基本的 Elastic Beanstalk 操作及 Elastic Beanstalk 主控台知識。若您尚不了解,請依照 Elastic Beanstalk 入門 中的說明來啟動您的第一個 Elastic Beanstalk 環境。

為了遵循本指南的程序,您需要命令列終端機或 shell 來執行命令。命令清單前會出現提示字元 ($) 及目前的目錄名稱 (如有)。

~/eb-project$ this is a command this is output

在 Linux 和 macOS 上,您可以使用偏好的 Shell 和套件軟體管理工具。在 Windows 上,您可以安裝適用於 Linux 的 Windows 子系統,以取得 Windows 整合版本的 Ubuntu 和 Bash。

CakePHP 4 需要 PHP 7.2 或更新版本。它還需要官方 CakePHP 安裝文件中列出的PHP擴充功能。請依照設置 Elastic Beanstalk 的PHP開發環境主題中的指示安裝 PHP和 Composer。

啟動 Elastic Beanstalk 環境

使用 Elastic Beanstalk 主控台建立 Elastic Beanstalk 環境。選擇PHP平台並接受預設設定和範例程式碼。

啟動環境 (主控台)
  1. 使用此預先設定的連結開啟 Elastic Beanstalk 主控台: console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced

  2. Platform (平台),選取符合您應用程式所使用語言的平台和平台分支。

  3. 針對 Application code (應用程式程式碼),選擇 Sample application (範例應用程式)

  4. 選擇 Review and launch (檢閱和啟動)

  5. 檢視可用選項。選擇您要使用的可用選項,當您準備就緒時,請選擇 Creat app (建立應用程式)

使用大約需要五分鐘時間建立環境,並且建立下列資源:

  • EC2 執行個體 – Amazon Elastic Compute Cloud (AmazonEC2) 虛擬機器,設定為在您選擇的平台上執行 Web 應用程式。

    每個平台會執行特定的一套軟體、設定檔和指令碼,來支援特定的語言版本、架構、Web 容器或其組合。大多數平台會使用 Apache 或 NGINX 作為反向代理,位於 Web 應用程式前方,將請求轉送給它,提供靜態資產,並產生存取和錯誤日誌。

  • 執行個體安全群組 – Amazon EC2安全群組,設定為允許連接埠 80 上的傳入流量。此資源可讓來自負載平衡器的HTTP流量到達執行 Web 應用程式的EC2執行個體。在預設情況下,不允許傳輸資料從其他通訊埠傳送。

  • 負載平衡器 - Elastic Load Balancing 負載平衡器,可設定將請求分配到執行您應用程式的執行個體。負載平衡器也讓您的執行個體不需直接連接到網際網路。

  • 負載平衡器安全群組 – 設定為允許連接埠 80 上傳入流量的 Amazon EC2安全群組。此資源可讓來自網際網路的HTTP流量達到負載平衡器。在預設情況下,不允許傳輸資料從其他通訊埠傳送。

  • Auto Scaling 群組 - Auto Scaling 群組,設為在執行個體終止或無法使用時,取代該執行個體。

  • Amazon S3 儲存貯體 - 儲存位置,用來儲存當您使用 Elastic Beanstalk 時所建立的原始程式碼、日誌和其他成品。

  • Amazon CloudWatch 警示 – 監控您環境中執行個體負載的兩個 CloudWatch 警示,如果負載過高或過低,則會觸發這兩個警示。當警示觸發時,您的 Auto Scaling 群組會擴展或縮減以進行回應。

  • AWS CloudFormation 堆疊 – Elastic Beanstalk 使用 AWS CloudFormation 啟動環境中的資源並傳播組態變更。資源定義於範本中,您可在 AWS CloudFormation 主控台中檢視此範本。

  • 網域名稱 – 以 形式路由至 Web 應用程式的網域名稱 subdomain.region.elasticbeanstalk.com

    網域安全

    為了增強 Elastic Beanstalk 應用程式的安全性,在公有字尾清單中註冊 elasticbeanstalk.com 網域 ()。 PSL

    如果您需要在 Elastic Beanstalk 應用程式的預設網域名稱中設定敏感 Cookie,我們建議您使用具有__Host-字首的 Cookie 來提高安全性。此做法會保護您的網域,防止跨網站請求偽造嘗試 (CSRF)。如需更多資訊,請參閱 Mozilla 開發人員網路中的設定 Cookie 頁面。

這些資源全都由 Elastic Beanstalk 管理。當您終止環境時,Elastic Beanstalk 會終止其中的所有資源。

注意

Elastic Beanstalk 建立的 Amazon S3 儲存貯體會在環境間共享,且不會在環境終止時刪除。如需詳細資訊,請參閱將 Elastic Beanstalk 與 Amazon S3 搭配使用

安裝 CakePHP 並產生網站

Composer 可以安裝 CakePHP,並使用一個命令建立工作專案:

~$ composer create-project --prefer-dist cakephp/app eb-cake

Composer 安裝 CakePHP 和大約 20 個相依性,並產生預設專案。

如果您遇到安裝 Cake 的任何問題PHP,請造訪官方文件中的安裝主題:http://book.cakephp.org/4.0/en/installation.html

部署您的應用程式

建立原始碼套件,其中包含 Composer 所建立的檔案。以下命令建立一個名為 cake-default.zip 的原始碼套件。它不含 vendor 資料夾中的檔案,其不僅佔用許多空間,在部署應用程式到 Elastic Beanstalk 時也派不上用場。

eb-cake zip ../cake-default.zip -r * .[^.]* -x "vendor/*"

將來源套件上傳至 Elastic Beanstalk,將 CakePHP 部署到您的環境。

若要部署原始碼套件
  1. 開啟 Elastic Beanstalk 主控台 ,然後在區域清單中選取您的 AWS 區域。

  2. 在導覽窗格中,選擇環境,然後在清單中選擇您環境的名稱。

    注意

    如果您有許多環境,請使用搜尋列來篩選環境清單。

  3. 在環境概觀頁面上,選擇 Upload and deploy (上傳和部署)。

  4. 使用畫面顯示對話方塊來上傳原始碼套件。

  5. 選擇 Deploy (部署)。

  6. 部署完成時,您可以選擇網站URL,在新索引標籤中開啟您的網站。

注意

若要進一步最佳化原始碼套件,可將 Git 儲存庫初始化,並使用 git archive 命令建立原始碼套件。預設的 Symfony 專案包含了 .gitignore 檔案,它告訴 Git 排除 vendor 資料夾和其他不需用於部署的檔案。

程序完成時,按一下 URL以在瀏覽器中開啟 CakePHP 應用程式。

目前為止一切正常。接下來,您將新增資料庫至您的環境,並將 CakePHP 設定為與其連線。

新增資料庫至您的環境

在 Elastic Beanstalk 環境中啟動 Amazon RDS 資料庫執行個體。您可以使用我的 SQL、 SQLServer或 PostgreSQL 資料庫搭配 Elastic Beanstalk 上的 CakePHP。在此範例中,我們將使用 Postgre SQL。

將 Amazon RDS 資料庫執行個體新增至 Elastic Beanstalk 環境
  1. 開啟 Elastic Beanstalk 主控台 ,然後在區域清單中選取您的 AWS 區域。

  2. 在導覽窗格中,選擇環境,然後在清單中選擇您環境的名稱。

    注意

    如果您有許多環境,請使用搜尋列來篩選環境清單。

  3. 在導覽窗格中,選擇組態

  4. Database (資料庫) 下,選擇 Edit (編輯)

  5. DB engine (資料庫引擎) 區段,選擇 postgres

  6. 輸入主要使用者名稱密碼。Elastic Beanstalk 會使用環境屬性,將這些值提供給您的應用程式。

  7. 若要儲存變更,請選擇頁面底部的儲存變更

建立資料庫執行個體約需要 10 分鐘。在此同時,您可更新原始碼以讀取環境的連線資訊。Elastic Beanstalk 使用環境變數 (如 RDS_HOSTNAME) 提供連線詳細資訊,您可自應用程式存取這些變數。

Cake PHP的資料庫組態位於專案程式碼app.phpconfig資料夾中名為 的檔案中。開啟此檔案,並新增可自 $_SERVER 讀取環境變數並將其指派至本機變數的程式碼。插入下例第一行 (<?php) 後醒目提示的行:

範例 ~/Eb-cake/config/app.php
<?php if (!defined('RDS_HOSTNAME')) { define('RDS_HOSTNAME', $_SERVER['RDS_HOSTNAME']); define('RDS_USERNAME', $_SERVER['RDS_USERNAME']); define('RDS_PASSWORD', $_SERVER['RDS_PASSWORD']); define('RDS_DB_NAME', $_SERVER['RDS_DB_NAME']); } return [ ...

資料庫連線可在 app.php 中進一步設定。尋找下列區段,並透過與您資料庫引擎 (MysqlSqlserverPostgres) 相符的驅動程式名稱修改預設資料來源,然後設定 hostusernamepassworddatabase 變數以從 Elastic Beanstalk 讀取對應的值:

範例 ~/Eb-cake/config/app.php
... /** * Connection information used by the ORM to connect * to your application's datastores. * Drivers include Mysql Postgres Sqlite Sqlserver * See vendor\cakephp\cakephp\src\Database\Driver for complete list */ 'Datasources' => [ 'default' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Postgres', 'persistent' => false, 'host' => RDS_HOSTNAME, /* * CakePHP will use the default DB port based on the driver selected * MySQL on MAMP uses port 8889, MAMP users will want to uncomment * the following line and set the port accordingly */ //'port' => 'non_standard_port_number', 'username' => RDS_USERNAME, 'password' => RDS_PASSWORD, 'database' => RDS_DB_NAME, /* * You do not need to set this flag to use full utf-8 encoding (internal default since CakePHP 3.6). */ //'encoding' => 'utf8mb4', 'timezone' => 'UTC', 'flags' => [], 'cacheMetadata' => true, 'log' => false, ...

資料庫執行個體啟動完成時,請封裝更新後的應用程式,並將其部署至您的環境:

更新您的 Elastic Beanstalk 環境
  1. 建立新的原始碼套件:

    ~/eb-cake$ zip ../cake-v2-rds.zip -r * .[^.]* -x "vendor/*"
  2. 開啟 Elastic Beanstalk 主控台 ,然後在區域清單中選取您的 AWS 區域。

  3. 在導覽窗格中,選擇環境,然後在清單中選擇您環境的名稱。

    注意

    如果您有許多環境,請使用搜尋列來篩選環境清單。

  4. 選擇 Upload and Deploy (上傳並部署)。

  5. 選擇 Browse (瀏覽),然後上傳 cake-v2-rds.zip

  6. 選擇部署

部署應用程式的新版本不會超過一分鐘。部署完成時,請重新整理網頁,確認資料庫連線成功:

Green checkmark icon indicating successful database connection for CakePHP.

清除

當您完成使用 Elastic Beanstalk 時,即可終止您的環境。Elastic Beanstalk 會終止與環境相關聯的所有 AWS 資源,例如 Amazon EC2執行個體資料庫執行個體 負載平衡器 、安全群組和警示

從主控台終止您的 Elastic Beanstalk 環境
  1. 開啟 Elastic Beanstalk 主控台 ,然後在區域清單中選取您的 AWS 區域。

  2. 在導覽窗格中,選擇環境,然後在清單中選擇您環境的名稱。

    注意

    如果您有許多環境,請使用搜尋列來篩選環境清單。

  3. 選擇 Actions (動作),然後選擇 Terminate Environment (終止環境)。

  4. 使用畫面顯示對話方塊來確認環境終止。

您可以使用 Elastic Beanstalk,隨時輕鬆地為您的應用程式建立新環境。

此外,您可終止於 Elastic Beanstalk 環境外建立的資料庫資源。當您終止 Amazon RDS 資料庫執行個體時,您可以拍攝快照,稍後再將資料還原至另一個執行個體。

終止RDS資料庫執行個體
  1. 開啟 Amazon RDS主控台

  2. 選擇 Databases (資料庫)。

  3. 選擇資料庫執行個體。

  4. 選擇動作,然後選擇刪除

  5. 選擇是否建立快照,然後選擇 Delete (刪除)

後續步驟

如需 Cake 的詳細資訊PHP,請參閱 https://book.cakephp.org 上的書籍。

隨著您繼續開發應用程式,您可能會希望無須手動建立 .zip 檔案並將其上傳至 Elastic Beanstalk 主控台,即可管理環境和部署應用程式。Elastic Beanstalk 命令列介面 (EB CLI) 提供 easy-to-use從命令列建立、設定和部署應用程式至 Elastic Beanstalk 環境的命令。

在 Elastic Beanstalk RDS 環境中執行 Amazon 資料庫執行個體非常適合進行開發和測試,但它將資料庫的生命週期與環境相關聯。如需連接至在環境外執行的資料庫的說明,請參閱 將 Amazon RDS 數據庫實例添加到您的 E PHP lastic Beanstalk 環境

最後,如果您計劃在生產環境中使用應用程式,則需要為環境設定自訂網域名稱,啟用 HTTPS 以進行安全連線。