和许多喜欢摆弄技术的人一样,我现在在我的房子周围收集了一些小型但不断增长的树莓派盒子。我将它们用于各种项目:PiHole 网络广告拦截器、OctoPi 3D 打印服务器和 Minecraft 服务器等等。
然而,我做过的最定制化的项目是设置一个树莓派作为 Web 服务器来托管我自己的博客站点 mandclu.com。这个想法是我在几年前为一次采访做研究时产生的。
自项目启动以来,它已经发生了显着的变化,所以我认为分享一下会很有趣。
为什么要运行自己的 Web 服务器?
我在大约二十年前开始构建网站。那时我使用了各种托管解决方案,包括一个(几乎)裸机的 Linode 实例,在那里我必须自己安装和配置所有软件。
最近我在一家主要的托管公司有一个小型帐户,我用它来服务几个个人项目。随着时间的推移,我发现我对将时间用于自由职业项目越来越不感兴趣,因此成本变得越来越难以justify。由于其托管平台中内置的安全措施,我也感到因我可以使用的工具以及我可以使用它们的方式而受到限制而感到沮丧。
简而言之,我想运行自己的服务器,因为它将是自由的,在言论自由、免费啤酒的意义上,而且,正如我很快就会了解到的,免费小狗。
我会建议每个人都托管自己的网站吗?绝对不会。这是一个有趣的项目,我在此过程中学到了很多东西,但如果我的网站因为本地电源或网络中断而宕机几个小时(或可能更长时间),我可以接受。
在之前的一篇文章中,我讨论了为什么我选择 Drupal 作为我的站点。虽然我认为这是一个强大且无限灵活的解决方案,但以下步骤主要适用于您可能想要托管的任何基于 PHP 的 CMS 或开发框架。
树莓派 Web 服务器:首次航行
我为这个项目购买了一个带有 4Gb RAM 的树莓派 4。我看到一些文档表明,您与 Pi 一起使用的 MicroSD 卡的质量对性能有显着影响,因此我也尝试寻找一张不错的卡。总而言之,我可能花了接近 100 美元,包括外壳和电源适配器。
第一个决定是使用什么操作系统。CentOS 似乎是暴露于互联网的最佳选择,所以我决定选择它。事实证明,CentOS 与我使用过的任何其他 Linux 版本都有一些明显的不同,尤其因为它想要在每次重启时重置所有服务器日志的权限。我最终弄清楚了如何优雅地处理这个问题,但这增加了冒险性。
接下来,是时候设置 Pi 以充当 Web 服务器了。我知道一些超级聪明的 DevOps 人员更喜欢使用 Nginx 作为其项目的 Web 服务器,但我个人更熟悉 Apache。此外,Drupal 使用 .htaccess
文件实施一些安全控制,因此如果选择 Nginx,您需要在服务器配置中管理等效的限制。但事实是,我最想做的是选择我熟悉的东西。
幸运的是,快速搜索可以找到各种关于如何在 CentOS(或您首选的 Linux 版本)上安装 LAMP 堆栈其余部分的教程。更棒的是,像 Yum 这样的现代软件包管理器使该过程相对轻松。Drupal 也有一些PHP 要求,因此需要额外的步骤来确保我满足这些要求。最后,我喜欢使用APCu作为 PHP 原生数据缓存,以帮助加快 PHP 站点的交付速度,因此我确保安装了它并启用了 PHP 扩展。
在搜索各种小故障的答案时,我偶然发现了一个有趣的附加组件,它使管理 Pi 作为 Web 服务器变得更加容易:Cockpit。它提供了一个易于使用的图形界面,可以查看机器及其所有软件的状态:它的运行状况(或是否未运行)。您可以查看何时有可用更新并运行它们、访问日志等等。它甚至包括自己的命令行界面,因此您可以从一个界面完全管理几乎所有内容。

(Martin Anderson-Clutz,CC BY-SA 4.0)
在树莓派上安装 Drupal
如果您知道预期的过程,则安装 Drupal 本身非常简单。如果您还没有这样做,安装 Composer PHP 依赖管理器。然后您可以通过几个步骤安装 Drupal
composer create-project drupal/recommended-project my_site_name_dir
配置您的 Web 服务器以使用该安装位置内的 web 目录(上面示例中的 my_site_name_dir
)作为虚拟主机(或 Nginx 中的服务器块)的文档根目录。
如果您尝试访问虚拟主机,Drupal 会为您触发安装过程的其余部分。

