用于 Web 开发的自托管工具

2025-06-07

用于 Web 开发的自托管工具

用于 Web 开发的自托管工具

拥有一些自托管的服务和工具可以让你作为开发者的生活,乃至你的整体生活,变得更加轻松。我将在这篇文章中分享一些我最喜欢的工具。我几乎在每个项目中都使用这些工具,它们确实让我的生活更加轻松。

除了 OpenFaaS 之外,所有这些都托管在单个 VPS 上,该 VPS 具有 2 个 CPU 内核、8GB RAM 和 80GB SSD,并且有足够的剩余容量。

如果您需要一台价格实惠、性能稳定的服务器来运行所有这些功能,欢迎使用我的推荐码在 Hetzner 获得 20 欧元的抵用金。阅读我的评测了解更多信息。我使用的是 CX31 型号,但您也可以选择更便宜的型号。

休金

Huginn 是一款用于构建自动化代理的应用程序。您可以将其视为Zapier的自托管版本。要理解 Huginn,您必须了解两个概念:代理和事件。代理是可以执行某些操作的事物。有些代理会抓取网站数据,而有些代理则会向 Slack 发送消息。第二个概念是事件。代理会发出事件,代理也可以接收事件。

例如,您可以让一个 Huginn 代理检查本地天气,然后将其作为事件传递给另一个代理,后者检查是否会下雨。如果会下雨,雨水检测代理会将事件传递出去,否则将被丢弃。第三个代理会从第二个代理接收事件,然后它会向您的手机发送一条短信,告诉您即将下雨。

但这仅仅是 Huginn 功能的冰山一角。它拥有各种代理:发送电子邮件、发布到 Slack、通过 MQTT 支持物联网、网站 API、爬虫等等。您可以拥有从自定义 Web 钩子接收输入的代理,以及类似 cron 的代理来调度其他代理等等。

用于 Web 开发的自托管工具
Huginn 界面

Huginn 是一个 Ruby on Rails 应用程序,可以托管在 Docker 中。我的 Huginn 托管在Dokku上。我用它来做很多事情,它确实是我所有自动化需求的基础。强烈推荐!如果你正在寻找替代方案,可以看看Node-REDBeehive。不过我个人对这两款都没有使用经验。

Huginn 在我的服务器上使用了大约 350MB 的 RAM,包括数据库和后台进程。

拇指

Thumbor 是一个类似Imgix 的自托管图片代理。它可以通过一个图片 URL 完成各种操作。以下是一些示例:

简单的缓存代理

获取 URL 并将 Thumbor URL 放在前面,如下所示:

https://thumbs.mskog.com/https://images.pexels.com/photos/4048182/pexels-photo-4048182.jpeg

很简单。现在,你的代理上就托管了该镜像的一个版本。这很方便,比如,当你不想在链接到镜像时向源服务器发送大量请求时。

调整大小

那张图片太大了。我们可以把它缩小一点!https://thumbs.mskog.com/800x600/https://images.pexels.com/photos/4048182/pexels-photo-4048182.jpeg

用于 Web 开发的自托管工具

小得多。请注意,我们所要做的就是添加所需的格式。

调整到特定的高度或宽度

那么,在保持宽高比不变的情况下,设置特定的宽度怎么样?没问题!

https://thumbs.mskog.com/300x/https://images.pexels.com/photos/4048182/pexels-photo-4048182.jpeg

用于 Web 开发的自托管工具

质量

文件更小?

https://thumbs.mskog.com/1920x/filters: quality(10)/https://images.pexels.com/photos/4048182/pexels-photo-4048182.jpeg

用于 Web 开发的自托管工具

你懂的!Thumbor 还有很多其他滤镜,比如把图片变成黑白、改变格式等等。它功能非常丰富,在很多场景下都能用。我在所有应用程序中的图片上都用它。Thumbor 还提供了多种语言的客户端库,比如Node

Thumbor 是一个 Python 应用程序,使用 Docker 托管最为便捷。Github 上有很多优秀的项目,它们都提供了 Docker Compose 设置。我使用的是这个。它内置了 Nginx 代理用于缓存。所有镜像都将通过 Nginx 缓存(默认位于磁盘和内存中)进行处理。这意味着只有第一个镜像请求才会到达 Thumbor 本身。之后的任何请求都只会到达 Nginx 缓存,因此速度非常快。

为了进一步提升速度,您可以在 Thumbor 服务器前部署 CDN。如果您的网站使用Cloudflare,您可以免费使用他们的 CDN。但请记住,如果您仅使用他们的 CDN 来缓存大量大图像,Cloudflare 不会乐意。当然,您也可以使用任何其他 CDN,例如 Cloudfront。我的整个 Thumbor 堆栈占用了大约 200MB 的内存。

