分类 技术 下的文章

使用 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中国 荣誉推出

经过大约 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中国 荣誉推出

我们评测了最新的 SparkyLinux 7 “Orion Belt”,它带来了最新、最好的 Debian 12 软件包。

SparkyLinux 是著名的基于 Debian 的桌面 Linux 发行版,又推出了它的最新版本 SparkyLinux 7 “Orion Belt”。自 SparkyLinux 6.0 以来,经过近两年的开发,这个主要版本已经发布。这个备受期待的版本结合了 Debian 12 的稳定性优势和 SparkyLinux 的尖端功能,承诺提供卓越的用户体验。

让我们深入研究这个主要版本的细节,并了解它的性能和其他发行版方面。

SparkyLinux 7 “Orion Belt”

核心更新

SparkyLinux 以其多样化的桌面风格而脱颖而出,确保适合每个用户。无论你喜欢视觉上令人惊叹的 KDE Plasma、轻量级 LXQt、经典 MATE、可定制的 Xfce 还是简约的 Openbox,SparkyLinux 7 都提供了令人印象深刻的选择,以满足各种喜好和要求。

SparkyLinux 7 的核心是 Debian 12 “Bookworm”,为稳定性和可靠性提供了坚实的基础。Debian 12 几天前发布,作为该项目的一个重要里程碑,它是历史上最好的 Debian 版本之一。也就是说,在 SparkyLinux 7 中,用户可以期望从 Debian “Bookworm” 和 Sparky “Orion Belt” 仓库更新所有软件包,确保最新的软件版本随时可用。

此版本默认由 Linux 内核 6.1 LTS 提供支持。但是,如果你更喜欢前沿的主线内核,那么你可以在不稳定的仓库中获取 6.3 和 5.15 LTS。

SparkyLinux 7 Xfce 桌面

增强的应用和软件

内置应用堆栈已更新,包括基本应用。你可以使用稳定的 Firefox 102.12 ESR、Thunderbird 102.12、VLC 3.0 和 LibreOffice 7.4 作为关键应用。如果你更喜欢最新的 Firefox,那么可以使用 Firefox 114,它可以在单独的 Sparky 仓库中找到。

Sparky APTus AppCenter 是一款用于管理软件安装和更新的集成工具,已更新至版本 20230530,增强了用户的便利性。在一项重大更改中,systemd-timesyncd 取代了 ntp 以简化时间同步。

SparkyLinux 的旗舰产品 Xfce 桌面版本为 4.18,这是这款轻量级桌面的最新更新版本。此外,你还可以找到其他版本,例如 KDE Plasma 5.27、LXQt 1.2 和 MATE 1.26。

该团队还投入了大量精力来改进 amd64 ISO 映像,使其能够在具有 UEFI 主板和启用安全启动的机器上启动,从而扩展了对现代系统的兼容性。

那么,关于这个版本的更新就到这里了。我们来看看性能吧。

APTUS Appcenter for SparkyLinux

安装和性能

我使用 SparkyLinux Xfce 版本进行了本次评测的测试。Calamares 3.2.61 的安装很顺利,没有任何错误。如果你正在安装,你应该注意 立付 live 介质的密码是 “live”,这是启动安装程序所必需的。

所有更新脚本(包括欢迎应用)在安装后运行良好。欢迎程序可让你快速访问所有系统信息和桌面功能。

我通过 Firefox(运行 YouTube 的 4 个以上选项卡)、文件管理器、绘图应用、终端、VLC、Synaptic 包管理器和 AppCenter 来运行这个版本。资源占用稍高一些。

此负载的内存消耗约为 2 GB,CPU 使用率平均约为 2%。SparkyLinux 7(Xfce)默认安装占用 5.2 GB 磁盘空间。

所以,总的来说,我相信它运行得相当好,但考虑到 Xfce 桌面,内存消耗似乎有点高。

SparkyLinux 7 性能

总结

SparkyLinux 7 “Orion Belt” 带来了 Debian 的精华,为用户提供稳定性和多功能性的平衡组合。SparkyLinux 凭借其广泛的桌面风格、精选应用和专业版本,可以满足广泛的用户需求。

该版本将持续近两年的维护和安全更新。因此,你可以放心地采用它作为你的日常使用。

你可以从其 官方网站 下载 SparkyLinux。

参考自 发布公告

(题图:MJ/2be08f20-13c3-4c3c-bb84-0bf5be77f86c/)


via: https://www.debugpoint.com/sparkylinux-7-review/

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

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

充分利用现有的技术,提供书签以帮助用户。

介绍 pdftk-java 中, 我展示了如何在脚本中使用 pdftk-java 来快速修改 PDF 文件。

