您是否知道Raspberry Pi基金會的官方網(wǎng)站是托管在Raspberry Pi板集群上的?
這種配置在基金會最繁忙的一天—Raspberry Pi 4發(fā)布的時(shí)候—成功地為數(shù)千萬的訪問者提供了服務(wù)。
那么為何不也這樣做呢?
這種Pi集群位于數(shù)據(jù)中心,并且基于企業(yè)交換機(jī)、負(fù)載平衡器和文件服務(wù)器來將自己的自定義SD卡映像寫入Pi。
您將無法從帶有無線路由器和家庭互聯(lián)網(wǎng)的休息室獲得可比較的結(jié)果(即使您的路由器和互聯(lián)網(wǎng)非常好)。
您還必須保證安全性。如果您把您的Pi提供給公共互聯(lián)網(wǎng),而有攻擊者破解了它,那么他們很有可能會訪問您的本地網(wǎng)絡(luò)。這就不好了。
如果您決定要使用Raspberry Pi來托管公共互聯(lián)網(wǎng)上的網(wǎng)站,那么最好花錢請?zhí)峁㏑aspberry Pi托管服務(wù)的人來為您處理。如果您是用于商業(yè)用途,那更要采取這種方式。
Raspberry Pi Web服務(wù)器的免費(fèi)替代品
不過,其實(shí)以每月$0.00的價(jià)格在云上托管web服務(wù)器并不難。因?yàn)榇笮驮破髽I(yè)很樂意在他們的免費(fèi)服務(wù)中為您提供一個小型VPS。
您無法通過這種級別的基礎(chǔ)平臺來啟動熱門的新技術(shù)初創(chuàng)公司,但是對于個人博客,甚至本地企業(yè)或者自由職業(yè)者網(wǎng)站來說,這已經(jīng)足夠了。您只需要具備在Raspberry Pi上執(zhí)行相同任務(wù)時(shí)所用的Linux技能就可以完成該操作。
使用Raspberry Pi的意義
Raspberry Pi作為一種廉價(jià)、節(jié)能的用于托管本地網(wǎng)絡(luò)中的網(wǎng)站和web應(yīng)用程序的方式,具有非常重要的意義。
這是一個很棒的測試平臺和開發(fā)平臺,您可以擁有技術(shù)核心的完全訪問權(quán)限。您也不必?fù)?dān)心在對其進(jìn)行魯棒性測試時(shí)的帶寬費(fèi)用或者使用政策是否可接受。
這也是在本地網(wǎng)絡(luò)上為中小型企業(yè)托管wiki之類網(wǎng)站的絕佳方式。但是需要確保設(shè)置了自動備份。
您可能正在使用您的Pi來制作具有某種web界面或儀表板的IoT設(shè)備原型。對于這種工作,安裝web服務(wù)器是唯一正確的方法。
最后,在Raspberry Pi上安裝web服務(wù)器的最佳理由之一是督促您開始學(xué)習(xí)web服務(wù)器的相關(guān)知識。
選擇一種Web服務(wù)器
到目前為止,兩個最流行的Web服務(wù)器是Apache和Nginx(讀作Engine-X),這些都是您可以自由安裝和使用的開源項(xiàng)目。
Apache于1995年首次發(fā)布,幾乎與web同時(shí)發(fā)布,并且至今仍是互聯(lián)網(wǎng)上最受歡迎的Web服務(wù)器。
它擁有自己的模塊來處理動態(tài)內(nèi)容,例如PHP,并且它的廣泛使用也顯示出其文檔相當(dāng)齊全。這種服務(wù)器是一個強(qiáng)大的多面手,可以輕松地為各個目錄提供單獨(dú)的配置。這些特點(diǎn)使其成為了一個很好的入門選擇。
編寫Nginx是為了解決Apache在處理許多并發(fā)用戶任務(wù)時(shí)存在的局限性。它擅長處理靜態(tài)內(nèi)容,在處理動態(tài)內(nèi)容時(shí)需要用到外部處理器。
在本指南中,我們將安裝Apache。Nginx的確具有優(yōu)勢,但是對于Raspberry Pi的典型使用案例來說不是那么重要。不過,如果您正在使用您的Pi來制作可以擴(kuò)展的原型,那么也可以考慮學(xué)習(xí)使用Nginx。
事實(shí)上,將兩者一起使用也很常見,將Nginx用在前端管理靜態(tài)資源,后端使用Apache來呈現(xiàn)動態(tài)內(nèi)容。
其他主要的web服務(wù)器有:
? Node.js 已經(jīng)安裝在了您的Raspberry Pi中。它不是傳統(tǒng)的web服務(wù)器,而是Javascript的運(yùn)行時(shí)環(huán)境。雖然您通常會使用Apache或Nginx之類的服務(wù)器作為前端,但是它可以同時(shí)處理多個連接,這對大型web應(yīng)用程序來說非常方便。
? 您的Raspberry Pi上還安裝有Python的http.server模塊。這種模塊對測試和開發(fā)很有益,但是對于web服務(wù)器來說尤其方便。如果您正在用Python編寫web應(yīng)用程序,那么只需要用幾行代碼就可以設(shè)置一個簡單的web服務(wù)器。
? Lighttpd 非常有效地利用了系統(tǒng)資源,所有開發(fā)嵌入式系統(tǒng)和物聯(lián)網(wǎng)設(shè)備的人應(yīng)該都對此很感興趣。
在Raspberry Pi上安裝Apache
本指南是以Raspberry Pi OS Buster來編寫的,但是如果您使用的是早期版本的Raspbian,也不會有太大區(qū)別,Apache是一款非常成熟的軟件。
您將需要互聯(lián)網(wǎng)連接來安裝這些軟件包。
進(jìn)入終端,并通過輸入以下內(nèi)容更新您的操作系統(tǒng):
sudo apt update && sudo apt upgrade -y
更新完成后,使用以下命令安裝Apache:
sudo apt install apache2 -y
您現(xiàn)在可以通過瀏覽Raspberry Pi來檢測Apache是否正確安裝。如果您使用的是Pi的web瀏覽器,請?jiān)诘刂窓谥休斎?http://localhost.com/ 。
如果是在本地網(wǎng)絡(luò)中的其他設(shè)備上,您還需要使用IP地址。如果您不知道IP地址,可以通過以下命令獲取:
hostname -I
您的瀏覽器將加載出如下所示的頁面。
恭喜您擁有了一個Web服務(wù)器!
這很容易,對不對?
想要處理靜態(tài)內(nèi)容,您只需要完成一個簡單的設(shè)置:每次頁面在瀏覽器中加載時(shí)顯示的內(nèi)容都完全相同,直到您自己對文件進(jìn)行編輯為止。
那么讓我們來對其中的一個文件進(jìn)行編輯,輸入:
sudo nano /var/www/html/index.html
向下滾動文件,直到找到“Apache2 Debian Default Page(Apache2 Debian默認(rèn)頁面)”行,然后將其更改為任何您喜歡的新的標(biāo)題。保存文件,然后在瀏覽器中重新加載頁面。
靜態(tài)網(wǎng)站速度快,維護(hù)簡單,并且提供了許多可嘗試的內(nèi)容。對于簡單的博客、商業(yè)網(wǎng)站或者信息網(wǎng)站,這也許可以滿足您的所有需求。只需要將您的網(wǎng)站部署到目錄/var/www/html/中,Apache將會為其提供服務(wù)。
當(dāng)靜態(tài)功能不能滿足需求時(shí)
相比于每次都顯示相同的內(nèi)容(服務(wù)器通過執(zhí)行代碼生成的頁面),您可能會希望能夠提供動態(tài)內(nèi)容。
也許這樣的話用戶就可以在頁面中編輯或添加內(nèi)容,或者是在自己之前的內(nèi)容上添加新的頁面(比如用于wiki、論壇或者博客上的評論部分)。
也可能是為了讓您的設(shè)備可以在儀表板上顯示數(shù)據(jù),無論是從在線服務(wù)、數(shù)據(jù)庫還是從連接到GPIO 引腳上的設(shè)備所收集的數(shù)據(jù)。
您可以使用多種腳本語言來構(gòu)建動態(tài)網(wǎng)站,例如Java、 Perl、PHP、 Python或者Ruby。您甚至可以使用在Go、C++ 或者C中編寫的編譯二進(jìn)制腳本。
PHP是一個很好的入門選擇,因?yàn)樽顝V泛使用的開源CMS平臺,如WordPress、Joomla! 和Drupal都基于該語言建立。并且,通過這些平臺可以很容易地構(gòu)建大部分的網(wǎng)站。
安裝 PHP
將PHP函數(shù)添加到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
現(xiàn)在輸入以下指令,然后保存文件:
然后在瀏覽器中重新加載頁面。您應(yīng)該看到PHP函數(shù)呈現(xiàn)出如下內(nèi)容:
接下來您要做什么?
接下來要做的工作取決于您自己。
Web的基本構(gòu)建塊是HTML和CSS,所以開始嘗試兩者之一是個不錯的注意。
通過使用像Bootstrap這樣的前端框架,您可以避免很多HTML和CSS方面的工作,因?yàn)榇蟛糠謨?nèi)容已經(jīng)為您編寫好了。
如果您想完全避免代碼的編寫,可以使用Hugo這樣的靜態(tài)站點(diǎn)構(gòu)建器,它可以直接生成整個網(wǎng)站。
您掌握了這些內(nèi)容之后,可能會想嘗試創(chuàng)建動態(tài)網(wǎng)站。
您還可能會需要數(shù)據(jù)庫存儲和數(shù)據(jù)檢索功能。如果您把MariaDB(或者M(jìn)ySQL)添加到已經(jīng)構(gòu)建的web服務(wù)器中,將會擁有所謂的LAMP堆棧(Linux、Apache、MySQL、PHP)。
LAMP堆棧是許多網(wǎng)站的基礎(chǔ)平臺,其中包括最受歡迎的平臺:WordPress。同時(shí),它也是托管wiki、論壇等網(wǎng)站的很好的選擇。
也許您更想使用Python 而不是PHP。我的意思是,如果您正在Raspberry Pi上制作某種IoT設(shè)備或家庭自動化系統(tǒng)的原型,那么您很有可能已經(jīng)在使用它了。
讓Apache運(yùn)行Python需要多做一些工作,因?yàn)槟枰渲猛ㄓ镁W(wǎng)關(guān)接口或CGI。如果遇到了困難,那么就使用Python內(nèi)置的http.server模塊進(jìn)行開發(fā)和測試,直到找到解決方案。
Python還提供了流行的web框架,包括Django和Flask。兩者中,F(xiàn)lask更簡單、輕量。
我們到現(xiàn)在為止的探索只是觸及了表面。請繼續(xù)享受這一過程,看看下一步會有什么發(fā)現(xiàn)。
評論