1. 准備 wordpress 代碼
- 從 https://wordpress.org/download/ 將代碼壓縮包下載到本地,
- 解壓,會有一個 wordpress 目錄
- 復制 wp-config-sample.php 為 wp-config.php,修改。將下面的代碼
define('DB_NAME', 'database_name_here'); define('DB_USER', 'username_here'); define('DB_PASSWORD', 'password_here'); define('DB_HOST', 'localhost');
修改為:
define('DB_NAME', $_SERVER["RDS_DB_NAME"]); define('DB_USER', $_SERVER["RDS_USERNAME"]); define('DB_PASSWORD', $_SERVER["RDS_PASSWORD"]); define('DB_HOST', $_SERVER["RDS_HOSTNAME"]);
4. 將 wordpress 目錄中的代碼打包為一個新的 zip 文件 (注意不能直接打包 wordpress 目錄)
2. AWS 操作
2.1 准備工作
- 創建一個 VPC,帶至包括在兩個AZ內的兩個 subnet;創建一個 internet gateway 並綁定到VPC;設置默認 route table 中到 IGW 的 rule
- 創建一個 key pair
2.2 創建一個單實例 wordpress 測試環境
(1)進入 AWS Beanstalk 節點,點擊 Create Application,輸入
(2)點擊 Create Now 創建 Environment
(3)選擇 Web server environment
(4)配置 Environment
Platform 選擇 PHP:
上傳前面打包好的代碼zip文件,該文件會被保存到S3中。
點擊 Create Environment 按鈕,開始創建 Environment。
經過幾分鍾,Environment 創建好以后,點擊下圖頂上的 URL 鏈接,
出現下面的頁面:
這是因為沒有配置數據庫。
2.3 重新創建帶RDS的Environment
在點擊 Create Environment 之前,點擊 Configure more options 按鈕來進行更多配置。
點擊 Database 下面的 Modify 按鈕來修改 Database配置。下面的配置使用一個 RDS 實例:
點擊 Security 下面的 Modify,設置 EC2 Key Pair,以便將來能夠登錄到虛機。
點擊 Network Tab 下面的 Modify 按鈕來修改 Network。選擇 VPC 和 subnet:
回到 Network 配置,設置 RDS 實例的 subnet,需要設置在兩個AZ中的至少兩個subnet:
配置完成,點擊 Create Environment,開始創建過程。從Events 能看出大概的過程包括
- 創建一個 RDS 實例
- 創建一個 EIP,會綁定到 EC2
- 創建一個 EC2 實例
2.4 更新代碼
修改 wordpress 代碼,打包成一個新的zip 文件。點擊 Upload and Deploy:
上傳文件,點擊 Deploy:
新版本部署成功。
2.5 升級架構
在 Configuration 頁面中,分別做下面的配置修改:
在 Capacity Modify 頁面中,配置 ASG:
在 Load Banlancer 頁面中配置 LB。
在 Security 頁面中配置 EC2 Kay Pair,以便將來登錄進虛機。
在 Network 頁面中修改虛機所在的 subnet。
在 Software 頁面中配置日志相關,將日志保存到 S3 和 導入到 CloudWatch:
點擊 Apply Configuration 開始應用配置改動。
3. 一點心得
以上只是簡單地從AWS界面上嘗試使用了該功能的一些步驟。一點感受如下:
- 速度較慢。創建一個很小的環境就需要十幾分鍾。
- Configuration 中的部分配置互相有影響,修改了一處后往往需要在別的地方做修改,但是頁面上沒有提示。
- 預定義好的Platforms 的架構太簡單,無法滿足生產需求。
- 用戶定制Platform 過程很復雜。
- Configuration 難以擴展。只支持 ec2,rds,elb,asg,vpc 等,但是一個應用往往還需要其它資源。可選途徑包括 EBExtensions 和 CloudFormation,但使用似乎較難。
- ELB 還在使用快被淘汰的Classic類型,我估計基於虛機的PaaS 估計 AWS 也不打算繼續整了,還是轉到容器比較實際一些。