如何將Raspberry Pi用作Web伺服器?

您是否知道Raspberry Pi基金會的官方網站是託管在Raspberry Pi板集群上的?

這種配置在基金會最繁忙的一天—Raspberry Pi 4發佈的時候—成功地為數千萬的訪問者提供了服務。

那麼為何不也這樣做呢?

這種Pi集群位於資料中心,並且基於企業交換機、負載平衡器和檔案伺服器來將自己的自訂SD卡映射寫入Pi。

您將無法從帶有無線路由器和家庭互聯網的休息室獲得可比較的結果(即使您的路由器和互聯網非常好)。

您還必須保證安全性。如果您把您的Pi提供給公共互聯網,而有攻擊者破解了它,那麼他們很有可能會訪問您的本地網路。這就不好了。

raspberry pi

如果您決定要使用Raspberry Pi來託管公共互聯網上的網站,那麼最好花錢請提供Raspberry Pi託管服務的人來為您處理。如果您是用於商業用途,那更要採取這種方式。

Raspberry Pi Web伺服器的免費替代品

不過,其實以每月$0.00的價格在雲上託管web伺服器並不難。因為大型雲企業很樂意在他們的免費服務中為您提供一個小型VPS。

您無法透過這種級別的基礎平臺來啟動熱門的新技術初創公司,但是對於個人博客,甚至本地企業或者自由職業者網站來說,這已經足夠了。您只需要具備在Raspberry Pi上執行相同任務時所用的Linux技能就可以完成該操作。

使用Raspberry Pi的意義

Raspberry Pi作為一種廉價、節能的用於託管本地網路中的網站和web應用程式的方式,具有非常重要的意義。

這是一個很棒的測試平臺和開發平臺,您可以擁有技術核心的完全存取權限。您也不必擔心在對其進行魯棒性測試時的頻寬費用或者使用政策是否可接受。

這也是在本地網路上為中小型企業託管wiki之類網站的絕佳方式。但是需要確保設置了自動備份。

您可能正在使用您的Pi來製作具有某種web介面或儀錶板的IoT設備原型。對於這種工作,安裝web伺服器是唯一正確的方法。

最後,在Raspberry Pi上安裝web伺服器的最佳理由之一是督促您開始學習web伺服器的相關知識。

選擇一種Web伺服器

到目前為止,兩個最流行的Web伺服器是Apache和Nginx(讀作Engine-X),這些都是您可以自由安裝和使用的開源項目。

Apache於1995年首次發佈,幾乎與web同時發佈,並且至今仍是互聯網上最受歡迎的Web伺服器。

它擁有自己的模組來處理動態內容,例如PHP,並且它的廣泛使用也顯示出其文檔相當齊全。這種伺服器是一個強大的多面手,可以輕鬆地為各個目錄提供單獨的配置。這些特點使其成為了一個很好的入門選擇。

Pi server

編寫Nginx是為了解決Apache在處理許多併發用戶任務時存在的局限性。它擅長處理靜態內容,在處理動態內容時需要用到外部處理器。

在本指南中,我們將安裝Apache。Nginx的確具有優勢,但是對於Raspberry Pi的典型使用案例來說不是那麼重要。不過,如果您正在使用您的Pi來製作可以擴展的原型,那麼也可以考慮學習使用Nginx。

事實上,將兩者一起使用也很常見,將Nginx用在前端管理靜態資源,後端使用Apache來呈現動態內容。

其他主要的web伺服器有:

• Node.js已經安裝在了您的Raspberry Pi中。它不是傳統的web伺服器,而是Javascript的運行時環境。雖然您通常會使用Apache或Nginx之類的伺服器作為前端,但是它可以同時處理多個連接,這對大型web應用程式來說非常方便。

• 您的Raspberry Pi上還安裝有Python的http.server模組。這種模組對測試和開發很有益,但是對於web伺服器來說尤其方便。如果您正在用Python編寫web應用程式,那麼只需要用幾行代碼就可以設置一個簡單的web伺服器。

• Lighttpd非常有效地利用了系統資源,所有開發嵌入式系統和物聯網設備的人應該都對此很感興趣。

在Raspberry Pi上安裝Apache

本指南是以Raspberry Pi OS Buster來編寫的,但是如果您使用的是早期版本的Raspbian,也不會有太大區別,Apache是一款非常成熟的軟體。

您將需要互聯網連接來安裝這些套裝軟體。

