2023年7月

使用 Python 制作一个 API 来监控你的树莓派硬件,并使用 Appsmith 建立一个仪表盘。

如果你想知道你的树莓派的性能如何,那么你可能需要一个树莓派的仪表盘。在本文中,我将演示如何快速构建一个按需监控仪表盘,以实时查看你的树莓派的 CPU 性能、内存和磁盘使用情况,并根据需要随时添加更多视图和操作。

如果你已经使用 Appsmith,你还可以直接导入 示例应用程序 并开始使用。

Appsmith

Appsmith 是一个开源的 低代码 应用构建工具,帮助开发人员轻松快速地构建内部应用,如仪表盘和管理面板。它是一个用于仪表盘的很好选择,并减少了传统编码方法所需的时间和复杂性。

在此示例的仪表盘中,我显示以下统计信息:

  • CPU

    • 占用百分比
    • 频率或时钟速度
    • 计数
    • 温度
  • 内存

    • 占用百分比
    • 可用内存百分比
    • 总内存
    • 空闲内存
  • 磁盘

    • 磁盘使用百分比
    • 绝对磁盘空间使用量
    • 可用磁盘空间
    • 总磁盘空间

创建一个端点

你需要一种从树莓派获取这些数据并传递给 Appsmith 的方法。psutil 是一个用于监控和分析的 Python 库,而 Flask-RESTful 是一个创建 REST API 的 Flask 扩展。

Appsmith 每隔几秒钟调用 REST API 以自动刷新数据,并以 JSON 对象作为响应,其中包含所有所需的统计信息,如下所示:

{ "cpu_count": 4,
"cpu_freq": [
600.0,
600.0,
1200.0 ],
"cpu_mem_avail": 463953920,
"cpu_mem_free": 115789824,
"cpu_mem_total": 971063296,
"cpu_mem_used": 436252672,
"cpu_percent": 1.8,
"disk_usage_free": 24678121472,
"disk_usage_percent": 17.7,
"disk_usage_total": 31307206656,
"disk_usage_used": 5292728320,
"sensor_temperatures": 52.616 }

1、设置 REST API

如果你的树莓派尚未安装 Python,请在树莓派上打开终端并运行此安装命令:

$ sudo apt install python3

现在为你的开发设置一个 Python 虚拟环境

$ python -m venv PiData

接下来,激活该环境。你必须在重新启动树莓派后执行此操作。

$ source PiData/bin/activate
$ cd PiData

为了安装 Flask、Flask-RESTful 和以后需要的依赖项,请在你的 Python 虚拟环境中创建一个名为 requirements.txt 的文件,并将以下内容添加到其中:

flask
flask-restful
gunicorn

保存文件,然后使用 pip 一次性安装它们。你必须在重新启动树莓派后执行此操作。

(PyData)$ python -m pip install -r requirements.txt

接下来,创建一个名为 pi_stats.py 的文件来存放使用 psutil 检索树莓派系统统计信息的逻辑。将以下代码粘贴到 pi_stats.py 文件中:

from flask import Flask
from flask_restful import Resource, Api
import psutil
app = Flask(__name__)

api = Api(app)
class PiData(Resource):
    def get(self):
        return "RPI Stat dashboard"

api.add_resource(PiData, '/get-stats')

if __name__ == '__main__':
    app.run(debug=True)

这段代码的作用如下:

  • 使用 app = Flask(name) 来定义嵌套 API 对象的应用程序。
  • 使用 Flask-RESTful 的 API 方法 来定义 API 对象。
  • 在 Flask-RESTful 中将 PiData 定义为具体的 Resource 类 ,以公开每个支持的 HTTP 方法。
  • 使用 api.add_resource(PiData, '/get-stats') 将资源 PiData 附加到 API 对象 api
  • 每当你访问 URL /get-stats 时,将返回 PiData 作为响应。

2、使用 psutil 读取统计信息

要从你的树莓派获取统计信息,你可以使用 psutil 提供的这些内置函数:

  • cpu_percentagecpu_countcpu_freqsensors_temperatures 函数分别用于获取 CPU 的占用百分比、计数、时钟速度和温度。sensors_temperatures 报告了与树莓派连接的所有设备的温度。要仅获取 CPU 的温度,请使用键 cpu-thermal
  • virtual_memory 函数可返回总内存、可用内存、已使用内存和空闲内存的统计信息(以字节为单位)。
  • disk_usage 函数可返回总磁盘空间、已使用空间和可用空间的统计信息(以字节为单位)。

将所有函数组合到一个 Python 字典中的示例如下:

system_info_data = {
'cpu_percent': psutil.cpu_percent(1),
'cpu_count': psutil.cpu_count(),
'cpu_freq': psutil.cpu_freq(),
'cpu_mem_total': memory.total,
'cpu_mem_avail': memory.available,
'cpu_mem_used': memory.used,
'cpu_mem_free': memory.free,
'disk_usage_total': disk.total,
'disk_usage_used': disk.used,
'disk_usage_free': disk.free,
'disk_usage_percent': disk.percent,
'sensor_temperatures': psutil.sensors_temperatures()['cpu-thermal'][0].current,
}

下一节将使用该字典。

3、从 Flask-RESTful API 获取数据

为了在 API 响应中看到来自树莓派的数据,请更新 pi_stats.py 文件,将字典 system_info_data 包含在 PiData 类中:

from flask import Flask
from flask_restful import Resource, Api
import psutil
app = Flask(__name__)
api = Api(app)

class PiData(Resource):
    def get(self):
        memory = psutil.virtual_memory()
        disk = psutil.disk_usage('/')
        system_info_data = {
            'cpu_percent': psutil.cpu_percent(1),
            'cpu_count': psutil.cpu_count(),
            'cpu_freq': psutil.cpu_freq(),
            'cpu_mem_total': memory.total,
            'cpu_mem_avail': memory.available,
            'cpu_mem_used': memory.used,
            'cpu_mem_free': memory.free,
            'disk_usage_total': disk.total,
            'disk_usage_used': disk.used,
            'disk_usage_free': disk.free,
            'disk_usage_percent': disk.percent,
            'sensor_temperatures': psutil.sensors_temperatures()['cpu-thermal'][0].current, }

    return system_info_data

api.add_resource(PiData, '/get-stats')

if __name__ == '__main__':
    app.run(debug=True)