总而言之,我认为 Thumbor 是我自托管技术栈中至关重要的一部分,每次我需要在任何网站或应用上显示图片时,我都会使用它。一旦 Thumbor 正常工作,你就再也不用担心图片格式了,因为 Thumbor 一直都在。

Thumbor 的托管替代方案:ImgixCloudinary

自托管替代方案:ImaginaryImageflow

瑟克斯

Searx是一个自托管元搜索引擎。它会从您的搜索结果中去除所有标识性标头等信息,然后使用一个或多个搜索引擎来执行您的查询。它可以在 Google、Bing 和 DuckDuckGo 等搜索引擎上进行搜索。Searx 作为自托管服务的优势在于它拥有一个简单的 JSON API。只需告诉它使用 JSON,您的查询就会以 JSON 格式返回。这将实现一些非常巧妙的组合,稍后会详细介绍。它还可以搜索图片、音乐、新闻等。

用于 Web 开发的自托管工具
Searx 实际操作

这又是一个杀手级服务。JSON 格式才是它真正吸引我的地方,因为它可以以多种方式与其他服务结合使用。

Searx 是另一个 Python 应用程序,可以通过使用官方 Docker 镜像轻松托管。它在我的服务器上使用了大约 230MB 的 RAM。

InfluxDB + Telegraf + Grafana

InfluxDB是一个时间序列数据库。它旨在从传感器、服务器等接收基于时间的事件数据。例如,它非常擅长每 5 秒存储一次 CPU 负载数据。它还内置了多种方法,确保不会将所有数据填满磁盘空间等等。它支持大多数语言的客户端库,以及一个非常简单的HTTP API用于添加数据。它与 Huginn 配合得很好,你可以在 Huginn 中创建代理来轮询数据,然后使用 InfluxDB 中的 HTTP API 和 Post Agent 来存储数据。稍后会有相关示例!

Telegraf是一项服务,可以收集您服务器的数据并将其发送到 InfluxDB。它也可以将数据发送到其他数据库,但我们在此使用 InfluxDB。它可以收集您想要的任何服务器数据,包括来自 Docker 容器的统计信息。它具有非常简单的开箱即用配置,您可以根据需要进行调整。我把它安装在我所有用于将数据发送到 InfluxDB 的机器上,包括我家里的 NAS。

Grafana是一款图形、分析和监控工具。它可以将来自 InfluxDB、AWS Cloudwatch 和 PostgreSQL 等多种数据源的数据绘制成图表。例如,它还支持 Slack 的告警功能。使用起来非常愉快,你很快就能创建出一些非常漂亮的数据图表。不过你需要小心,因为我发现把所有数据都绘制成图表很容易上瘾。

用于 Web 开发的自托管工具
用于服务器监控的 Grafana 仪表板

您可以在 Github 上找到许多针对此堆栈的 Docker 设置,因此托管它很容易。

Grafana 确实使用起来很愉快,它可能是我用过的最流畅的图形工具,它可以轻松地与Datadog等商业项目进行比较。

Docker 注册表

这很简单,但非常有用。有个地方存储你自己的 Docker 镜像是很好的,而这正是你所需要的。你可以使用Docker Hub来存储镜像,但私有镜像的费用约为每月 7 美元。不过,托管你自己的镜像仓库也很容易。Docker 镜像仓库是使用 OpenFaaS 的必要条件。

Ghost CMS

Ghost是一个开源的发布和博客平台。它最初是 Wordpress 的替代品,但后来发展得更具功能性。我把它用作这个博客以及其他网站的无头内容管理系统 (CMS)。它拥有强大的 GraphQL 和 REST API,你可以使用它来提取文章和页面,用于静态网站或在其他网站上展示。如果你想了解更多,我还有另一篇文章介绍我的博客如何与 Ghost 配合使用。

用于 Web 开发的自托管工具
键入此内容时的 Ghost 编辑器

Ghost 有一个很棒的编辑器,可以很容易地添加 Twitter 帖子、图片、Spotify 链接等等。它还托管在你的服务器上,所以你可以在任何地方写作。如果你不想处理 Markdown 文件,你完全可以不用处理。我发现用 Ghost 写作非常愉快。

OpenFaaS

OpenFaaS是自托管的函数即服务,又称无服务器。我另有一篇关于 OpenFaaS 的文章,所以这里就不赘述了。您可以使用 OpenFaaS 轻松部署任何编程语言的函数,而无需设置微服务。另外,我理解自托管无服务器设置带来的讽刺,但我们身处一个陌生的世界,所以就顺其自然吧。

它对许多工具和组合非常有用。我有许多这样的函数,以下是一些示例:

可读性

这是一个 Python 函数,使用newspaper3k库从任意 URL 中提取元数据和文章内容。我用它来渲染文章片段,准备进行情绪分析等等。

Puppeteer 渲染器

有时,如果没有 JavaScript,网站根本无法运行,或者他们已经安装了系统来自动阻止抓取和与网站交互。烂番茄就是这样一个网站,它会反击任何自动化攻击。这时,Puppeteer,一个无头 Chrome API 就派上用场了。这个函数只需获取一个 URL,用 JavaScript 渲染页面并返回结果主体。然后,它就可以在抓取工具(例如使用 Huginn)中处理了。稍后会提供如何在 Huginn 中使用 Puppeteer 的示例,如果您感兴趣的话,请继续阅读。

OpenFaaS 托管在自己的服务器上,因为我觉得这样比较合理。不过它体积很小,而且根本不占用太多资源。

组合

这正是我们揭开拥有所有这些元素的真正魔力的地方。你可以巧妙地组合它们,创造出真正精美的作品。以下是一些示例,供你参考:

OpenFaaS+Searx = 第一张图片

这是我非常喜欢的组合。用任何你选择的语言(我使用了 JavaScript)在 OpenFaaS 中创建一个函数,该函数将在 Searx 中搜索给定的查询,并确保返回 JSON 格式的结果。然后在 OpenFaaS 函数中解析结果,并返回第一个图像结果的 URL。

现在,您有了一个可以用于任何查询的函数,它将返回第一个图像结果。这在很多方面都很有用。例如,您可以搜索“ ”,bryan cranston site:wikipedia.org获取演员布莱恩·克兰斯顿 (Bryan Cranston) 的精彩照片。现在,如果您愿意,还可以使用一些很酷的 Thumbor 滤镜等来处理图像!

改进建议:为 OpenFaaS 函数添加更多功能。例如,您可以将探测图像大小 (probe-image-size)添加到函数中。例如,现在可以拒绝过小的图像。

OpenFaaS+Huginn+Trello = 电影推荐

这是一个简单的应用,每天向我的Trello收件箱添加电影推荐。

创建步骤:

  1. 为 Huginn 添加一个网站代理。使用烂番茄首页的 URL,并添加 OpenFaaS Puppeteer 函数,启用 JavaScript 渲染该 URL。抓取新电影板块。
  2. (可选)在 Huginn 中创建一个触发代理,用于选择评分最低的电影。或许你只想将评分达到 80 分或更高的电影添加到你的收件箱中。
  3. 向 Huginn 添加一个发布代理,它将使用Trello API将电影名称发布到您的 Trello 收件箱

改进建议:添加另一个步骤,链接到电影的IMDB页面。您可以使用 Searx 来实现这一点。像这样简单搜索电影:"fried green tomatoes" site:imdb.com

RescueTime+Huginn+InfluxDB+Grafana = 生产力图表

RescueTime是一款自动时间追踪软件。它会记录你在电脑上的所有操作,并提醒你何时高效工作,何时在 Reddit 上偷懒。你可以使用 Huginn 中的网站代理访问 RescueTime 上的生产力数据。然后,你可以使用 Post 代理将这些数据添加到 InfluxDB。最后,你可以使用 Grafana 绘制图表。我使用类似的工具来获取热水账单等数据。有了 Huginn 和 InfluxDB,你几乎可以绘制任何图表。

Huginn+Slack = 通知中心

如果您像我一样,有很多通知,那么您可能需要使用 Huginn 来整理它们。与其直接与 Slack 或您使用的任何通知系统交互,不如使用 Huginn 中的 Webhook 代理来创建 API 端点。将您的通知发布到此端点。然后,您可以使用例如 Slack 代理将通知发布到 Slack。

那么这有什么意义呢?嗯,你可以很容易地改用 Slack 以外的其他平台来发送通知,而无需在每个创建通知的网站上都进行修改。也许你想延迟一些通知?你可以使用 Huginn 中的延迟代理来实现。也许有些通知应该发送到 Trello 而不是 Slack?使用 Huginn 没问题。你甚至可以使用摘要代理对低级别通知进行分组,然后通过电子邮件或其他方式一次性发送。别忘了,你还可以使用 Grafana 绘制所有这些图表。

结论

这绝不是一份详尽的清单,列出了你可以自行托管的、能让你开发者生活更轻松的东西。你有什么我遗漏的推荐吗?请在下方评论区回复,或者在 Twitter 上联系我!

文章来源:https://dev.to/mskog/self-hosted-tools-for-web-development-9kh
PREV
软件工程师在工作中保持高能量水平的 3 种有效方法
NEXT
使用 Phaser Swap'N'Pop 制作视频游戏