進入終端,並透過輸入以下內容更新您的作業系統:

sudo apt update && sudo apt upgrade -y

更新完成後,使用以下命令安裝Apache:

sudo apt install apache2 -y

您現在可以透過流覽Raspberry Pi來檢測Apache是否正確安裝。如果您使用的是Pi的web流覽器,請在位址欄中輸入 http://localhost.com/ 。

如果是在本地網路中的其他設備上,您還需要使用IP位址。如果您不知道IP位址,可以透過以下命令獲取:

hostname -I

您的流覽器將載入出如下所示的頁面。

恭喜您擁有了一個Web伺服器!

這很容易,對不對?

想要處理靜態內容,您只需要完成一個簡單的設置:每次頁面在流覽器中載入時顯示的內容都完全相同,直到您自己對檔進行編輯為止。

那麼讓我們來對其中的一個檔進行編輯,輸入:

sudo nano /var/www/html/index.html

向下滾動檔,直到找到“Apache2 Debian Default Page(Apache2 Debian預設頁面)”行,然後將其更改為任何您喜歡的新的標題。保存檔,然後在流覽器中重新載入頁面。

靜態網站速度快,維護簡單,並且提供了許多可嘗試的內容。對於簡單的博客、商業網站或者資訊網站,這也許可以滿足您的所有需求。只需要將您的網站部署到目錄/var/www/html/中,Apache將會為其提供服務。

當靜態功能不能滿足需求時

相比於每次都顯示相同的內容(伺服器透過執行代碼生成的頁面),您可能會希望能夠提供動態內容。

也許這樣的話使用者就可以在頁面中編輯或添加內容,或者是在自己之前的內容上添加新的頁面(比如用於wiki、論壇或者博客上的評論部分)。

也可能是為了讓您的設備可以在儀錶板上顯示資料,無論是從線上服務、資料庫還是從連接到GPIO引腳上的設備所收集的資料。

您可以使用多種指令碼語言來構建動態網站,例如Java、 Perl、PHP、 Python或者Ruby。您甚至可以使用在Go、C++ 或者C中編寫的編譯二進位腳本。

PHP是一個很好的入門選擇,因為最廣泛使用的開源CMS平臺,如WordPress、Joomla! 和Drupal都基於該語言建立。並且,透過這些平臺可以很容易地構建大部分的網站。

安裝PHP

將PHP函數添加到Apache中只需要一個命令:

sudo apt install php libapache2-mod-php -y

透過將索引頁面替換為PHP頁面來測試安裝是否成功。刪除index.html並在nano中打開一個名為index.php的新文件。

sudo rm /var/www/html/index.html

sudo nano /var/www/html/index.php

現在輸入以下指令,然後保存檔:

<?php phpinfo(); ?>

然後在流覽器中重新載入頁面。您應該看到PHP函數呈現出如下內容:

接下來您要做什麼?

接下來要做的工作取決於您自己。

Web的基本構建塊是HTML和CSS,所以開始嘗試兩者之一是個不錯的注意。

透過使用像Bootstrap這樣的前端框架,您可以避免很多HTML和CSS方面的工作,因為大部分內容已經為您編寫好了。

如果您想完全避免代碼的編寫,可以使用Hugo這樣的靜態網站構建器,它可以直接生成整個網站。

您掌握了這些內容之後,可能會想嘗試創建動態網站。

您還可能會需要資料庫存儲和資料檢索功能。如果您把MariaDB(或者MySQL)添加到已經構建的web伺服器中,將會擁有所謂的LAMP堆疊(Linux、Apache、MySQL、PHP)。

LAMP堆疊是許多網站的基礎平臺,其中包括最受歡迎的平臺:WordPress。同時,它也是託管wiki、論壇等網站的很好的選擇。

也許您更想使用Python 而不是PHP。我的意思是,如果您正在Raspberry Pi上製作某種IoT設備或家庭自動化系統的原型,那麼您很有可能已經在使用它了。

讓Apache運行Python需要多做一些工作,因為您需要配置通用閘道介面或CGI。如果遇到了困難,那麼就使用Python內置的http.server模組進行開發和測試,直到找到解決方案。

Python還提供了流行的web框架,包括Django和Flask。兩者中,Flask更簡單、輕量。

我們到現在為止的探索只是觸及了表面。請繼續享受這一過程,看看下一步會有什麼發現。