但是,pdftk-java 最有用的场景是处理那种动辄几百页的没有目录的大 PDF 文件。这里所谓的目录不是指文档前面供打印的目录,而是指显示在 PDF 阅读器侧边栏里的目录,它在 PDF 格式中的正式叫法是“ 书签 bookmarks ”。

 title=

如果没有书签,就只能通过上下滚动或全局搜索文本来定位想要的章节,这非常麻烦。

PDF 文件的另一个恼人的小问题是缺乏元数据,比如标题和作者。如果你打开过一个标题栏上显示类似 “Microsoft Word - 04\_Classics\_Revisited.docx” 的 PDF 文件,你就能体会那种感觉了。

pdftk-java 让我能够创建自己的书签,我再也不面对这些问题了。

在 Linux 上安装 pdftk-java

正如 pdftk-java 的名称所示的,它是用 Java 编写的。它能够在所有主流操作系统上运行,只要你安装了 Java。

Linux 和 macOS 用户可以从 AdoptOpenJDK.net 安装 Java(LCTT 译注:原文为 Linux,应为笔误)。

Windows 用户可以安装 Red Hat's Windows build of OpenJDK

在 Linux 上安装 pdftk-java:

  1. 从 Gitlab 仓库下载 pdftk-all.jar release,保存至 ~/.local/bin/其它路径 下.
  2. 用文本编辑器打开 ~/.bashrc,添加 alias pdftk='java -jar $HOME/.local/bin/pdftk-all.jar'
  3. 运行 source ~/.bashrc 使新的 Bash 设置生效。

数据转储

修改元数据的第一步是抽取 PDF 当前的数据文件。

现在的数据文件可能并没包含多少内容,但这也是一个不错的开端。

$ pdftk mybigfile.pdf \
  data_dump \
  output bookmarks.txt

生成的 bookmarks.txt 文件中包含了输入 PDF 文件 mybigfile.pdf 的所有元数据和一大堆无用数据。

编辑元数据

用文本编辑器(比如 AtomGedit)打开 bookmarks.txt 以编辑 PDF 元数据。

元数据的格式和数据项直观易懂:

InfoBegin
InfoKey: Creator
InfoValue: Word
InfoBegin
InfoKey: ModDate
InfoValue: D:20151221203353Z00'00'
InfoBegin
InfoKey: CreationDate
InfoValue: D:20151221203353Z00'00'
InfoBegin
InfoKey: Producer
InfoValue: Mac OS X 10.10.4 Quartz PDFContext
InfoBegin
InfoKey: Title
InfoValue: Microsoft Word - 04_UA_Classics_Revisited.docx
PdfID0: f049e63eaf3b4061ddad16b455ca780f
PdfID1: f049e63eaf3b4061ddad16b455ca780f
NumberOfPages: 42
PageMediaBegin
PageMediaNumber: 1
PageMediaRotation: 0
PageMediaRect: 0 0 612 792
PageMediaDimensions: 612 792
[...]

你可以将 InfoValue 的值修改为对当前 PDF 有意义的内容。比如可以将 Creator 字段从 Word 修改为实际的作者或出版社名称。比起使用导出程序自动生成的标题,使用书籍的实际标题会更好。

你也可以做一些清理工作。在 NumberOfPages 之后的行都不是必需的,可以删除这些行的内容。

添加书签

PDF 书签的格式如下:

BookmarkBegin
BookmarkTitle: My first bookmark
BookmarkLevel: 1
BookmarkPageNumber: 2
  • BookmarkBegin 表示这是一个书签。
  • BookmarkTitle 书签在 PDF 阅读器中显示的文本。
  • BookmarkLevel 书签层级。如果书签层级为 2,它将出现在上一个书签的小三角下。如果设置为 3,它会显示在上一个 2 级书签的小三角下。这让你能为章以及其中的节设置书签。
  • BookmarkPageNumber 点击书签时转到的页码。

为你需要的章节创建书签,然后保存文件。

更新书签信息

现在已经准备好了元数据和书签,你可以将它们导入到 PDF 文件中。实际上是将这些信息导入到一个新的 PDF 文件中,它的内容与原 PDF 文件相同:

$ pdftk mybigfile.pdf \
  update_info bookmarks.txt \
  output mynewfile.pdf

生成的 mynewfile.pdf 包含了你设置的全部元数据和书签。

体现专业性

PDF 文件中是否包含定制化的元数据和书签可能并不会影响销售。

但是,关注元数据可以向用户表明你重视质量保证。增加书签可以为用户提供便利,同时亦是充分利用现有技术。

使用 pdftk-java 来简化这个过程,用户会感激不尽。

(题图:MJ/f8869a66-562d-4ee4-9f2d-1949944d6a9c)


