Skip to content

Latest commit

 

History

History
84 lines (55 loc) · 7.93 KB

File metadata and controls

84 lines (55 loc) · 7.93 KB

一開始看到這周作業要求時,完全懂

  1. 建置環境是什麼意思?
  2. 作用為何?
  3. 不理解部署的概念,一切到底在幹嘛?

多數同學作業已經寫好了分解步驟,就算一步一腳印部署成功,我還卡關在問「為什麼」的階段,於是中間花了一些時間去弄懂。這篇並不會像其他文章一樣手把手教學,而是從自己找到的資料和閱讀完的理解,去解釋部署的概念。

一開始我認為部署是為了要運作 PHP 程式碼,就像要跑 JavaScript 一樣,我們需要有瀏覽器或 Node.js 來作為開發環境,它是運作程式碼的基本條件,你需要一個適合的「平台」支援你要做的事情。 以現實中的例子來看,你想要分享影音,就去 Youtube、TikTok 這樣的平台,想分享生活方式、攝影作品最好就用 Instagram 推廣,不同的目標決定了使用者會選擇不同的平台媒介去實現。

而我們運用在軟體開發上的平台,可以稱作 Web application stacks(技術棧),指的是一組綁在一起、用來運行動態網站或伺服器的開源軟體,是用來開發網頁應用程式的基礎架構,更簡單的說,就是程式設計師的工具箱,它需要四個主要元素來組成:一套作業系統、網頁伺服器、資料庫和一種程式語言。

而我們想要建置能夠運行 PHP/Laravel 的開發環境,最常見的組合就是 LAMP,由 Linux(作業系統)+Apache(網頁伺服器)+MySQL(資料庫)+PHP(程式語言),市面上當然還有其他軟體,只是前者經常被組合在一起使用,例如 WAMP 就是以 Windows 取代 Linux 作為該開發環境的作業系統。

在理解 LAMP 名詞之意後,進一步來看它的四個元素:

  • Linux Linux 處在最低層,提供作業系統,其他每個組件實際上也在 Linux 上運行。但並不一定要局限於 Linux 上,就像前面提到的,也可以用 Windows 取代 Linux!
  • Apache 次底層是 Apache,它是一個 Web 伺服器,提供可讓用戶獲得 Web 頁面機制的服務,超過 65% 的網站都使用它作為網頁伺服器,而 PHP 組件實際上是在 Apache 中,要把他們看成一個整體(後面補充)
  • MySQL 提供 LAMP 系統的資料庫,在網頁應用程式中,所有數據、產品、帳戶和其他類型的信息都存放在這個資料庫中,可通過 SQL 語言查詢到這些信息。
  • PHP 是一門簡單有效的程式語言,像是黏著劑,可以將 LAMP 系統所有其他的組件黏合在一起,使用它去訪問 MySQL 資料庫中的內容和 Linux 提供的一些特定的動態內容

了解各元素之後,就可以理解他們彼此的關係,Linux 是作為底層承載的平台,我們把 Apache、MySQL、PHP 安装在它上面運行,所以可以理解為 Web 服務最主要就是建構在 Apache + MySQL + PHP。

當然,也不一定要全安裝在一台機器,像 MySQL 可安裝在其他機器上,反正他們彼此之間是可以透過網路連結起來。

前面有提到,要把 PHP 和 Apache 看成一個整體,這是因為 PHP 實際上是以一個模塊的形式和 Apache 结合在一起,由於 Apache 不能直接與 MySQL 互動,它只能通過 PHP 去 MySQL 裡面讀取數據或操作,PHP 再將操作完的結果返回给 Apache,Apache 再反饋給使用者,這種互動讀取數據的請求,我們稱為「動態請求」。

而網站上需要載入的圖片或素材,同樣也是到 Apache 上請求,但他們並不是儲存在 MySQL 資料庫裡,而是存在操作系統(Linux)的某個目錄上,Apache 可以直接讀到這些素材返回給使用者,這種是「靜態請求」。

這些要素構成了開發環境,也讓程式碼得以運行。

實際操作 Q&A

回頭來看老師附上的教學文章,有了以上的知識,大致能夠解答以下的問題:

Q: 為什麼要購買遠端主機?一定是用 AWS EC2 嗎?

提供主機的服務很多,像是 AWS、Digital Ocean、GCP 都行,重點是你需要一個地方來託管你的網站,不可能自己建立實體主機。 因為一台實體主機的價格非常昂貴,還需要有專業人員進行架設、運行與管理,所以才會有「虛擬主機」的出現,由用戶們共同去分擔相關硬體設備、網路頻寬、電信線路、高技術性的主機維護工作。

舉個直白的例子,如果有錢的話,每個人當然想買一棟樓自己住,可惜台北居住大不易,昂貴的地坪、建物不斐的造價、網路基地台的提供、水電的牽線服務、大樓管理費用、垃圾處理......零零總總一大堆,往往只能花個 8000 塊租到一個 6 坪小雅房,由全體住戶去分攤上述費用。

遠端主機的服務,就是有台「真實的實體主機」存在,像是這棟大樓,經過軟體程式切割成數百個獨立的虛擬空間,而這些虛擬空間就成為一個各自獨立的「虛擬主機」來出租給需要的人,切割出來的「虛擬主機」一樣能夠建立網站、資料庫、電子郵件伺服器或是安裝各種管理系統與架設平台系統,就如同真實的主機一樣。

而 AWS EC2 買的就是虛擬主機服務,想要讓別人可以找到你的網站,就必須在網路的大千世界租一個地方,用來放置你的程式碼、讓它運行。

Q: 啟動虛擬主機,這些步驟代表什麼?

  • 選擇「Ubuntu Server 18.04 LTS (HVM), SSD Volume Typ」

虛擬主機會分不同的作業系統,就想像成租屋的類型多樣,高樓大廈、公寓、集合住宅等等,都是居住環境的一種型態,Ubuntu 也只是眾多 Linux 發行版的其中一個作業系統而已,可以想成就是版本不同。

  • IPv4 Public IP 代表什麼?

每一個網站,必定有一個網域名稱以及虛擬主機才能被訪問。

你可以將網域名稱視為是門牌地址、而虛擬主機則視為實體房屋。當你在瀏覽器輸入網址 URL 要拜訪時,瀏覽器會自動解析該網址,尋找到該網址所對應的虛擬主機位置(IP 位置),並請求網頁內容,返回呈現給使用者。

Q: 虛擬主機買好了,然後呢?

租了房子、也有了地址(IP 位置),終於在網路世界安頓下來,這時通過「遠端連線」方式來登入,想像我們是在坐在工作機前面操控 Linux 主機,接下來就是建置能夠運行 PHP/Laravel 的開發環境,也就是設定 LAMP。

Q: 為什麼需要域名?域名還要用買的?

關於域名系統的介紹可以參考下方簡答第一題,簡單來說,我們需要 DNS 幫我們轉換域名成 IP 位置、讓電腦讀懂,就像地圖上的經緯度,我們需要座標系統來幫我們轉換成地址、定位到 Google 地圖上面,兩者道理是一樣的。


關於部署細節,參考資料的前兩項已經足夠詳細,感謝其他同學的支援,本篇心得主要是記錄自己逐步理解部署概念的過程,有些例子不夠嚴謹正確,旨在於讓自己能懂,還請助教在這部分多多提點 :-)

參考資料