2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)
2020ironman 12th – Modern Web – Day16 – 中斷了~
沒有事先準備的狀況之下太拼了,無力繼續下去了,下台一鞠躬
2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)
沒有事先準備的狀況之下太拼了,無力繼續下去了,下台一鞠躬
2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)
方便與管理 傳統上管理MYSQL都是開發的工作 而phpmyadmin則是cpanel中的工具 在迷你網站上cpanel已是必備工具 而在拆分mysql後所需面對的就是如何去連過去 phpmyadmin 設定方式 首先要先瞭解到如果要客制化設定的話需產生config.inc.php,並且設定該檔案 該檔案範例檔案為 config.sample.inc.php 這是在您下載phpmyadmin就有的檔案 首先將config.sample.inc.php複製並重新命名成config.inc.php 然後打開config.inc.php尋找下列原始碼 如果只是需要單台主機連線就把 $cfg[\'Servers\'][$i][\'host\'] = \'localhost\'; 中的localhost改成遠端主機的IP或URL 如果是在單一個phpmyadmin中要控制多個主機則複製下列黃框中的文字 進一步往下貼上 貼上之後就會顯示如 這時就可以用您的帳號密碼進行登入
2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)
幾種建置方式 通常我們的建置會有幾種作法 * VM自建 * PAAS服務 * Container VM VM的作法其實就是AWS EC2 說實在的不是很建議因為備份還原等等機制都要自己做 我還有遇過客戶做了mariadb cluster結果只要讀寫超過一個瓶頸無論超過幾台就自動解散組不回去的狀況 但是勝在便宜可控制性高 這邊唯一要注意的是讀寫的部分是受到AWS EC2中的EBS所控制 PAAS服務 PAAS服務的MYSQL在AWS中通常指的是RDS MYSQL 這是指AWS利用EC2幫你做好的服務 你無法碰到底層但是AWS的調教功力絕對比你我都好 但是一樣會受到AWS EC2中的EBS所控制 另外還有一種資料庫是AWS特色服務 Amazon Aurora 他是一種大型storage架構出來的的資料庫 由下圖可一窺架構之一二 他的特色是已經做完讀寫分離且讀的部分已經透過proxy幫你做好分配 且讀取資源可做到自動擴展 讀五台不夠就開十台來跟你拼了 同時他每台再不考慮SQL效能之下都可以有200K/800K的奇特表現 算是雲端界的讀寫效能
2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)
為何要先拆MYSQL? 其實很多東西都要分拆 而不是只有MYSQL 其實只要是程式碼之外的的東西都是需要分拆的對象 但是在整體結構當中通常資料庫都是第一分拆的 原因無他 在標準三層式架構中Web、AP、DB 本身就因該是獨立的且是做到HA的架構 且合理的三層式架構比起單台主機的架構相對多了彈性與擴展性 注意事項 拆分資料庫最重要的事情很多但是有幾件事情由其重要 1. 是否有停機時間,如果你匯出匯入時出現了新訂單?這時候該怎麼處理。最簡單的就是停機 2. 程式碼中的連線設定檔掌握了,我看過有公司一個PHP自建的ERP光連線一個資料庫就有10幾處設定檔,上去是一場災難 3. 資料庫不在本機狀況之下該如何管理? 先想好這幾點可以讓您搬遷的路途上少點灣路 最初與最後的拆分目標 可能會如同這張圖或者是接近 這是兩年多前協助客戶進行的專案了 你會發現有很多的拆分點 但是無論如何資料庫都是首先要務
2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)
Security Group概念 安全群組會做為您執行個體的虛擬防火牆,控制傳入及傳出流量。當您在 VPC 中啟動執行個體時,您可以為執行個體指派最多五個安全群組。安全群組會在執行個體層級執行,而非子網路層級。因此,在您 VPC 中子網路內的每個執行個體都可指派給一組不同的安全群組。 原廠說明文件 <--連結--> Security Group基礎特性 * 您可以為每個 VPC 建立的安全群組數、每個安全群組可新增的規則數,以及您可以與網路界面建立關聯的安全群組數都具有配額。如需更多詳細資訊,請參閱 Amazon VPC 配額。 * 您可以指定允許規則,但無法指定拒絕規則。 * 您可以為傳入和傳出規則分別指定規則。 * 當您建立安全群組時,它沒有傳入規則。因此,直到您將傳入規則新增到安全群組之前,來自其他主機的流量都無法傳入您的執行個體。 * 根據預設,安全群組會包含允許所有傳出流量的規則。您可以移除規則並新增只允許特定傳出流量的傳出規則。若您的安全群組沒有傳出規則,將不會允許來自您執行個體的傳出流量。 * 安全群組是具狀態 — 的,若您從執行個體傳送請求,該請求
2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)
何謂 VPC (官方說法) Amazon Virtual Private Cloud (Amazon VPC) 允許您在 AWS 雲端佈建一個在邏輯上隔離的部分,並在自己定義的虛擬網路中啟動 AWS 資源。您可以完全掌控虛擬聯網環境,包括選擇自己的 IP 地址範圍、建立子網路,以及配置路由表和網路閘道。您可以在 VPC 中同時使用 IPv4 與 IPv6 來安全且輕鬆地存取資源和應用程式。 您可以輕鬆自訂 Amazon VPC 的網路配置。例如,您可以為可存取網際網路的 Web 伺服器建立一個公開子網路。您還可以將後端系統 (如資料庫或應用程式伺服器) 放置在無法存取網際網路的專用子網路中。您可以利用安全群組和網路存取控制清單等多種安全層,對各個子網路中 Amazon EC2 執行個體的存取進行控制 原廠說明文件 <--連結--> 使用方式 其實我們可以把VPC想向專屬於我們機房中的專屬網路
2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)
AWS 主機中最棒的工具Security group AWS Security group 功能 Security group的功能很簡單,他只是限定某個特定的IP、Port或是某範圍的IP、Port,限定這些東西能不能進出,可以把它視為一道非常簡單的防火牆, 設定完Security group後,再套用到某些機器上,來限制跟這台機器有關的網路進出,這就是Security group的功能。 AWS Security group的費用 Security group完全是免費的,所以大家可以不用擔心設定錯誤造成費用的產生,不過網路本身是必須收費的,所以一個好的Security group設定,可以幫助我們降低不當的網路流量所產成的費用。 設定AWS Security group 瞭解了Security group的設定後,我們可以來看一下Security group的設定介面: 首先我們來看一下 上方四個頁籤,最左邊的Description與最右邊的Tags,都是針對這一個Security group的設定,用來輔助使用者認出這個Security group而已,
2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)
為何要轉換? AWS 官方說明 <-連結-> 其實就主機資源這件事情是最容易理解的 但就真實應用情境上來說 如果你希望有真實的網路環境使用 可以建立真正的私有網段或者是控制路由等等的功能 Lightsail是無法協助的 因為他的VPC是簡約版的 如果需要完整的周邊功能比如控制路由或與AWS其他幾百項的服務完整結合都還是要轉換到EC2的 轉換方式 轉換方式是由主機產生Snapshot再將這個轉換成AWS EC2 AMI 所以主機一定是需要一段時間停機的 製作方式只要進到主機的控制介面中切換至Snapshots就可以看到『Create snapshot』的按鈕了 這時候點選『Create snapshot』後輸入名稱及點選Create即可產生snapshot 要注意點選Create後會有一瞬間主機會是暫停的狀況來產生快照 會發生SSH斷線或者服務連不到的狀況幾秒 如果你的環境不能當下不能停機要注意這狀況喔 建立過程需要數分鐘(等待) 建立完成 點選右邊的點點就可以看到 點選『Export to Ec2』 確認轉換 告警頁面 這邊資訊很重要因為
2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)
cloudfront的原站不能用 let's encrypt? 整站套用CDN的時候最怕的是如果我使用了 let's encrypt 結果更新失敗了! 這時候整個網站就都會顯示502 gateway time out 這時候該要怎樣避免這個問題 let's encrypt 的驗證方式 let's encrypt的驗證方式官方參考連結 <--連結--> 傳統上很多教學都是希望用HTTP-01來進行驗證 但是在CDN的環境之下很容易出錯 目前都是建議使用DNS-01 目前很多國際DNS服務都有支持這個方式了 如果還是用台灣傳統IDC代管的可能就無法使用該方式 建議還是用一些國際雲端服務比較安全 使用acme.sh配合Route 53進行證書的申請作業與驗證的方式 因為文章及方法很多 就列出幾篇文章提供大家做為參考 Route 53 Let’s Encrypt wildcard certificate with acme.
2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)
快取行為該如何設計 在 Day 05 Amazon Lightsail 也可以套用 CDN (AWS Cloudfront) 的時候建議預設是全部forword不做快取 這樣其實就會失去快取的效果但是最少是網站都是可以瀏覽的狀況 那要如何做快取才是最好的方式? 其實快取的標的基本上是靜態資源 這個靜態資源不一定是指實際有存在的檔案 如果是以php模擬出來的html也是可以接受的存在 快取的作法 在設定完之後如果點到Behaviors因該只有預設的一行 Default (*) 在這邊的意思是指預設或者是說如果沒有其他的條件就可以套用他 在預設都沒有快取之下我們就可以開始針對各種靜態資源進行快取拉 這也是在幾年的經驗之下最保險也是最不會出現意外故障的作法 假設我們的圖片都是png類型的圖片那該怎樣做快取呢? 先點選 Create Behaviors 現在新版的設定不多所以可以比較輕鬆的設定 設定重點 * Path Pattern 是指哪種檔案,如果要將所有png結尾的圖片作快取就可以在這邊填入『*.png』 * Cache Policy 選擇 Mana
2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)
host與https 其實不只是wordpress,任何的框架都有相同的問題 我們都會在程式碼中判斷URL是否正確 如果不符合就就進行301或302跳轉 但是通常的判斷條件只會有URL而不含http或https判定 而wordpress是屬於兩者都會判斷的一套軟體 這時候程式判斷的處理就格外重要 再導入Cloudftont的時這時候我都會建議一定要fotword Hosts參數以避免問題 同時間原站點也是要上SSL證書以避免轉換上的問題 最好的方式一定是 https://URL 進行訪問 Cloudfront 也適用同一個URL是最不容易出狀況的 但是如果預算不允許就要注意這個問題『如何告知您的web server產生的連結均要變更為https』 如果連結都寫好在資料庫還好改但是如果是程式產生的URL就要注意如果沒有處理好 會發生網站以經是https了但是裡面程式產生的URL都還是http造成無法顯示的狀況 發生這種情境最常出現的狀況就是網站破了 因為http的資源被瀏覽器禁止了 這點是相對不容易克服的 如真的在源站無法放SSL證書再來嘗試下面連結 H
2020ironman 12th – Modern Web - PHP on AWS 進化論 - 從單主機一路進化到Serverless,以WordPress與 laravel 為例 (中斷)
何謂CDN 內容傳遞網路(英語:Content Delivery Network或Content Distribution Network,縮寫:CDN)是指一種透過網際網路互相連接的電腦網路系統,利用最靠近每位使用者的伺服器,更快、更可靠地將音樂、圖片、影片、應用程式及其他檔案傳送給使用者,來提供高效能、可擴展性及低成本的網路內容傳遞給使用者。出自維基百科 為何要用CDN CDN其實有很多的好處 1. 讓USER離你的端點進一點,速度快點 2. 快取靜態資源,減低伺服器的負載 3. 降低被攻擊的風險,本土的陽春CDN除外,國際廠商的CDN基本上都幫你抵禦L3、L4的攻擊 4. 隱藏主機,很多人的主機還是低分散的狀態,知道的網站就可以猜說你的其他服務是不是在同一台 其實好處還有很多,只要是走http的服務基本上都一定可以套用到CDN上除非特殊需求不然很少沒辦法做到套用的。 AWS CDN (AWS Cloudfront) 使用說明前文 在列表跟事前準備文章的時候其實已經是一段時間之前了 在這段時間中AWS Lightsail 現在已經整合了Cloudfront 與