本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
將 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 子系統
CakePHP 4 需要 PHP 7.2 或更新版本。它還需要官方 CakePHP 安裝
啟動 Elastic Beanstalk 環境
使用 Elastic Beanstalk 主控台建立 Elastic Beanstalk 環境。選擇PHP平台並接受預設設定和範例程式碼。
啟動環境 (主控台)
-
使用此預先設定的連結開啟 Elastic Beanstalk 主控台: console.aws.amazon.com/elasticbeanstalk/home#/newApplication?applicationName=tutorials&environmentType=LoadBalanced
-
在 Platform (平台),選取符合您應用程式所使用語言的平台和平台分支。
-
針對 Application code (應用程式程式碼),選擇 Sample application (範例應用程式)。
-
選擇 Review and launch (檢閱和啟動)。
-
檢視可用選項。選擇您要使用的可用選項,當您準備就緒時,請選擇 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 管理。當您終止環境時,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 部署到您的環境。
若要部署原始碼套件
開啟 Elastic Beanstalk 主控台
,然後在區域清單中選取您的 AWS 區域。 -
在導覽窗格中,選擇環境,然後在清單中選擇您環境的名稱。
注意
如果您有許多環境,請使用搜尋列來篩選環境清單。
-
在環境概觀頁面上,選擇 Upload and deploy (上傳和部署)。
-
使用畫面顯示對話方塊來上傳原始碼套件。
-
選擇 Deploy (部署)。
-
部署完成時,您可以選擇網站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 環境
開啟 Elastic Beanstalk 主控台
,然後在區域清單中選取您的 AWS 區域。 -
在導覽窗格中,選擇環境,然後在清單中選擇您環境的名稱。
注意
如果您有許多環境,請使用搜尋列來篩選環境清單。
在導覽窗格中,選擇組態。
-
在 Database (資料庫) 下,選擇 Edit (編輯)。
-
在 DB engine (資料庫引擎) 區段,選擇 postgres。
-
輸入主要使用者名稱及密碼。Elastic Beanstalk 會使用環境屬性,將這些值提供給您的應用程式。
-
若要儲存變更,請選擇頁面底部的儲存變更。
建立資料庫執行個體約需要 10 分鐘。在此同時,您可更新原始碼以讀取環境的連線資訊。Elastic Beanstalk 使用環境變數 (如 RDS_HOSTNAME
) 提供連線詳細資訊,您可自應用程式存取這些變數。
Cake PHP的資料庫組態位於專案程式碼app.php
中config
資料夾中名為 的檔案中。開啟此檔案,並新增可自 $_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
中進一步設定。尋找下列區段,並透過與您資料庫引擎 (Mysql
、Sqlserver
或 Postgres
) 相符的驅動程式名稱修改預設資料來源,然後設定 host
、username
、password
和 database
變數以從 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 環境
-
建立新的原始碼套件:
~/eb-cake$
zip ../cake-v2-rds.zip -r * .[^.]* -x "vendor/*"
開啟 Elastic Beanstalk 主控台
,然後在區域清單中選取您的 AWS 區域。 -
在導覽窗格中,選擇環境,然後在清單中選擇您環境的名稱。
注意
如果您有許多環境,請使用搜尋列來篩選環境清單。
-
選擇 Upload and Deploy (上傳並部署)。
-
選擇 Browse (瀏覽),然後上傳
cake-v2-rds.zip
。 -
選擇部署。
部署應用程式的新版本不會超過一分鐘。部署完成時,請重新整理網頁,確認資料庫連線成功:
清除
當您完成使用 Elastic Beanstalk 時,即可終止您的環境。Elastic Beanstalk 會終止與環境相關聯的所有 AWS 資源,例如 Amazon EC2執行個體 、資料庫執行個體 、負載平衡器 、安全群組和警示 。
從主控台終止您的 Elastic Beanstalk 環境
開啟 Elastic Beanstalk 主控台
,然後在區域清單中選取您的 AWS 區域。 -
在導覽窗格中,選擇環境,然後在清單中選擇您環境的名稱。
注意
如果您有許多環境,請使用搜尋列來篩選環境清單。
-
選擇 Actions (動作),然後選擇 Terminate Environment (終止環境)。
-
使用畫面顯示對話方塊來確認環境終止。
您可以使用 Elastic Beanstalk,隨時輕鬆地為您的應用程式建立新環境。
此外,您可終止於 Elastic Beanstalk 環境外建立的資料庫資源。當您終止 Amazon RDS 資料庫執行個體時,您可以拍攝快照,稍後再將資料還原至另一個執行個體。
終止RDS資料庫執行個體
-
開啟 Amazon RDS主控台
。 -
選擇 Databases (資料庫)。
-
選擇資料庫執行個體。
-
選擇動作,然後選擇刪除。
-
選擇是否建立快照,然後選擇 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 以進行安全連線。