via: https://opensource.com/article/22/1/pdf-metadata-pdftk

作者:Seth Kenlon 选题:lujun9972 译者:toknow-gh 校对:wxy

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

人们使用树莓派做各种各样的事情。有哪些用途让你特别好奇的吗?

最近,我在一个电话会议上听到有人说开源社区是好奇心和解决问题的文化的结合。好奇心是我们解决问题的基础。在解决各种规模的问题时,我们使用了大量的开源工具,其中包括在功能极为方便的树莓派上运行的 Linux

我们每个人都有各种不同的生活经历,所以我向我们的作者社区询问了他们所遇到的最奇特的树莓派用途。我有一种预感,这些令人惊奇的构建将会为其他人激发灵感。

使用树莓派进行实验

对我来说,树莓派是在家庭网络中增加额外开发资源的绝佳工具。如果我想要创建一个新的网站或者尝试一个新的软件工具,我不必让我的桌面 Linux 机器因为一堆我可能只在实验时使用一次的软件包而变得笨重。相反,我会将它设置在我的树莓派上。

如果我认为我将要做一些冒险的事情,我会使用备份的启动环境。我有两张 microSD 卡,这样我就可以在树莓派上插一张卡,同时设置第二张卡进行任何我想要的实验。额外的 microSD 卡成本并不高,但在我想要在第二个镜像上进行实验的时候,它能节省大量时间。只需关机,换下 microSD 卡,重新启动,立即就可以在专用的测试系统上工作。

当我不进行实验时,我的树莓派充当打印服务器,将我的非 WiFi 打印机连接到家庭网络上。它还是一个方便的 SSH 文件服务器,让我可以快速备份重要文件。

Jim Hall

树莓派的流行

我见过的树莓派最令人惊讶的事情是它使小型单板计算机的概念变得流行和通俗化,并使其真正实用于大众。

在树莓派出现之前,我们有类似的小型单板计算机,但它们往往是小众的、昂贵的,并且从软件角度来看让人拒之千里。树莓派价格便宜,便宜到任何人都可以轻松为一个项目获得一台(不考虑目前难以获得的情况)。一旦它变得便宜,人们就会克服软件挑战,使其足够好以解决许多基本的计算任务,甚至可以将完整的真正的计算机用于特定任务,而不仅仅是微控制器。

我们拥有大量好的、相对廉价的小型单板计算机,这促进了各种调试、玩耍和 实验。人们愿意尝试新的想法,甚至推动了更多业余爱好者的硬件开发来支持这些想法。

老实说,这是我从树莓派看到的最令人惊奇和激进的事情:它根本性地改变了人们对计算的认知,尤其是树莓派擅长的领域,并不仅仅催生了自己的生态系统,现在还催生了无数其他多样化的生态系统。

John ‘Warthog9' Hawley

蜜蜂的树莓派

在 2018 年,我和我的弟弟曾经养过几个蜂箱,并使用树莓派和各种传感器来监测蜂箱的温度和湿度。我们还计划在夏天实施蜂箱秤,以观察蜜蜂的产蜜情况,并在冬天测量重量,以查看蜜蜂是否有足够的食物。不过我们最终没有实施这个计划。

我们的小型监测解决方案基于树莓派 2B,运行 Raspbian Stretch(基于 Debian 9),并连接了一个温湿度传感器(DHT11)。在蜂箱内我们有三到四个这样的传感器,用于测量蜂箱入口孔、盖子下方和最低框架的温度。我们直接将传感器连接到树莓派,并使用 Python\_DHT 传感器库读取数据。我们还建立了 InfluxDB、Telegraf,并最终设置了 Grafana 来可视化数据。

如果你想了解更多关于我们的设置的信息,我们在 Linux Magazine 上发表了一篇关于我们小型监测解决方案的文章。

Heike Jurzik

树莓派的复古计算

我希望用树莓派创建一个模拟如何使用“开关和指示灯”将机器语言编程到旧式计算机的项目。使用树莓派的 GPIO 引脚,这看起来相当简单。例如,他们的在线手册上展示了如何使用 GPIO 开关控制 LED 的开关,或者使用按钮进行输入。我认为只需一些 LED 和开关,再加上在树莓派上运行的小程序,就可以模拟旧式计算机。不过,我缺乏空闲时间来从事这样的项目,这就是为什么我编写了 Toy CPU 来模拟它。

Jim Hall

使用树莓派打造玩具