(Martin Anderson-Clutz,CC BY-SA 4.0)
我决定在我的笔记本电脑上创建站点,然后将站点代码推送到 GitLab 上的 Git 仓库,并从那里将其拉取到服务器,但如果您只是想在 Pi 上试用 Drupal,则这不是绝对必要的。
将信息传播出去(网络之外)
我现在让我的树莓派作为 Web 服务器工作,并且我的 Drupal 站点在其之上运行良好。太棒了!但是我网络之外的任何人都无法访问它。
我进入了我的路由器 Web UI 并使用端口转发来确保传入的 Web 请求(端口 80 和 443)将被定向到 Pi。我几分钟内就完成了。但是人们将如何找到该站点呢?
我购买了一个域名,我的注册商有自己的动态 DNS 实用程序,这很棒,因为使用您家庭互联网连接的缺点是家庭用户通常没有静态 IP。在安装他们的实用程序并等待 DNS 设置解析后,用户可以通过mandclu.com访问我的新网站。
当然,该站点还需要允许安全连接,因此我还需要添加 SSL 证书。过去,这意味着购买证书,其成本将高于 Pi 本身,并且每年续订时都要再次支付。幸运的是,Let's Encrypt免费实现了类似的结果。您甚至可以安装certbot来自动续订证书。
我自己的树莓派 Web 服务器
我对结果非常满意。它是否像昂贵的企业级托管一样快?不是。但是我可以免费托管我自己的站点(或者,更准确地说,是支付树莓派供电的电费),而且我可以完全自由地以我想要的任何方式配置服务器。
随着时间的推移,该站点似乎开始出现偶尔的减速,但对于我获得的微薄流量(几乎为零)来说,它足够快,因此它满足了我的需求。
当我感到有灵感写作时,我喜欢玩站点样式和发布内容。然后,搬家来了。
我在 2020 年底(实际上是今年的最后一天)搬家了。从您客厅的 Pi 盒托管您的网站的缺点之一是,搬家意味着您的网站会宕机一段时间。就我而言,让我的宠物项目网站重新上线几周并不是首要任务。
最终,我将我的 Web 服务器 Pi 连接并重新插入,并准备添加一些新内容。我惊讶地发现该站点的运行速度明显慢于我记忆中的速度。作为 Web 开发人员的一件好事是您结交了很多聪明的朋友,所以我联系了一位朋友,他提到 MicroSD 卡有时会在正常使用情况下随着时间的推移而减速。
加速我的 Web 服务器
我决定是时候重建服务器了,所以我做了一些更改。首先,此后我购买了一个 8GB Pi 4 用作 Minecrafter 服务器,但后来我儿子对游戏的兴趣下降了,所以我决定将该硬件用于新版本。我没有使用 MicroSD 进行存储,而是购买了一个小容量的 NVMe SSD 和一个用于它的 USB 3 外壳。这两个元件的成本可能与我之前在 Pi、MicroSD 卡、电源和外壳上的花费一样多,但服务器在将近一年后仍然运行良好。

(Martin Anderson-Clutz,CC BY-SA 4.0)
我没有只是复制我以前安装的所有内容,而是决定重新安装软件。迁移到 8GB Pi 4 意味着我需要 64 位操作系统,这意味着 Ubuntu 服务器是我的最佳选择。今天有更多选择,但我对 Ubuntu 非常满意,尽管有一个新的学习曲线。一些目录位于不同的位置。我必须习惯使用 Apt 而不是 Yum 来安装新软件包等等。但总体过程实际上是相同的,步骤本身只有一些细微的差异。
我决定在重建期间进行的另一个重大更改是添加 Cloudflare 作为内容分发网络 (CDN) 以加快站点的交付速度。在其最基本的形式中,CDN 通过将站点文件的缓存版本保存在全球分布的各种本地存在点 (PoP) 中来加速网站的交付。幸运的是,Cloudflare 有一个免费计划,所以我决定将它放在我的 Pi 托管网站前面。
结果
升级后的 Pi Web 服务器速度飞快。真的很快

(Martin Anderson-Clutz,CC BY-SA 4.0)

(Martin Anderson-Clutz,CC BY-SA 4.0)
我已经对许多不同的网站(诚然,其中大多数是 Drupal)进行了速度测试,这些是我见过的最佳分数中的一些。站点设计简单确实有帮助。如果站点上有更多图像,则它的得分可能会稍低,尤其是在移动设备上(Lighthouse 测试在移动设备上限制带宽以模拟慢速 4G 连接)。
值得指出的是,可访问性得分也很高——无需我付出任何努力。在 Drupal 上运行我的站点的另一个优势是能够构建在已经过严格测试的框架之上,以便在屏幕阅读器和其他辅助技术上轻松使用。
我为达到最佳实践得分所做的唯一工作是安装和配置免费的Security Kit模块。
构建您自己的树莓派服务器
如果您想为个人 Web 项目尝试 Drupal,并且尤其碰巧有一个额外的树莓派在积灰,那么我希望您尝试设置自己的服务器。
评论已关闭。