基於LAMP Stacks,我們不難找到一些主機管理軟件,提供相當完整的遠端網頁管理功能,包括SSH 連線、數據庫管理系統和DNS 管理等等,由於這些軟件提供易操作的管理介面,大大降低架站的技術門檻,讓用戶可以自行調整虛擬主機與及網站功能。 典型例子包括開源免費的Vesta 和Hestia ,而閉源收費則有cPanel,而其中一個甚受歡迎的control panel 「Vesta」已經有好幾年沒更新,至少近兩版Linux 20 和22 也用不上;於是有位程式員因公司所需(公司可能要upgrade Linux 吧)作出「分叉」,出了個功能相近的「Hestia」,亦開放了給社區用;然而,這「分叉」倒有很多bugs,至少難配合第三方軟件和某些servers ,社區有很多微言,後來這程式員懊惱地作出回應,其意思大概是:「大佬,我只係將Vesta 改動來配合我公司需要,朋友叫我不如順便攞出泥比大家玩;大家都明,你地可能又用埋其他第三方軟件,我一日得廿四小時,點跟!?同埋,配合呢d第三方軟件有風險,我唔想一夜之間我公司幾百個server 收曬皮…….」 我看了這段說話,笑了出來!係囉,人地無錢收架,老馮要跟既咩! 亦因如此,若你想該主機軟件能具備持續且穩定的維護服務,最好還是使用收費的cPanel。 而我們網站則有一個收費課程,內容維繞如何使用Hestia 管理我們的虛擬主機和網站功能,其連結如下: Control Panel of LAMP Stack: Hestia – RedTechSchool
WordPress 是一個以LAMP stack 為底層的網站內容管理框架,再加以其自身所用的php 程式編寫而成的軟體框架。WordPress 最初為方便開發者建置blogger 網貼,但其後的發展,愈來愈多plugins 可相配合;基本上,當下任何Web 愈用的功能,都可以藉WordPress 完成。 WordPress的核心軟體本身是開源免費的,由 WordPress.org 和廣大程式開發者維護更新,並它不屬於任何一家公司,供開發者免費所用; 加上 WordPress 每過一段時間,就會釋出新版本,確保了網站安全性的持續進化! 要注意的是,要下載免費版Wordpress ,可到wordpress.org 下載;至於wordpress.com 則有專人團隊提供維護和客服,是收費版。 使用WordPress 最具彈性的方法,就是開發者可使用LAMP 的相關程式語言,再配合WordPress 內置的php程式自建主題,以下課程就是以此為基,開發一個自媒體網站。 Basic WordPress – RedTechSchool
Web 應用程式的開首十年,大多開發者均使用 LAMP 堆疊來回應 Web 瀏覽器的請求,這是最傳統建置網站的方法。所謂堆疊,是指用於建置、管理和執行web應用的一組程式軟體,以支援應用程式的視覺呈現、資料庫、聯網和安全。 LAMP 堆疊包含四種軟體技術,這些技術在後台共同協作,以建立可執行的 Web 應用程式,LAMP 架構由以下四個部份組成。 1)Linux Linux 是一個開放原始碼作業系統,是堆疊的第一層,支援上層的其他元件。 2)Apache Apache 是一個開放原始碼 Web 伺服器,構成 LAMP 堆疊的第二層,Apache 模組可存放網站檔案,並透過使用 HTTP 的瀏覽器交換資訊。 3) MySQL MySQL 是開放原始碼關聯式資料庫管理系統,這是 LAMP 堆疊的第三層。LAMP 模組使用 MySQL 來存放、管理和查詢關聯式資料庫中的資訊。 PHP PHP 是一倜超文字預處理器,是 LAMP 堆疊的最後一層,它是一種指令碼語言,可讓網站執行動不斷變化的軟體資訊。 要注意的是,Web 開發人員通常會將 PHP 程式設計語言內嵌於 HTML 中,亦即撰寫在同一頁面上,以便在網站上顯示即時或更新的資訊。, 當您在瀏覽器中開啟網頁時,LAMP 堆疊將執行以下程序; 1)接收請求 Apache Web 伺服器會從瀏覽器接收傳入的請求。如果請求載入靜態檔案,Apache 伺服器會直接回應適當的內容。如果請求是針對動態內容,Apache 伺服器會將請求傳遞給 PHP 元件,PHP 元件會尋找並載入可處理請求的相應 […]
初學電腦程式語言時,最感到奇怪的,不是程式本身,這方面照跟就是了;但不同的電腦語言,會有不同的框架,譬如Android Studio,我常碰到的技術問題都在Gradle裏,但我根本不知Gradle 是甚麼,有何功能扮演?要了解這方面,就要明白甚麽叫編譯語言和直譯語言。 編譯語言在程式執行時先會透過編譯器將你的程式編譯成電腦看得懂的機器碼,譬如C++所編譯好的檔案就是我們在Windows裏的.exe檔案,編譯語言多數是靜態語言。他們會事先定義變數類別和做類別檢查等等,典型的編譯語言除卻C++外,還有 C、Rust、Go、Visual Basic、Swift、Obj-C等等。 直譯語言的執行器會將一行一行的程式碼直接編譯成機器碼,讓程式的類別檢測更靈活,但是緩慢的運行速度是直譯語言最大的壞處,最典型的直譯語言有Javascript和Python。 要注意的是,編譯語言的可執行檔(如C++的.exe 檔)通常是可以獨立運行的,但直譯語言則需要有一個適合的執行環境或者說是一個VM,才可以執行,例如Python3程式碼便需要在安裝了Python3的電腦中才可以運行,也就是說python3 程序不可能在舊python2電腦中運行了;又例如 JavaScript 只能使用瀏覽器提供的功能,它無法獨立執行 (看起來像獨立執行,實際上卻是系統自動在背後建立執行環境,如 Chrome 的V8這個JavaScript 執行引擎)。 反之,C++17雖然也只能在新電腦中編譯,但他的可執行檔甚至連不支援C++的電腦都可以運行。然而,編譯語言在使用Library/Modules的時候,除了下載下來,還需要用一個建構系統去連結不同的函式庫和你的不同程式檔,如在C++當中有CMake ,在Rust中則有Cargo,而Java 的其中一個建構系統就是Gradle。 程式師為了改善編譯語言以及直譯語言的缺點,因而發展出即時編譯的技術,這種技術混合了編譯語言與直譯語言的優點,如同編譯語言,會先把程式原始碼編譯成中介碼 (Bytecode)。到執行期時,再將中介碼(bytecode)直譯,之後執行。使用即時編譯技術的語言會比純編譯語言來得慢一些,但是卻又擁有直譯語言的特性,代表語言有 Java和C#。 還有一款叫組譯語言,對應粒CPU內核的基本指令集,是針對電腦的基作操作而已,不太重要囉,可以不理。
傳統LAMP stack 架站,每當使用者在瀏覽器每次要求某網頁頁面時,侍服器便先在頁面「渲染(render)」好樣式和資料,才將頁面回傳到瀏覧器。正因如此,有時渲染和傳輸來不及,瀏覧器便會短暫出現白頁,須等待侍服器徹底的回傳頁面,這使得使用者體驗大大降低。 約在2010年,JavaScript 結合chrome 的直繹器V8 引挈,編製了Nodejs程式,從而可建立一個執行環境(runtime environment 」,令JavaScript 跳出瀏覧器,直接在電腦的作業系統中運行;由此,架站方法起了結構性改變。 過往後端PHP所做的事,逐步移向前端,由前端的三個主要JavaScript 框架:Angular、React 或Vue代勞。 最關鍵的分別是後端再不是回傳整個網頁「頁面」,而是只透過前端程式碼呼叫API 來回傳「資料」,而資料多以JSON 格式傳輸;至於渲染的工作,則一次過由侍服器傳輸所有頁面的程式碼到瀏覧器,再由前端JavaScript的框架(Angular、React 或Vue)控制和負責渲染頁面樣式。 這架站方法無異提供了傳輸的效能,加強了使用者的體驗,典型的堆疊方法有MEAN stack 和JAM stack。
在頁面互動層面上,有些情況所牽涉的資料較為敏感,並不能公開,亦即不會隨頁面回傳到前端使用者處,而且後端亦需要一個地方儲存資料,典型的例子是會員名稱和密碼與及網上購物時的購物籃和信用咭資料。 於是,侍服器便出現後端的程式語言和資料庫,最常用的分別是PHP和MySQL,前者負責拮取後者的可公開的資料隨頁面回傳給前端,同時亦監控著前端的使用者狀態(state),確保是同一身份在操作。 發展至這個地步,是一個完整的網站堆疊,名為LAMP stack ,包括了四組程式: Linux(基本作業系統)、Apache(侍服器程式)、Mysql (資料庫)和Php(後端程式語言),是傳統建構網站的方法。
主導著靜態頁面的版面設計是標記語言HTML和基於規則的語言CSS所支配,前者支配頁面的結構,後者則是控制各HTML元件的外貌樣式;嚴格而言,這兩種語言均不是程式語言。 靜態頁面只讓使用者瀏覧資料,欠缺互動,所以網站的頁面發展很快就由靜態轉為動態頁面,一些頁片的互動部份,如用者按下某HTML元件會產生某些特殊的動畫效果,則需要用上程式語言JavaScript,由於這些程式是寫在頁面底部,所以叫「腳本語言(scripts) 」,這些腳本程式會隨頁面從後端傳送至前端,程式碼是公開可見的,但因這些程式也只是牽涉頁面的互動效果,不涉敏感個人資料,讓公眾看見也無妨。 此階段JavaScript 的用途並不太顯著,只令頁面外觀上多點生氣,並未主導整個網站堆疊與構成。
1989年,互聯網面世,興起之初,每個網頁內容都是由副檔名為html的檔案所定義 。 使用者使用網頁瀏覽器 (web Browser) 對特定的 URI 發起 HTTP請求,請求會被傳送到指定的網頁伺服器 (web Server) 上,網頁伺服器會將對應的HTML檔案傳回給使用者的網頁瀏覽器中,經過網頁瀏覽器的解析後,便呈現HTML的內容於畫面上。 比方說,我們在電腦的網頁瀏覽器上輸入一個網址,如https://redtechschool.online ,瀏覽器便會在網路找尋這網址的相關侍服器並作出頁面的要求,侍服器便會回傳index.html 這主頁頁面到該瀏覽器,並在網頁瀏覽器上作出渲染(rendering),由此展現網頁內容。 若向侍服器要求的是另一網頁頁面,只要知道該頁面的html 檔案之名稱,譬如是blog.html,那我們可在網頁瀏覽器上輸入: https://redtechschool.online/blog 侍服器便會回傳該網頁之內容;當然,實作往往中主頁已有相關的按鈕連結讓使用者按下,而不用在網頁瀏覽器上輸入。 上圖顯示了這兩項操作。 這段時期,瀏覽器可做的事情非常有限,大多的網頁也只是顯示資訊而已。
傳統網站的堆疊方法「LAMP Stack」,是前後端程式也在同一頁面上(試想想index.php 這頁面),然後放在伺服器等待使用者透過瀏覧器作出頁面的要求。當使用者開啟 Web 的某網站時,伺服器會產生顯示相關HTML 之頁面,然後將這些頁面傳送給使用者。 這個過程是相當緩慢的,在使用者可以檢視這些頁面之前,他們必須等待後端應用程式執行和產生 HTML,以及等待 HTML 到達他們的裝置。 JAM Stack 在這方面改善了速度,為使用者帶來更快的使用者體驗和為開發者帶來更簡單的建置網站的方法。 J 代表JavaScript,是 Web 應用的程式設計語言。 A 代表API(應用程式程式設計介面),是一種從第三方應用程式要求資料的方法。 M 代表Markup ,是為瀏覽器提供格式化指令的代碼(HTML 和 CSS)。 在 JAMstack Web 應用程式中,會預先建立好HTML 和 CSS 標記代碼,並儲存在內容傳遞網路 (CDN) 中;不同於在伺服器端執行一個單一的後端應用程式來產生動態內容,此類應用程式的動態元件是基於 API,而JavaScript 則負責呼叫 API。 比方說,使用 JAMstack 方法建置Web 應用程式,開發者不用編寫整個後端應用程式,而是建立了一系列靜態且輕量級的 HTML 頁面,並將其儲存在 CDN 中。當使用者開啟應用程式時,CDN 會立即將相應的 HTML 頁面交付給使用者,因為 CDN 比網站的伺服器更接近使用者,再配合呼叫 API 來渲染動態資料,載入的速度較快。 而從開發者角度看,亦省卻了大量編寫後端程式代碼的工作。 如欲深入了解這網站建置的進化過程,可學習本網站此課程。 JAM Stack – […]