当我女儿四岁的时候,她要求圣诞节时给她买一个“巨齿鲨音乐盒”。她能在脑海中完美地想像出来。它会是粉红色的、闪闪发光的,上面有她的名字。当她打开盒子时,会播放这部热门电影的主题曲。她可以将巨齿鲨和其他宝贝都放在盒子里。在网上和商店里到处搜索后,我发现没有一个能与她的想象相媲美。于是我和丈夫决定,在我们自己的玩具店(也就是他的家庭办公室)自己动手制作一个。而这一切的核心当然是树莓派。他使用光传感器和 Python 脚本,让音乐在恰当的时刻播放。我们将科技设备谨慎地放置在音乐盒的底部,并根据她的审美进行装饰。那一年,开源技术让圣诞魔法成为了可能!

Lauren Pritchett

(题图:MJ/aa8f1412-0f1d-4780-99db-22d6522010b7)


via: https://opensource.com/article/23/3/most-curious-uses-raspberry-pi

作者:AmyJune Hineline 选题:lkxed 译者:ChatGPT 校对:wxy

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

了解如何使用用于切换目录的一个基本但必不可少的 Linux 命令。

Linux 中的 cd 命令用于更改目录。cd 实际上是“ 更改目录 change directories ”的缩写。

这是你必须了解的 基本 Linux 命令之一。

使用 cd 命令非常简单:

cd path_to_directory

不可能比这更简单了,对吧。

然而,你应该理解它的路径部分,以便轻松地浏览 文件系统 而不会感到困惑。

这是绝对路径和相对路径的快速回顾:

Absolute vs relative path in Linux

如果你需要更多细节,我建议你阅读这篇文章:

Linux 上的绝对路径和相对路径有什么不同

让我们看一些使用 cd 命令的示例。

使用绝对路径更改目录

从视觉上看会更容易理解。看下图。

Absolute path travel to the python directory

我当前的位置是我的主目录(/home/abhishek),我必须进入 scripts 目录中的 python 目录。

假设我想使用绝对路径。python 目录的绝对路径是 /home/abhishek/scripts/python

cd /home/abhishek/scripts/python

cd command with absolute path

使用相对路径更改目录

让我们举同样的例子,但这次我将采用相对路径。

Relative path example

我的主目录到 python 目录的相对路径是 scripts/python。让我们用这个:

cd scripts/python

cd command with relative path

进入上级目录

到目前为止,你一直在进入下级。如果你必须进入上级目录怎么办?

假设你位于 /home/abhishek/scripts/python 中,并且必须将目录添加到 scripts

使用绝对路径始终是一种选择,但它相当冗长。相反,你可以使用特殊的目录符号 ..。双点 (..)表示父目录或上一级目录。单点(.)表示当前目录。

cd ..

这是一个例子:

cd up a directory

你可以使用 .. 在 Linux 文件系统层次结构中向上移动路径。

假设我在上图中的 python 目录中,想要进入 code 目录。这是我能做的:

cd ../../code

Go up the directory using cd command

进入主目录

如果你在所有这些目录切换中感到迷失并想回到主目录,有很多简单的快捷方式。

事实上,最简单的就是使用不带任何选项的 cd 命令。

cd

这将使你从文件系统上的任何位置返回主目录。

或者,你可以使用 ~ 符号,表示主目录。

cd ~

Use cd to go back home

进入根目录

尽管你不会像前一个那样经常使用它,但了解一下仍然有好处。

如果你想返回文件系统开始的根目录,请使用以下命令:

cd /

这里不涉及“魔法”。当放在路径开头使用时,/ 表示根。不要将它与路径分隔符混淆。

Paths in Linux

切换回上一级目录

这是一个救命稻草,或者我应该说是“省时稻草”。当你深入目录结构,然后转到另一个目录,然后你觉得需要返回到以前的位置时,此快捷方式会有所帮助。

cd -

还不清楚吗? 让我举个例子。

我位于 /etc/apt/sources.list.d。从这里,进入 /home/abhishek/scripts/python 来处理我的代码。然后我意识到我必须再次检查 /etc/apt/sources.list.d 目录中的某些内容。

通常的方法是这样做,这让我再次输入所有路径:

Go back to previous directory

但聪明的方法是使用这个:

Use cd - to go back to previous directory

看吧,无需再次输入冗长的路径。如期工作!

?️ 练习时间

如果你想练习 cd 命令,这里有一些练习供你使用。

  • 打开终端并进入 /var/log 目录。检查目录内容。你看到了什么?
  • 现在,进入 /var 目录。这是一个上级目录。
  • 从这里返回你的主目录。

这些内容足以让你熟悉 cd 命令。以下是你应该了解的其他一些重要命令。

每个 Ubuntu 用户都应该知道的 31 条 Linux 命令

如果你有疑问或建议,请告诉我。

(题图:MJ/6fbaa345-651a-4cb9-a752-130eda922790)


via: https://itsfoss.com/cd-command/

作者:Abhishek Prakash 选题:lkxed 译者:geekpi 校对:wxy

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