你的脚本已经就绪,下面运行 PiData.py

$ python PyData.py
 * Serving Flask app "PiData" (lazy loading)
 * Environment: production
 WARNING: This is a development server. Do not run this in a production environment.
 
 * Debug mode: on
 * Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!

你有了一个可以工作的 API。

4、将 API 提供给互联网

你可以在本地网络中与 API 进行交互。然而,要在互联网上访问它,你必须在防火墙中打开一个端口,并将传入的流量转发到由 Flask 提供的端口。然而,正如你的测试输出建议的那样,在 Flask 中运行 Flask 应用程序仅适用于开发,而不适用于生产。为了安全地将 API 提供给互联网,你可以使用安装过程中安装的 gunicorn 生产服务器。

现在,你可以启动 Flask API。每次重新启动树莓派时都需要执行此操作。

$ gunicorn -w 4 'PyData:app'
Serving on http://0.0.0.0:8000

要从外部世界访问你的树莓派,请在网络防火墙中打开一个端口,并将流量定向到你树莓派的 IP 地址,端口为 8000。

首先,获取树莓派的内部 IP 地址:

$ ip addr show | grep inet

内部 IP 地址通常以 10 或 192 或 172 开头。

接下来,你必须配置防火墙。通常,你从互联网服务提供商(ISP)获取的路由器中嵌入了防火墙。通常,你可以通过网络浏览器访问家用路由器。路由器的地址有时会打印在路由器的底部,它以 192.168 或 10 开头。不过,每个设备都不同,因此我无法告诉你需要点击哪些选项来调整设置。关于如何配置防火墙的完整描述,请阅读 Seth Kenlon 的文章 《打开端口并通过你的防火墙路由流量》。

或者,你可以使用 localtunnel 来使用动态端口转发服务。

一旦你的流量到达树莓派,你就可以查询你的 API:

