您是否知道Raspberry Pi基金会的官方网站是托管在Raspberry Pi板集群上的?
这种配置在基金会最繁忙的一天—Raspberry Pi 4发布的时候—成功地为数千万的访问者提供了服务。
那么为何不也这样做呢?
这种Pi集群位于数据中心,并且基于企业交换机、负载平衡器和文件服务器来将自己的自定义SD卡映像写入Pi。
您将无法从带有无线路由器和家庭互联网的休息室获得可比较的结果(即使您的路由器和互联网非常好)。
您还必须保证安全性。如果您把您的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,并且它的广泛使用也显示出其文档相当齐全。这种服务器是一个强大的多面手,可以轻松地为各个目录提供单独的配置。这些特点使其成为了一个很好的入门选择。
编写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更简单、轻量。
我们到现在为止的探索只是触及了表面。请继续享受这一过程,看看下一步会有什么发现。