$ curl https://example.com/get-stats
{
   "cpu_count": 4,
   "cpu_freq": [
      600.0,
      600.0,
      1200.0 ],
   "cpu_mem_avail": 386273280,
   ...

如果你已经执行到这一步,那么最困难的部分已经过去了。

5、重复步骤

如果你重新启动了树莓派,你必须按照以下步骤进行操作:

  • 使用 source 重新激活 Python 环境
  • 使用 pip 刷新应用程序的依赖项
  • 使用 gunicorn 启动 Flask 应用程序

你的防火墙设置是持久的,但如果你使用了 localtunnel,则必须在重新启动后启动新的隧道。

如果你愿意,可以自动化这些任务,但那是另一个教程的内容。本教程的最后一部分是在 Appsmith 上构建一个用户界面,使用拖放式小部件和一些 JavaScript,将你的树莓派数据绑定到用户界面。相信我,从现在开始很容易!

在 Appsmith 上构建仪表盘

硬件监控仪表盘

要制作一个像这样的仪表盘,你需要将公开的 API 端点连接到 Appsmith,使用 Appsmith 的小部件库构建用户界面,并将 API 的响应绑定到小部件上。如果你已经使用 Appsmith,你可以直接导入 示例应用程序 并开始使用。

如果你还没有,请 注册 一个免费的 Appsmith 帐户。或者,你可以选择 自托管 Appsmith

将 API 作为 Appsmith 数据源连接

登录到你的 Appsmith 帐户。

  • 在左侧导航栏中找到并点击 “ 查询或 JS QUERIES/JS ” 旁边的 “+” 按钮。
  • 点击 “ 创建一个空白 API Create a blank API ”。
  • 在页面顶部,将你的项目命名为 “PiData”。
  • 获取你的 API 的 URL。如果你使用的是 localtunnel,则是一个 localtunnel.me 地址,总是在末尾添加 /get-stats 以获取统计数据。将其粘贴到页面的第一个空白字段中,然后点击 “RUN” 按钮。

确保在 “ 响应 Response ” 面板中看到成功的响应。

Appsmith 界面

构建用户界面

Appsmith 的界面非常直观,但如果你感到迷失,我建议你查看 在 Appsmith 上构建你的第一个应用程序 教程。

对于标题,将 “ 文本 Text ”、“ 图像 Image ” 和 “ 分隔线 Divider ” 小部件拖放到画布上。将它们排列如下:

设置项目标题

文本 Text ” 小部件包含你页面的实际标题。键入比“Raspberry Pi Stats”更酷的内容。

图像 Image ” 小部件用于展示仪表盘的独特标志。你可以使用你喜欢的任何标志。

使用 “ 开关 Switch ” 小部件来切换实时数据模式。在 “ 属性 Property ” 面板中进行配置,以从你构建的 API 获取数据。

对于主体部分,使用来自左侧的小部件库的以下小部件创建一个 CPU 统计信息区域,使用以下小部件:

  • 进度条 Progress Bar
  • 统计框 Stat Box
  • 图表 Chart

对于内存和磁盘统计信息部分,重复相同的步骤。磁盘统计信息部分不需要图表,但如果你能找到用途,那也可以使用它。

你的最终小部件布局应该类似于以下:

Appsmith 中的属性设置

最后一步是将 API 的数据绑定到你的小部件上。

将数据绑定到小部件上

返回到画布,并在三个类别的部分中找到你的小部件。首先设置 CPU 统计信息。

要将数据绑定到 “ 进度条 Progress Bar ” 小部件:

  • 单击 “ 进度条 Progress Bar ” 小部件,以打开右侧的 “ 属性 Property ” 面板。
  • 查找 “ 进度 Progress ” 属性。
  • 单击 “JS” 按钮以激活 JavaScript。
  • 在 “ 进度 Progress ” 字段中粘贴 {{PiData.data.cpu_percent ?? 0}}。此代码引用了你的 API 的数据流,名为 PiData。Appsmith 将响应数据缓存在 PiData.data 运算符内。键 cpu_percent 包含了 Appsmith 用来显示 CPU 利用率百分比的数据。
  • 在 “ 进度条 Progress Bar ” 小部件下方添加一个 “ 文本 Text ” 小部件作为标签。

在配置屏幕中绑定数据

在 CPU 部分有三个 “ 统计框 Stat Box ” 小部件。将数据绑定到每个小部件的步骤与绑定 “ 进度条 Progress Bar ” 小部件的步骤完全相同,只是你需要从 .data 运算符中绑定不同的数据属性。按照相同的步骤进行操作,但有以下例外:

  • 使用 {{${PiData.data.cpu_freq[0]} ?? 0 }} 来显示时钟速度。
  • 使用 {{${PiData.data.cpu_count} ?? 0 }} 来显示 CPU 计数。
  • 使用 {{${(PiData.data.sensor_temperatures).toPrecision(3)} ?? 0 }} 来显示 CPU 温度数据。

如果一切顺利,你将得到一个漂亮的仪表盘,如下所示:

树莓派的仪表盘

CPU 利用率趋势图

你可以使用 “ 图表 Chart ” 小部件将 CPU 利用率显示为趋势线,并使其随时间自动更新。

首先,单击小部件,在右侧找到 “ 图表类型 Chart Type ” 属性,并将其更改为 “ 折线图 LINE CHART ”。为了显示趋势线,需要将 cpu_percent 存储在数据点数组中。你的 API 目前将其作为单个时间数据点返回,因此可以使用 Appsmith 的 storeValue 函数(Appsmith 内置的 setItem 方法的一个原生实现)来获取一个数组。

在 “ 查询或 JS QUERIES/JS ” 旁边单击 “+” 按钮,并将其命名为 “utils”。

将以下 JavaScript 代码粘贴到 “ 代码 Code ” 字段中:

export default {
  getLiveData: () => {
  //When switch is on:
    if (Switch1.isSwitchedOn) {
      setInterval(() => {
        let utilData = appsmith.store.cpu_util_data;

        PiData.run()
          storeValue("cpu_util_data", [...utilData, {
            x: PiData.data.cpu_percent,
            y: PiData.data.cpu_percent
          }]);           
        }, 1500, 'timerId')
      } else {
    clearInterval('timerId');
  }
},
initialOnPageLoad: () => {
  storeValue("cpu_util_data", []);
  }
}

为了初始化 Store,你在 initialOnPageLoad 对象中创建了一个 JavaScript 函数,并将 storeValue 函数放在其中。

你使用 storeValue("cpu_util_data", []);cpu_util_data 中的值存储到 storeValue 函数中。此函数在页面加载时运行。

到目前为止,每次刷新页面时,代码都会将 cpu_util_data 中的一个数据点存储到 Store 中。为了存储一个数组,你使用了 xy 的下标变量,两者都存储了来自 cpu_percent 数据属性的值。

你还希望通过设定存储值之间的固定时间间隔来自动存储这些数据。当执行 setInterval 函数时:

  • 获取存储在 cpu_util_data 中的值。
  • 调用 API PiData
  • 使用返回的最新 cpu_percent 数据将 cpu_util_data 更新为 xy 变量。
  • cpu_util_data 的值存储在键 utilData 中。
  • 仅当设置为自动执行函数时,才重复执行步骤 1 到 4。你使用 Switch 小部件将其设置为自动执行,这就解释了为什么有一个 getLiveData 父函数。

在 “ 设置 Settings ” 选项卡中,找到对象中的所有父函数,并在 “ 页面加载时运行 RUN ON PAGE LOAD ” 选项中将 initialOnPageLoad 设置为 “Yes(是)”。

设置页面加载时要执行的函数

现在刷新页面进行确认。

返回到画布。单击 “ 图表 Chart ” 小部件,并找到 “ 图表数据 Chart Data ” 属性。将绑定 {{ appsmith.store.disk_util_data }} 粘贴到其中。这样,如果你自己多次运行对象 utils,就可以获得图表数据。要自动运行此操作:

  • 查找并单击仪表盘标题中的 “ 实时数据开关 Live Data Switch ” 小部件。
  • 查找 onChange 事件。
  • 将其绑定到 {{ utils.getLiveData() }}。JavaScript 对象是 utils,而 getLiveData 是在你切换开关时激活的函数,它会从你的树莓派获取实时数据。但是还有其他实时数据,因此同一开关也适用于它们。继续阅读以了解详情。

将数据绑定到内存和磁盘部分的小部件与你在 CPU 统计信息部分所做的方式类似。

对于内存部分,绑定如下所示:

  • 进度条中的绑定为:{{( PiData.data.cpu_mem_avail/1000000000).toPrecision(2) \* 100 ?? 0 }}
  • 三个统计框小部件的绑定分别为:{{ \${(PiData.data.cpu_mem_used/1000000000).toPrecision(2)} ?? 0 }} GB{{ \${(PiData.data.cpu_mem_free/1000000000).toPrecision(2)} ?? 0}} GB{{ \${(PiData.data.cpu_mem_total/1000000000).toPrecision(2)} ?? 0 }} GB

对于磁盘部分,进度条和统计框小部件的绑定分别变为:

  • 进度条的绑定为:{{ PiData.data.disk_usage_percent ?? 0 }}
  • 三个统计框小部件的绑定分别为:{{ \${(PiData.data.disk_usage_used/1000000000).toPrecision(2)} ?? 0 }} GB{{ \${(PiData.data.disk_usage_free/1000000000).toPrecision(2)} ?? 0 }} GB{{ \${(PiData.data.disk_usage_total/1000000000).toPrecision(2)} ?? 0 }} GB

这里的图表需要更新你为 CPU 统计信息创建的 utils 对象,使用 storeValue 键名为 disk_util_data,嵌套在 getLiveData 下面,其逻辑与 cpu_util_data 类似。对于磁盘利用率图表,我们存储的 disk_util_data 的逻辑与 CPU 利用率趋势图的逻辑相同。

export default {
  getLiveData: () => {
  //When switch is on:
    if (Switch1.isSwitchedOn) {
      setInterval(() => {
       const cpuUtilData = appsmith.store.cpu_util_data;
       const diskUtilData = appsmith.store.disk_util_data;                   
       
       PiData.run();
       
       storeValue("cpu_util_data", [...cpuUtilData, { x: PiData.data.cpu_percent,y: PiData.data.cpu_percent }]);
       storeValue("disk_util_data", [...diskUtilData, { x: PiData.data.disk_usage_percent,y: PiData.data.disk_usage_percent }]);
    }, 1500, 'timerId')
  } else {
    clearInterval('timerId');
  }
},
  initialOnPageLoad: () => {
    storeValue("cpu_util_data", []);
    storeValue("disk_util_data", []);
  }
}

通过使用 utils JavaScript 对象在打开和关闭真实数据开关时触发的数据流可视化如下所示:

切换

在打开实时数据开关时,图表会变成这样:

显示实时数据

整体上,它既漂亮,又简约,而且非常有用。

祝你使用愉快!

当你对 psutils、JavaScript 和 Appsmith 更加熟悉时,我相信你会发现可以轻松无限地调整你的仪表板,实现非常酷的功能,例如:

  • 查看先前一周、一个月、一个季度、一年或根据你的树莓派数据允许的任何自定义范围的趋势
  • 为任何统计数据的阈值违规构建报警机制
  • 监控连接到你的树莓派的其他设备
  • psutils 扩展到另一台安装有 Python 的计算机上
  • 使用其他库监控你家庭或办公室的网络
  • 监控你的花园
  • 跟踪你自己的生活习惯

在下一个令人兴奋的项目中,祝你玩得愉快!

(题图:MJ/9754eb1f-1722-4897-9c35-3f20c285c332)


via: https://opensource.com/article/23/3/build-raspberry-pi-dashboard-appsmith

作者:Keyur Paralkar 选题:lkxed 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

谷歌再次重申“量子霸权”,声称制造了 70 个量子比特的量子超级计算机

“量子霸权” 是指量子计算机超越现有机器的一个里程碑点。四年前,谷歌制造了有 53 个量子比特的量子计算机,声称自己是第一家实现 “量子霸权” 的公司。据谷歌最新发表的论文,其新的量子计算机有 70 个量子比特,增加更多的量子比特可以成倍地提高量子计算机的功率,这意味着新机器比 2019 年的机器强大 2.41 亿倍!这台量子计算机可以瞬间完成目前最好的超级计算机 Frontier 需要 47 年才能完成的计算。研究人员还声称,他们最新的量子计算机比被视为该领域领导者的中国实验室演示的量子计算机更加强大。

消息来源:telegraph
老王点评:想想都非常可怕,如果量子计算机能投入实用,几乎可以颠覆整个信息世界。

Linux 内核发现特权提升重大漏洞 StackRot

该漏洞被称为 “StackRot”,CVSS 评分为 7.8,影响 Linux 6.1 至 6.4 版本,可以使用户在目标主机上获得提升的权限。迄今为止,没有证据表明该漏洞已经在野外被利用。StackRot 漏洞出现在内存管理子系统中,它几乎影响到所有的内核配置,只需要最小的 权能 capability 即可触发。在 6 月 15 日负责任的披露之后,经过 Linux 内核团队两周努力,截至 2023 年 7 月 1日,它已经在新的内核版本中得到解决。

消息来源:The Hacker News
老王点评:无论如何,打补丁升级就是了。不过一般生产服务器都应该还没升级到 6.x 呢吧。

Reddit 对使用 NSFW 抗议策略的子区发出最后通牒

始于上个月中旬的 Reddit 子区 抗议,到现在仍有两千多个子区闭版。为了杜绝任何剩余的抗议活动,Reddit 正在向那些决定允许 NSFW(非工作安全)内容作为破坏公司广告业务的方式的子区发出“最后通牒”。Reddit 称,“这是对你的社区不准确的 NSFW 标签的最后通牒,这违反了《版主行为守则》第 2 条。你的子区历来不被认为是 NSFW,在我们目前的政策下也不属于。”如果不取消该标签,将导致参与这一活动的子区管理员们将被从管理团队中删除。

消息来源:PC Mag
老王点评:在 Reddit 看来,这些不听话的管理员们就是既得利益的“地主阶级”,需要剔除才行。

这是一份可以用于发送/接收电子邮件并存储邮件的开源邮件服务器列表。

无论你使用何种 电子邮件客户端,使用像 Gmail、Proton Mail 和 Outlook 这样的电子邮件服务非常方便。

为了实现这一切,你利用的是它们的邮件服务器进行电子邮件传输。因此,你的电子邮件的安全性、可靠性和隐私性取决于他人。

但是,如果你希望拥有自己的电子邮件基础设施并控制数据,那么你需要一个开源电子邮件服务器来解决这个问题。

让我解释得更清楚一些,电子邮件服务器可以让你:

  • 构建自己的邮件后端以存储电子邮件帐户
  • 通过自托管来掌控安全性和可靠性
  • 在你首选的服务器架构上进行托管
  • 让你能够创建无限数量的帐户

当然,这些并不适用于终端用户。中小型企业的系统管理员和自托管者才能用得上这些软件。

考虑到你现在对开源电子邮件服务器的好处有了一定了解,下面是一些你可以找到的最佳选项:

? 这个列表包括邮件服务器和一些能够构建/创建邮件服务器的解决方案。其中一些可能提供托管服务,而另一些可以进行自托管。

1、Postal

Postal 是一个功能丰富的邮件服务器,可供网站和服务器使用。它专为出站邮件而设计,没有邮箱管理功能。(LCTT 译注:出站邮件指外发邮件,入站邮件指接收邮件供邮件客户端收取。)

它的 文档 对于入门非常有帮助。你可以使用 Docker 在服务器上配置 Postal。

使用 Postal,你可以为多个组织创建邮件服务器/用户,访问出站/入站消息队列,实时的递交信息,并使用内置功能确保电子邮件能够传递。

主要亮点:

  • 实时的递交信息
  • 点击和打开追踪
  • 专为出站邮件设计
? 维护和配置你的电子邮件服务器并非易事。只有在全面了解可靠地发送/接收电子邮件所需的一切情况下,才应继续设置邮件服务器。

2、mailcow

mailcow 用户界面

mailcow 是一个邮件服务器套件,其中包含帮助你构建 Web 服务器、管理邮箱等工具。

如果你不打算发送交易性电子邮件,mailcow 可以助你一臂之力。你可以将其视为一个团队协作工具。

(LCTT 译注:交易性电子邮件是指促进商业交易或关系的电子邮件,或提供关于正在进行的商业交易的最新信息。常见的例子包括: 订单确认、通知电子邮件等,例如,运输确认和更新,或订单退款。)

与其他邮件服务器一样,它与 Docker 搭配使用,每个容器是一个应用程序,它们之间相互连接。

mailcow 的 Web 用户界面可让你在一个地方完成所有操作。你可以在其 GitHub 页面文档 中了解更多关于该项目的信息。

主要亮点:

  • 易于管理和更新
  • 可提供经济实惠的付费支持
  • 如果需要,可以与其他邮件服务器配合使用

3、Cuttlefish

Cuttlefish

想要一个简单的交易性邮件服务器吗?Cuttlefish 是一个简单易用的开源邮件服务器。

你可以通过简单的 Web 用户界面查看统计数据,监控出站邮件。

与一些完整的电子邮件服务(如 SendGrid 或 Mailgun)相比,Cuttlefish 在功能方面可能没有那么全面,它目前仍处于测试阶段(beta)。如果你需要超级简单且可靠的解决方案,可以选择它。

在其 GitHub 页面 上了解更多信息。

主要亮点:

  • 简单的交易性邮件服务器
  • 简单易用

4、Apache James

Apache James

James 是 “Java Apache Mail Enterprise Server” 的缩写。

顾名思义,James 是一个使用 Java 构建的面向企业的开源邮件服务器。根据需求,你可以将该邮件服务器用作 SMTP 中继或 IMAP 服务器。

与其他邮件服务器相比,James 可能不是最容易配置或安装的。但是,你可以查看其 文档GitHub 页面 来自行评判。

主要亮点:

  • 配置完成后易于管理
  • 可靠,并被开源企业使用
  • 分布式服务器

5、Haraka

Haraka 是一个使用 Node.js 构建的现代开源 SMTP 服务器。如果你可以为你的业务/网站构建它,你就不需要寻找其他 SMTP 服务

这个邮件服务器专为提供最佳性能而设计。Haraka 的一个亮点是,它具有模块化插件系统,允许程序员根据需要更改服务器的行为。

你可以将其视为一款出色的可扩展的出站邮件递交服务器。一些知名的网站如 Craigslist 和 DuckDuckGo Email Protection 就使用了 Haraka。

在其 GitHub 页面 上可以了解更多信息。

主要亮点:

  • 使用 Node.js 构建
  • 插件系统以扩展功能

6、Modoboa

Modoboa 是一个多合一的开源解决方案。

它可以帮助你构建邮件服务器,并为你管理电子邮件帐户。你可以创建日历,无限制添加域名,创建过滤规则和访问 Webmail。如果你希望获得专业帮助来设置和管理系统,Modoboa 还提供付费维护选项。

除了是一个多功能解决方案外,它还提供了一种快速入门的方式来构建你的电子邮件基础架构。

主要亮点:

  • 全能选项
  • 提供付费帮助
  • 内置监控功能

7、Postfix

Postfix 是一种 邮件传输代理 Mail Transfer Agent (MTA)。它本身可能不是一个独立的服务器,但它可以与其他一些解决方案配合使用来构建电子邮件服务器。

虽然 mailcow 包含了 Postfix(你可以将其配置与类似的解决方案一起使用),但你也可以根据你的使用情况选择单独使用它。在 Ubuntu 服务器中,Postfix 也是默认的邮件传输代理。

Postfix 可以用作外部 SMTP。不要忘记,你还可以设置 Postfix 与 Gmail 配合使用。Postfix 容易配置,并且其文档对于使用它非常有用。

主要亮点:

  • 易于配置
  • 灵活

8、Maddy

Maddy 是一个轻量级邮件服务器实现的不错选择。官方描述称它是一款“可组合的一体化邮件服务器”。

与 mailcow 相比较,你会发现 Maddy 提供了一些与 mailcow 相同的功能,也就是说它不仅仅局限于出站邮件等功能。

Maddy 在使用场景上非常受欢迎,它可以用单一实现替代多个选项,如 Postfix。你可以通过 SMTP 和 IMAP 使用 Maddy 进行发送、接收和存储消息。文章撰写时,存储功能仍处于测试阶段(beta)。

主要亮点:

  • 轻量级
  • 替代多种用例,比如 Postfix 等选项
  • 不依赖 Docker

9、Dovecot

Dovecot 是一个开源的 IMAP 服务器,作为 邮件传递代理 Mail Delivery Agent (MDA)发挥作用。它可以与 Postfix 一起工作,因为它们执行不同的任务。

与其他解决方案相比,Dovecot 提供了易于管理、可靠的电子邮件发送功能和自我修复能力。

对于大型基础设施,Dovecot 提供了专业支持的高级方案。

主要亮点:

  • 易于管理
  • 自我修复能力
  • 专注于性能

10、Poste.io

Poste.io 邮件服务器

Poste.io 使用了邮件服务器解决方案,如 Haraku、Dovecot 和其他开源组件。从垃圾邮件过滤工具到防病毒引擎,应有尽有。

如果你想使用其中一些组件设置一个开源邮件服务器,并能够轻松管理和保护系统,Poste.io 是一个很好的选择。

主要亮点:

  • 使用多个开源邮件服务器组件进行易管理和构建
  • 管理面板界面

11、iRedMail

iRedMail 类似于 mailcow,它帮助你使用各种开源组件构建邮件服务器。你还可以使用创建的邮件服务器管理你的日历。

尽管你可以自行设置,但如果需要,它也提供付费的专业支持。

你将获得一个 Web 面板,在支持的 Linux 发行版上进行托管,并能够创建无限数量的账户。

主要亮点:

  • 简单易用
  • Web 面板进行易管理

12、Mailu

Mailu 邮件服务器

Mailu 是一个基于 Docker 的邮件服务器,可以为你提供最好的服务,同时限制了一些功能。

这并不意味着它不好;Mailu 的目标是专注于必要功能,而不添加对大多数人无用的许多功能。即便如此,它仍然通过添加 ARM 支持、Kubernetes 支持和其他一些功能而脱颖而出。

你将获得一个标准的邮件服务器、高级电子邮件功能、Web 管理界面和注重隐私的功能。

主要亮点:

  • 简单的界面
  • 关注于功能而不是花俏的解决方案
  • ARM 支持

准备构建和管理你的邮件服务器了吗?

使用开源工具和邮件服务器,你可以掌握你的数据,并为你的业务或网站管理/优化电子邮件通信。

正如我所提到的,这需要很多工作。因此,如果你希望拥有定制化的体验并且有一个可以负责的团队,那么开源自托管的邮件服务器是可行的选择。

? 当然,还有很多其他选项可供选择,比如 mail in a box,可以帮助你快速部署邮件服务器。

在这里,我们尝试为你挑选最佳选择以供参考。你最喜欢的开源邮件服务器是什么?

(题图:MJ/f85c5c41-a598-4382-8821-73c701fc842b)


via: https://itsfoss.com/open-source-email-servers/

作者:Ankush Das 选题:lkxed 译者:ChatGPT 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

探索 Nobara 38 版本的新功能,该版本随 Fedora 38 一起发布。

基于 Fedora 38 的预期版本 Nobara 38 终于发布了,它带来了一系列用户友好的修复和功能增强。Nobara 是 Fedora Linux 的修改版本,旨在解决用户面临的常见问题,并提供开箱即用的顺滑的游戏、流媒体和内容创建体验。凭借一系列附加软件包和自定义功能,Nobara 38 将 Fedora 提升到了新的高度。

Nobara 38 中值得注意的改进之一是为视频调色软件 Davinci Resolve 实施了一个临时方案。当 Davinci Resolve 的安装程序从终端运行时,会提示用户执行一个向导,执行必要的操作以确保顺利运行。这包括将它的 glib2 库移动到一个备份文件夹中,详见官方 Davinci Resolve 论坛。

Nobara 38 桌面

在游戏领域,Nobara 38 引入了 Payday 2 原生 Linux 版本的临时方案。鉴于 OpenGL 实现目前已损坏且对原生版本的官方支持已被放弃,该版本利用 zink 驱动程序来确保无缝游戏。据 GamingOnLinux 报道,这确保了 Linux 用户可以继续使用 Payday 2,不会出现任何问题。

此外,Nobara 38 合并了 Udev 规则来增强控制器支持。具体来说,添加了一条规则,强制对 045e:028e “Xbox 360” 控制器设备使用内核 xpad 驱动程序。这使得 GPD Win Max 2 和 GPD Win 4 等在报告为该设备的控制时,能够保持控制器兼容性,同时仍然允许安装可选的 xone/xpadneo 驱动程序以实现无线适配器,并改进对 Xbox One 控制器的蓝牙支持。

为了优化不同设备类型的性能,Nobara 38 引入了特定的 I/O 调度程序。NVMe 设备将使用 “none”,SSD 将使用 “mq-deadline”,HDD/机械驱动器将使用 “bfq”。这些规则可确保每种设备类型以其最佳效率运行。

在桌面环境方面,Nobara 38 默认提供自定义主题的 GNOME 桌面,但用户也可以选择标准 GNOME 和 KDE 版本。这种灵活性允许用户根据自己的喜好个性化他们的计算体验。

Nobara 38 还对几个关键组件进行了更新。值得注意的是,GNOME 44 融入了基于 Mutter 44 更新和重新构建的可变刷新率(VRR)补丁,提供了更流畅的视觉体验。GStreamer 1.22 已修补了 AV1 支持,可实现更好的多媒体播放,并且 OBS-VAAPI 和 AMF AV1 支持也已启用,尽管后者需要 AMD 的专业编码器。

Mesa 图形库基于 LLVM 15 构建,而不是 Fedora 当前的 LLVM 16,以避免与 Team Fortress 2 的兼容性问题。此外,Mesa 还进行了修补以启用 VAAPI AV1 编码支持,从而增强了视频编码功能。

Nobara Package Manager(现在称为 yumex)在 Nobara 38 中得到了重大改进。它现在拥有管理 Flatpak 的能力,为用户提供了更全面的软件管理解决方案。此外,软件包更新也得到了简化,引入了“更新系统”按钮,方便系统更新。

Blender 是流行的开源 3D 创建套件,已在 Nobara 38 中进行了修补,以使用 WAYLAND_DISPLAY="" 环境变量启动。这解决了菜单在 Wayland 下渲染不正确并妨碍可用性的问题,确保用户获得流畅的 Blender 体验。

Nautilus 是 GNOME 中的默认文件管理器,现在允许用户直接从右键菜单中以管理员身份执行文件和打开文件夹。此功能提供了一种执行管理任务的便捷方法,无需执行其他步骤。

在 Flatpak 方面,Nobara 38 删除了 Fedora Flatpak 仓库,因为它们基本上未使用。建议升级到 Nobara 38 的用户删除从 Fedora 仓库安装的所有 Flatpak,然后从 Flathub 仓库重新安装它们。Flathub flatpak 仓库现在是 Nobara 38 中的默认仓库,为系统和用户安装提供了更广泛的应用选择。此外,还实施了一种临时方案来解决最近与用户更新相关的崩溃问题。

为了增强整体用户体验,Nobara 欢迎应用现在将 Davinci Resolve 向导作为可选步骤提供。这简化了 Davinci Resolve 的设置过程,并确保用户可以轻松地将软件集成到他们的工作流程中。

除了这些显著的变化之外,Nobara 38 还包括 Fedora 38 中存在的所有其他软件包更新和改进。

要下载 Nobara 38 并探索其新功能,请访问 Nobara Project 官方网站。

下载 Nobara 38 – KDE
下载 Nobara 38 – GNOME

参考自官方 通告


via: https://debugpointnews.com/nobara-38/

作者:arindam 选题:lkxed 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Denuvo 想让你相信它的 DRM 不是“邪恶的”

只要对游戏玩家们提到 “Denuvo” 这个名字,相信就能立即看到他们强烈的反应。关于 Denuvo 的报道下面的评论是大量对他们的 DRM 反盗版技术的抱怨。该公司的电子游戏首席运营官在一次采访中强调,他认为 Denuvo 是整个游戏界的积极力量。他说:“反盗版技术对游戏发行商有利,(但也)对玩家有利,因为它保护了(发行商)的投资,这意味着发行商可以投资于下一个游戏。……无论人们是否愿意相信,我们都是游戏玩家,我们热爱游戏,我们热爱成为游戏的一部分,我们开发技术的目的是为了让这个行业变得更好、更强大。”

消息来源:Ars Technica
老王点评:我要是说 Denuvo 臭名昭著,不过分吧。

旧金山的抗议者用交通锥桶使自动驾驶出租车失效

在旧金山,一群反对自动驾驶出租车的人发现,他们可以通过在车辆的引擎盖上放置一个交通锥桶来禁用 Cruise 和 Waymo 自动驾驶出租车。该组织称这是一种抗议自动驾驶出租车服务在该市蔓延的形式,它似乎得到了居民的支持,他们对这些车辆的故障和阻塞交通感到厌烦。加州公用事业委员会计划于 7 月中旬批准扩大旧金山的自动驾驶出租车数量。

消息来源:Tech Crunch
老王点评:这些交通锥桶“真正”发挥了阻挡汽车的作用,但是,真能阻挡自动驾驶技术的发展吗?

去年公共云服务收入突破 5000 亿美元

IDC 的一份新报告称,去年公共云服务市场的价值跃升了近 23 个百分点,全球收入达到 5458 亿美元。该市场的所有部分去年都有增长,其中软件即服务(SaaS)应用占总收入的 45% 以上。此外,微软去年以16.8% 的总市场份额占据了第一,AWS 以 13.5% 排名第二。

消息来源:Silicon Republic
老王点评:今天正好发了一篇云计算的文章,之前的数据是 4450 亿美元。

经过大约 16 年的演变,云计算已经成为一种几乎所有网民都在使用的技术。它可以作为一种服务,用于满足各类企业和消费者的需求。因此,在云计算中正在使用多种服务架构,旨在根据最新的需求来定制所需技术。本文就如今使用的所有服务架构,提供一份完全指南。

尽管在全球范围内建立互相协同的计算机网络的构想在 20 世纪 60 年代初就提出了,但直到 2006 年,谷歌的首席执行官 埃里克·施密特 Eric Schmidt 在当时的背景下引入了“ 云计算 cloud computing ”一词,这种构想才成为一种正式的概念。

云计算可以简单理解为遍布于世界各地的远程服务器网络,通过互联网共享数据和协同工作,从而为企业和消费者提供服务。虽然这样的定义比较武断,但它包含了云计算背后的核心思想。促成这项技术发展的主要因素是对“数据粘性”的需求,就是令数据更容易被各种设备访问,同时也要减少数据丢失的风险。如果用户甲只在一台服务器上保存了数据,对于用户甲来说,只要有一台服务器中断,数据就很有可能永久性丢失。这种做法无异于“把所有鸡蛋放在同一个篮子里”,从来都不是一个好办法,特别是当你在处理对公司和消费者具有重要意义的数据时。但如果你在多台服务器上备份了用户甲的数据,将有两个主要好处:其一,即使一台服务器中断,用户甲仍然可以正常获取数据;其二,云服务可以从负荷最小的、离他最近的那台正常运作的服务器获取数据。这使用户甲可以在不同设备上更快、更容易地获取数据。

历经大约 16 年的发展,云计算从起初只是一种用于备份图片的工具,变为了互联网的骨干。如今几乎所有的应用,从 Office 到 Asana 以及 Todolist,都利用云计算来实现实时访问和数据共享。几乎任意一款你能想像到的应用都在使用云计算。从 Gmail 和 YouTube,到Instagram,一切都使用云计算,以提供快速、便捷、可靠的数据访问功能。

提供云计算服务的公司称为云服务提供商。亚马逊、谷歌、微软、Salesforce、Cloud9 等都是 B2B 和 B2C 领域的云服务提供商。

在早期,云服务供应商通常指提供三类服务:

  • 软件即服务 Software as a Service (SaaS)
  • 平台即服务 Platform as a Service (PaaS)
  • 基础设施即服务 Infrastructure as a Service (IaaS)

然而,随着行业需求不断发展,区块链和 AI 等新技术的出现,云服务提供商也开发了新的模式,用于更好地满足客户的各种需求。本文将详细论述如今大众普遍使用的那些云计算模式。

云端的架构

我们已经了解了什么是云计算,以及它是如何发展成一个高达 4450 亿美元产值的行业,现在我们从技术视角来理解云计算。通常一个云端架构都由两个主要部件组成 —— 前台 front-end 后台 back-end

Figure 1: The architecture of a cloud (Courtesy: TechVidvan)

前台包含客户端基础设施,有终端设备和用于与云端通信的应用程序界面。在现实世界里,你的智能手机和谷歌云端硬盘就是前台,它们用于访问谷歌云。

后台包含云端基础设施,包括运行云计算服务所需的一切设备。服务器、虚拟机、服务和存储都是由云端基础设施提供的。为了对它们有个全局的概念,现在我们来了解一下后台的每个组件。

  • 应用 Application :用户或企业使用的、通过互联网与云端互动的任何应用程序的后台。
  • 服务 Service :云端提供的服务型基础设施。本文将详细论述各种不同的服务。
  • 运行时 Runtime :提供给虚拟机的运行时和执行系统。
  • 存储 Storage :具有灵活的伸缩性的用户/企业数据获取和管理系统。
  • 基础设施 Infrastructure :运行云端所需的硬件和软件。
  • 安全 Security 管理 Management :建立安全机制,保护用户/企业数据,管理各个云服务单元,避免过载和服务停机。

软件即服务(SaaS)

“软件即服务”是一种云计算模式,通过互联网将软件和应用程序作为一种服务提供。谷歌云端硬盘或谷歌工作空间都是比较典型的例子。谷歌云端硬盘内的所有应用,例如文档、工作表、幻灯片、表格等,它们都可以通过使用浏览器访问,并自动保存于云端。你可以在任意设备上获取文件的最新版本。你唯一需要做的就是登录你的账户。这就是“软件即服务”模式的优点。你不需要在你的设备上安装任何东西,也不需要使用你的本地存储空间,你可以直接访问云端的应用程序,并省略了使用本地软件时的很多繁杂操作。SaaS 一般遵循“按需付费”法则,你只要为你需要的服务支付费用。你总是可以通过支付更多的费用来购买更多的存储和/或功能,或者根据你的要求来降低你的套餐。

SaaS 的好处

  1. SaaS 具有高度的可伸缩性,这归功于它的“按需付费”思想。你可以根据自身需求增加/减少存储空间或程序功能。
  2. 考虑到它提供的特性,如通过任何操作系统的任何设备进行实时访问,它是非常合算的。
  3. 它在客户端涉及的工作很少。不需要安装或进行复杂的步骤,就可以完成软件的初始化。你可以从你的浏览器和/或应用程序中舒适地使用它。
  4. 不必手动安装,软件会自动更新,而且更新过程中你也不必等待。

平台即服务(PaaS)

并不是每家科技初创公司都有必要的资源来维护自己的基础设施,以便在云端运行他们的应用程序。公司(尤其是创业型公司)通常更倾向于把应用部署于云端,这样就不必处理后台基础设施了。这就是“平台即服务”这种模式的用武之地了。Heroku 等公司提供了基于“平台即服务”的云端解决方案,令公司和个人可以在不需要直接与硬件交互的情况下就能部署并运行他们的应用程序。跟“软件即服务”类似,这种模式也提供了灵活性,你只需选择所需的服务,同时也从基础设施的角度提供了可伸缩性和安全性。

PaaS 的好处

  1. 省去了操作云端基础设施的麻烦。你将其外包给在其云中托管你的应用程序的公司。这令你能专注于应用程序开发工作的各个生命周期。
  2. PaaS 是可扩展的。你可以根据需要增加或减少存储需求、附加服务等。
  3. 你设置的唯一安全参数是针对你自己的应用程序。云安全是由你的云服务提供商处理的。
  4. 对公司和个人来说,把应用程序托管在云端,在时间和成本上都是合算的,特别是那些无法承担基础设施建设成本的创业型公司。

基础设施即服务(IaaS)

IaaS 相对于 PaaS 更进一步,给予用户更多的自主权。在 IaaS 模式中,云服务提供商让你对云端的底层基础设施进行操控。简而言之就是你可以根据公司需要自行设计云端环境,从专用服务器和虚拟机,到运行于服务器的操作系统,你还可以设置带宽,创建自己的安全协议,以及创建云基础设施所需的其他项目。亚马逊 AWS 和谷歌计算引擎(GCE)都是使用 IaaS 模式的很好的例子。鉴于此模式还可以实现用户对硬件的自主操控,它也被称为硬件即服务(HaaS)。

IaaS 的好处

  1. “按需付费”模式中的细粒度灵活性。你可以自行决定运行多少台虚拟机以及使用多少时间。你还可以按小时付费。
  2. 以“按需付费”为核心思想,它具有高度的可伸缩性。
  3. 完全的自主权,对基础设施中的一切事项的控制,省去了在公司所在地点驻场维护服务器的麻烦。
  4. 大多数公司保证正常运行时间、安全性和 24/7 的现场技术支持,这对企业来说非常重要。

存储即服务(StaaS)

谷歌云端硬盘、OneDrive、Dropbox 和 iCloud 是 存储即服务 Storage as a Service 行业内大名鼎鼎的产品。StaaS 就像它听起来那么简单。如果你需要的只是通过任意设备可以实时访问的云端存储空间,StaaS 就是可用的选项之一。很多公司和个人都使用这样的服务来备份自己的数据。

StaaS 的好处

  1. 借助内置的版本控制系统,实时访问最新数据。
  2. 可以使用安装任意操作系统的任何设备访问数据。
  3. 随着你创建、编辑和删除文件,实时备份你的数据。
  4. 遵循“按需付费”模式,你可以根据需要自行确定存储空间大小。

一切即服务(XaaS)

IaaS、PaaS、SaaS 和 StaaS 的混合版,就是所谓的“ 一切即服务 Anything/Everything as a Service ”模式,它在云计算相关社区内快速引发关注。客户可能有多种多样的需求,这些需求可能是各种不同模式的混合。在这种场景下,应当为用户提供自由选择所需服务的功能,让他们从各种不同的层级选择服务,从而创建自定义的“按需付费”模式。这种方式的好处在于,让用户根据自身需求自由选择相应的云服务。

XaaS 的好处

  1. 可以选择你喜欢的东西和你喜欢的方式。
  2. 只需要为你需要的服务支付费用,而且不需要支付任何基于层级系统的基本费用。
  3. 选择你的基础设施、平台和功能的粒度水平。
  4. 只要使用得当,无论在时间、成本、效用上,XaaS 都是非常有效的。

功能即服务(FaaS)

在某些情况下,公司或个人需要 PaaS,但不是所有的功能都需要。例如,基于触发器的系统,如定时任务,只需要在无服务器系统上运行一段代码或一个函数,就可以实现一个特定的目标。例如某客户需要创建一个网站的流量监测系统,在页面下载量达到一定数量时发送通知。这样的需求简而言之就是在云端运行一段持续检查要执行的触发器的代码。使用 PaaS 的成本较高。此时就是“ 功能即服务 Function as a Service ”发挥作用的时候了。许多公司,例如 Heroku,向客户提供 FaaS,它只存储一段代码或一个方法,只会在被触发的情况下运行。

FaaS 的好处

  1. 你只需要支付代码运行的费用。托管代码通常是不收费的,除非计算成本很高。
  2. 它不会有使用 PaaS 的那些麻烦,却让你享受所有好处。
  3. 无论如何,你都不必关心底层基础设施。因此,你只需要上传代码,而不必关心任何虚拟机维护相关事宜。
  4. FaaS 让你的开发更加敏捷,即编写函数式代码。

区块链平台即服务(BPaaS)

近年来,区块链席卷了科技行业。它是目前最受欢迎的技术之一,比它更受欢迎的只有人工智能和数据科学相关技术。区块链如此吸引人的原因是它提供了安全、可伸缩和透明的开放式账本架构。这些功能对于许多应用程序都是必要的,例如银行、选举系统,甚至社交媒体也需要这些功能。随着如此广泛的应用,有必要能够在云上托管这样的产品,其模式专门满足这种技术的需求。这就是 区块链平台即服务 Blockchain Platform as a Service (BPaaS)发挥作用的地方。如今,包括亚马逊 AWS 和微软 Azure 在内的许多公司,都在为专门寻求在云中托管基于区块链的应用程序的客户提供BPaaS解决方案。

BPaaS 的好处

  1. 它满足了区块链行业的特定需求,例如支持用于编写智能合约的专用语言。
  2. 通过提供 API 桥接,支持与区块链(如以太坊)集成。
  3. 支持在区块链技术的应用中使用自定义数据库。
  4. 云的所有优点它也同样具备,即“按需付费”功能、可扩展性、安全性和访问便捷性。

(题图:MJ/db8225c1-e970-4bc4-80db-514368955af2)


via: https://www.opensourceforu.com/2022/09/a-complete-guide-to-cloud-service-architectures/

作者:Mir H.S. Quadri 选题:lkxed 译者:cool-summer-021 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出