Trino HTTPS 与密码认证介绍与实战操作

文章目录

    • 一、概述
    • 二、安装 Trino
    • 三、配置 HTTPS
      • 1)生成证书
      • 2)配置 Trino
      • 3)修改 Trino docker-compose yaml 文件
      • 4)开始部署 Trino
      • 5)测试验证
    • 四、密码认证
      • 1)开启密码认证
      • 2)创建密码认证配置文件
      • 3)修改 Trino docker-compose yaml 文件
      • 4)开始部署 Trino
      • 5)测试验证
    • 五、权限控制(优雅下线)
      • 1)配置 etc/access-control.properties
      • 2)修改 Trino docker-compose yaml 文件
      • 3)开始部署 Trino
      • 4)测试验证

一、概述

Trino(以前称为Presto SQL或PrestoDB)支持TLS(传输层安全性)认证以确保在数据传输过程中的安全性。TLS认证是一种用于加密和保护数据传输的协议,它在客户端和服务器之间建立安全的通信通道,以防止中间人攻击和数据泄露。

以下是使用TLS认证的一些背景信息:

  • 数据安全性:在数据分析和查询过程中,敏感数据的传输可能涉及到机密信息,如个人身份信息、财务数据等。TLS认证提供了一种加密通信的方式,确保数据在传输过程中不被未经授权的人或系统访问。

  • 防止中间人攻击:TLS认证可以防止中间人攻击,其中攻击者试图在客户端和服务器之间的通信中插入恶意代码或窃取数据。通过建立安全通信通道并验证服务器的身份,TLS可以保护免受此类攻击的影响。

  • 合规性要求:许多法规和合规性要求要求对敏感数据的传输进行加密。使用TLS认证有助于满足这些要求,并降低数据泄露的风险。

  • 身份验证:TLS认证还允许客户端验证服务器的身份。服务器使用SSL证书来证明其身份,客户端可以验证此证书以确保连接到正确的服务器。这有助于防止恶意伪装服务器的攻击。

  • 数据完整性:TLS还提供了数据完整性检查,以确保在传输过程中数据未被篡改或损坏。

要在Trino中启用TLS认证,你需要生成和配置SSL证书,然后在Trino的配置文件中指定证书的路径和其他相关设置。一旦配置完成,Trino服务器和客户端将能够建立安全的TLS连接,确保数据传输的机密性和完整性。这对于保护敏感数据以及满足安全性和合规性要求非常重要。

官方文档:https://trino.io/docs/current/security/tls.html

在这里插入图片描述

二、安装 Trino

如果想快速部署,可以参考我之前的文章:

  • 大数据Hadoop之——基于内存型SQL查询引擎Presto(Presto-Trino环境部署)
  • 【大数据】通过 docker-compose 快速部署 Presto(Trino)保姆级教程
  • 【云原生】Presto/Trino on k8s 环境部署

Trino官方文档:https://trino.io/docs/current/

这里为了快速部署就选择docke-compose部署了。

git clone https://gitee.com/hadoop-bigdata/docker-compose-presto.git
cd docker-compose-presto# 部署
docker-compose up -d# 为了不影响之前的分支,这里创建一个新分支
git checkout -b https-passwd

三、配置 HTTPS

1)生成证书

如果已有证书,这一步就可以省略。

mkdir tls && cd tls
# 生成 CA 证书私钥
openssl genrsa -out trino.key 4096
# 生成 CA 证书
openssl req -x509 -new -nodes -sha512 -days 3650 \-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=mytrino.com" \-key trino.key \-out trino.cert# 合并
cat trino.key trino.cert > trino.pem

2)配置 Trino

在Trino的配置文件中,指定密钥库和密码,以便Trino服务器能够使用生成的证书和密钥。配置文件中的示例设置如下:

http-server.https.enabled=true
http-server.https.port=8443
http-server.https.keystore.path=/opt/apache/trino/etc/tls/trino.pem
#节点之间不需要使用https通信,在内网部署无需,外网需打开,默认就是false
internal-communication.https.required=false

3)修改 Trino docker-compose yaml 文件

version: '3'
services:trino-coordinator:image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/trino-jmx-exporter:416user: "hadoop:hadoop"container_name: trino-coordinatorhostname: trino-coordinatorrestart: alwaysprivileged: trueenv_file:- .envvolumes:- ./etc/coordinator/config.properties:${TRINO_HOME}/etc/config.properties- ./etc/coordinator/jvm.config:${TRINO_HOME}/etc/jvm.config- ./etc/coordinator/log.properties:${TRINO_HOME}/etc/log.properties- ./etc/coordinator/node.properties:${TRINO_HOME}/etc/node.properties- ./etc/catalog/:${TRINO_HOME}/etc/catalog/- ./jmx-exporter/jmx_config.yaml:${TRINO_HOME}/etc/jmx_config.yaml- ./tls:${TRINO_HOME}/etc/tlsports:- "30080:${TRINO_SERVER_PORT}"- "30443:${TRINO_SERVER_HTTPS_PORT}"- "30980:${JMX_RMIREGISTRY_PORT}"- "30981:${JMX_RMISERVER_PORT}"- "3900"command: ["sh","-c","/opt/apache/bootstrap.sh trino-coordinator"]networks:- hadoop-networkhealthcheck:test: ["CMD-SHELL", "curl --fail http://localhost:${TRINO_SERVER_PORT}/v1/info || exit 1"]interval: 10stimeout: 20sretries: 3trino-worker:image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/trino:416user: "hadoop:hadoop"restart: alwaysprivileged: truedeploy:replicas: 1env_file:- .envvolumes:- ./etc/worker/config.properties:${TRINO_HOME}/etc/config.properties- ./etc/worker/jvm.config:${TRINO_HOME}/etc/jvm.config- ./etc/worker/log.properties:${TRINO_HOME}/etc/log.properties- ./etc/worker/node.properties:${TRINO_HOME}/etc/node.properties- ./etc/catalog/:${TRINO_HOME}/etc/catalog/- ./jmx-exporter/jmx_config.yaml:${TRINO_HOME}/etc/jmx_config.yaml- ./tls:${TRINO_HOME}/etc/tlsports:- "${TRINO_SERVER_PORT}"command: ["sh","-c","/opt/apache/bootstrap.sh trino-worker"]networks:- hadoop-networkhealthcheck:test: ["CMD-SHELL", "curl --fail http://localhost:${TRINO_SERVER_PORT}/v1/info || exit 1"]interval: 10stimeout: 10sretries: 3# 连接外部网络
networks:hadoop-network:external: true

4)开始部署 Trino

# 如果没创建就先创建
docker network create hadoop-network# 开始部署
docker-compose -f docker-compose.yaml up -d

5)测试验证

web:https://[ip或域名]:对外端口
在这里插入图片描述
【温馨提示】原先的http也是可以访问的。

docker exec -it trino-coordinator bash# 执行下面的命令可能不行,那是因为自己生成的证书是不可信的,得加一个参数 --insecure,去跳过证书验证。
./bin/trino-cli --server https://localhost:8443
select * from system.runtime.nodes;./bin/trino-cli --server https://localhost:8443  --insecure
select * from system.runtime.nodes;# http 也是可以访问的
./bin/trino-cli --server localhost:8080
select * from system.runtime.nodes;

在这里插入图片描述

四、密码认证

【温馨提示】要使用trino的权限控制,从官方文档上看,需要开启https,因此一定需要证书的。

1)开启密码认证

# etc/config.properties增加如下配置,开启密码认证
http-server.authentication.type=PASSWORD
# trino最新版本要求当启用trino的认证机制后,比如你开了kerberos,就必须要求trino节点内部通信提供一个shared-secret,这个secret你可以自定义。worker和coordinator的shared-secret保持一致即可。
#节点通信秘钥凭证
internal-communication.shared-secret=trino-secret

2)创建密码认证配置文件

创建配置etc/password-authenticator.properties,此处可以配置使用LDAP或密码文件认证,这里测试采用密码文件认证。配置内容如下:
password-authenticator.properties,里面需要用到password.db,这个文件就是在登录trino的时候使用到的用户名密码,需要bcrypt加密,可以去网络上找在线加密

password-authenticator.name=file
file.password-file=/opt/apache/trino/etc/password.db

password.db,用户密码文件,一行就是一个用户名密码,用户密码用:隔开,比如我定义了一个admin/123456的用户。在使用bcrypt加密的时候,生成的密码可能是$2a$开头的,而根据trino文档内定义的password规范是需要$2y$开头的,这里需要注意。

这里提供一个在线bcrypt加密地址:http://www.ab126.com/goju/10822.html

etc/password.db 内容如下:

admin:$2y$10$9O.FnPn27br2ebxzns3QkOj22OTQAaTvIBPjZd1dAjS5MOXaOJFxK

3)修改 Trino docker-compose yaml 文件

version: '3'
services:trino-coordinator:image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/trino-jmx-exporter:416user: "hadoop:hadoop"container_name: trino-coordinatorhostname: trino-coordinatorrestart: alwaysprivileged: trueenv_file:- .envvolumes:- ./etc/coordinator/config.properties:${TRINO_HOME}/etc/config.properties- ./etc/coordinator/jvm.config:${TRINO_HOME}/etc/jvm.config- ./etc/coordinator/log.properties:${TRINO_HOME}/etc/log.properties- ./etc/coordinator/node.properties:${TRINO_HOME}/etc/node.properties- ./etc/catalog/:${TRINO_HOME}/etc/catalog/- ./jmx-exporter/jmx_config.yaml:${TRINO_HOME}/etc/jmx_config.yaml- ./tls:${TRINO_HOME}/etc/tls- ./etc/password.db:${TRINO_HOME}/etc/password.db- ./etc/password-authenticator.properties:${TRINO_HOME}/etc/password-authenticator.propertiesports:- "30080:${TRINO_SERVER_PORT}"- "30443:${TRINO_SERVER_HTTPS_PORT}"- "30980:${JMX_RMIREGISTRY_PORT}"- "30981:${JMX_RMISERVER_PORT}"- "3900"command: ["sh","-c","/opt/apache/bootstrap.sh trino-coordinator"]networks:- hadoop-networkhealthcheck:test: ["CMD-SHELL", "curl --fail http://localhost:${TRINO_SERVER_PORT}/v1/info || exit 1"]interval: 10stimeout: 20sretries: 3trino-worker:image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/trino:416user: "hadoop:hadoop"restart: alwaysprivileged: truedeploy:replicas: 1env_file:- .envvolumes:- ./etc/worker/config.properties:${TRINO_HOME}/etc/config.properties- ./etc/worker/jvm.config:${TRINO_HOME}/etc/jvm.config- ./etc/worker/log.properties:${TRINO_HOME}/etc/log.properties- ./etc/worker/node.properties:${TRINO_HOME}/etc/node.properties- ./etc/catalog/:${TRINO_HOME}/etc/catalog/- ./jmx-exporter/jmx_config.yaml:${TRINO_HOME}/etc/jmx_config.yaml- ./tls:${TRINO_HOME}/etc/tls- ./etc/password.db:${TRINO_HOME}/etc/password.db- ./etc/password-authenticator.properties:${TRINO_HOME}/etc/password-authenticator.propertiesports:- "${TRINO_SERVER_PORT}"command: ["sh","-c","/opt/apache/bootstrap.sh trino-worker"]networks:- hadoop-networkhealthcheck:test: ["CMD-SHELL", "curl --fail http://localhost:${TRINO_SERVER_PORT}/v1/info || exit 1"]interval: 10stimeout: 10sretries: 3# 连接外部网络
networks:hadoop-network:external: true

4)开始部署 Trino

# 如果没创建就先创建
docker network create hadoop-network# 开始部署
docker-compose -f docker-compose.yaml up -d

5)测试验证

web:https://[ip或域名]:对外端口
在这里插入图片描述

docker exec -it trino-coordinator bash# 执行下面的命令可能不行,那是因为自己生成的证书是不可信的,得加一个参数 --insecure,去跳过证书验证。
./bin/trino-cli --server https://localhost:8443 --user=admin --password --insecure
# 输入密码:123456select * from system.runtime.nodes;exit# 非交互登录设置一个TRINO_PASSWORD 环境变量
export TRINO_PASSWORD="123456"
./bin/trino-cli --server https://localhost:8443 --user=admin --password --insecure
select * from system.runtime.nodes;

在这里插入图片描述

五、权限控制(优雅下线)

优雅下线官方文档:https://trino.io/docs/current/admin/graceful-shutdown.html
权限控制官方文档:https://trino.io/docs/current/security/built-in-system-access-control.html

如果需要优雅下线操作,必须设置访问权限,默认default是没有权限优雅下线worker节点的。这里只是拿优雅下线的操作的简单说一下权限权限控制,后面会详细介绍。系统提供了四种访问权限:

权限名称描述
default除了用户模拟和触发 Graceful shutdown之外,所有操作都是允许的。如果未配置,则这是默认访问控制。
allow-all所有操作均被允许。
read-only允许读取数据或元数据的操作,但不允许写入数据或元数据的操作。
file授权规则在配置文件中指定。请参阅 基于文件的访问控制。

1)配置 etc/access-control.properties

access-control.name=allow-all

2)修改 Trino docker-compose yaml 文件

挂载文件,完整 docker-compose.yaml 文件

version: '3'
services:trino-coordinator:image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/trino-jmx-exporter:416user: "hadoop:hadoop"container_name: trino-coordinatorhostname: trino-coordinatorrestart: alwaysprivileged: trueenv_file:- .envvolumes:- ./etc/coordinator/config.properties:${TRINO_HOME}/etc/config.properties- ./etc/coordinator/jvm.config:${TRINO_HOME}/etc/jvm.config- ./etc/coordinator/log.properties:${TRINO_HOME}/etc/log.properties- ./etc/coordinator/node.properties:${TRINO_HOME}/etc/node.properties- ./etc/catalog/:${TRINO_HOME}/etc/catalog/- ./jmx-exporter/jmx_config.yaml:${TRINO_HOME}/etc/jmx_config.yaml- ./tls:${TRINO_HOME}/etc/tls- ./etc/password.db:${TRINO_HOME}/etc/password.db- ./etc/password-authenticator.properties:${TRINO_HOME}/etc/password-authenticator.properties- ./etc/access-control.properties:${TRINO_HOME}/etc/access-control.propertiesports:- "30080:${TRINO_SERVER_PORT}"- "30443:${TRINO_SERVER_HTTPS_PORT}"- "30980:${JMX_RMIREGISTRY_PORT}"- "30981:${JMX_RMISERVER_PORT}"- "3900"command: ["sh","-c","/opt/apache/bootstrap.sh trino-coordinator"]networks:- hadoop-networkhealthcheck:test: ["CMD-SHELL", "curl --fail http://localhost:${TRINO_SERVER_PORT}/v1/info || exit 1"]interval: 10stimeout: 20sretries: 3trino-worker:image: registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/trino:416user: "hadoop:hadoop"restart: alwaysprivileged: truedeploy:replicas: 1env_file:- .envvolumes:- ./etc/worker/config.properties:${TRINO_HOME}/etc/config.properties- ./etc/worker/jvm.config:${TRINO_HOME}/etc/jvm.config- ./etc/worker/log.properties:${TRINO_HOME}/etc/log.properties- ./etc/worker/node.properties:${TRINO_HOME}/etc/node.properties- ./etc/catalog/:${TRINO_HOME}/etc/catalog/- ./jmx-exporter/jmx_config.yaml:${TRINO_HOME}/etc/jmx_config.yaml- ./tls:${TRINO_HOME}/etc/tls- ./etc/password.db:${TRINO_HOME}/etc/password.db- ./etc/password-authenticator.properties:${TRINO_HOME}/etc/password-authenticator.properties- ./etc/access-control.properties:${TRINO_HOME}/etc/access-control.propertiesports:- "${TRINO_SERVER_PORT}"command: ["sh","-c","/opt/apache/bootstrap.sh trino-worker"]networks:- hadoop-networkhealthcheck:test: ["CMD-SHELL", "curl --fail http://localhost:${TRINO_SERVER_PORT}/v1/info || exit 1"]interval: 10stimeout: 10sretries: 3# 连接外部网络
networks:hadoop-network:external: true

3)开始部署 Trino

# 如果没创建就先创建
docker network create hadoop-network# 开始部署
docker-compose -f docker-compose.yaml up -d

4)测试验证

docker exec -it trino-coordinator bash# 优雅下线 worker 节点
curl -ksv -X PUT -u 'admin:123456' -d '"SHUTTING_DOWN"' -H "Content-type: application/json" https://docker-compose-presto-trino-worker-1:8443/v1/info/state

在这里插入图片描述


Trino HTTPS 与密码认证介绍与实战操作就先到这里了,有任何疑问也可关注我公众号:大数据与云原生技术分享,进行技术交流,如本篇文章对您有所帮助,麻烦帮忙一键三连(点赞、转发、收藏)~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/134571.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编辑器的缩略图实现原理

一、背景 部分 Web 版的 IDE 编辑器未曾实现缩略图功能,探寻一下缩略图的实现逻辑。以 VSCode 为例。 VSCode 的编辑器是monaco实现的,编辑器的编辑区都是采用的虚拟渲染,即仅渲染可视区的代码,可视区之外的动态去除 DOM 节点。…

SpringBoot结合MyBatis实现多数据源配置

SpringBoot结合MyBatis实现多数据源配置 一、前提条件 1.1、环境准备 SpringBoot框架实现多数据源操作,首先需要搭建Mybatis的运行环境。 由于是多数据源,也就是要有多个数据库,所以,我们创建两个测试数据库,分别是…

6. 装饰器

UML 聚合(Aggregation)关系&#xff1a;大雁和雁群&#xff0c;上图中空心菱形箭头表示聚合关系组合(Composition)关系&#xff1a;大雁和翅膀 &#xff0c;实心菱形箭头表示组合(Composition)关系 测试代码 #include <iostream> #include <stdio.h> #include &l…

R 语言的安装教程

一、下载相关软件 1、R 下载 官网&#xff1a;R: The R Project for Statistical Computing 找到中国镜像&#xff0c;下载快 历史版本点击这里 2、Rtools 下载 进入镜像后&#xff0c;点击这里 然后选择与上面下载的R版本相对应的版本即可 3、Rstudio 下载 官网&#xff1…

Spring 篇

1、什么是 Spring&#xff1f; Spring是一个轻量级的IOC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架&#xff0c;目的是用于简化企业应用程序的开发&#xff0c;它使得开发者只需要关心业务需求。常见的配置方式有三种&#xff1a;基于XML的配置、基于注解的配置…

Prometheus+Grafana可视化监控【Nginx状态】

文章目录 一、安装Docker二、安装Nginx(Docker容器方式)三、安装Prometheus四、安装Grafana五、Pronetheus和Grafana相关联六、安装nginx_exporter七、Grafana添加Nginx监控模板 一、安装Docker 注意&#xff1a;我这里使用之前写好脚本进行安装Docker&#xff0c;如果已经有D…

排查disabled问题之谷歌新版本特性

问题复现 最近我突然接手一个后台的bug&#xff0c;这个后台很久没有迭代更新了&#xff0c;我也不熟悉业务&#xff0c;所以只能看一下源码&#xff0c;问题很快就复现&#xff0c;测试的修复操作也很正确&#xff0c;就是因为渲染的input标签中存在disableddisabled’属性导…

Swing程序设计详解(一)

【今日】 “若你决定灿烂&#xff0c;山无遮&#xff0c;海无拦” 目录 初识Swing 一 Swing简述 二 Swing常用窗体 2.1 JFrame窗体 2.2 JDialog对话框 2.3JOptionPane小型对话框 (1)通知框 (2)确认框 (3)输入框 (4)自定义对话框 三 常用布局管理器 3.1 绝…

计算机组成与设计硬软件接口学习2

并行处理器&#xff1a;从客户端到云 任务级并行或进程级并行&#xff1a;通过同时运行独立的多个程序来使用多处理器 并行处理程序&#xff1a;同时在多个处理器上运行的单个程序 向量和标量 向量指令的重要属性&#xff1a; 单个向量指令指定了大量工作--相当于执行了完…

代码随想录训练营第四十八天|198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

198.打家劫舍 力扣题目链接(opens new window) 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系…

基于PyTorch使用LSTM实现新闻文本分类任务

本文参考 PyTorch深度学习项目实战100例 https://weibaohang.blog.csdn.net/article/details/127154284?spm1001.2014.3001.5501 文章目录 本文参考任务介绍做数据的导入 环境介绍导入必要的包介绍torchnet和keras做数据的导入给必要的参数命名加载文本数据数据前处理模型训…

Android高级开发-APK极致优化

九道工序 1. SVG(Scalable Vector Graphics)可缩放矢量图 使用矢量图代替位图可以减小 APK 的尺寸&#xff0c;因为可以针对不同屏幕密度调整同一文件的大小&#xff0c;而不会降低图像质量。 矢量图首次加载时可能消耗更多的 CPU 资源。之后&#xff0c;二者的内存使用率和…

Java集合之LinedList

LinedList类实现了List接口&#xff0c;他提供了&#xff08;双向的&#xff09;链表数据结构 在该链表中的每一个元素除了存储本身的内容之外还存储指向前一个元素的指针和指向后一个元素的指针&#xff0c;下图展示了一个包含三个元素的双向链表&#xff0c;每个链表都有一个…

jeesite实现excel导入功能(保姆级图文教程)

文章目录 前言一、准备工作1.准备一个excel模板,放入static目录2.application.yml文件中设置文件存储路径3.使用easyexcel插件解析excel数据,pom文件导入easyexcel二、使用步骤1.列表页添加下载模板按钮2.表单页添加文件上传3. 创建excel解析对应实体4.后台完成文件上传代码,…

深入探索智能问答:从检索到生成的技术之旅

目录 一、智能问答概述1. **语义理解**2. **知识库和数据库**3. **上下文感知**4. **动态学习和自适应** 二、发展历程1. **基于规则的系统**2. **统计方法的兴起**3. **深度学习和神经网络的突破**4. **预训练模型** 三、智能问答系统的主要类型四、基于知识库的问答系统五、基…

机器视觉之Basler工业相机使用和配置方法(C++)

basler工业相机做双目视觉用&#xff0c;出现很多问题记录一下&#xff1a; 首先是多看手册&#xff1a;https://zh.docs.baslerweb.com/software 手册内有所有的源码和参考示例&#xff0c;实际上在使用过程中&#xff0c;大部分都是这些源码&#xff0c;具体项目选择对应的…

【微信小程序】项目初始化

| var() CSS 函数可以插入一个自定义属性&#xff08;有时也被称为“CSS 变量”&#xff09;的值&#xff0c;用来代替非自定义 属性中值的任何部分。 1.初始化样式与颜色 view,text{box-sizing: border-box; } page{--themColor:#ad905c;--globalColor:#18191b;--focusColor…

【测试开发】答疑篇 · 什么是软件测试

【测试开发】答疑篇 文章目录 【测试开发】答疑篇1. 生活中的测试2. 什么是软件测试3. 为什么要有测试/没有测试行不行4. 软件测试和软件开发的区别5. 软件测试和软件调试之间的区别6. 软件测试的岗位7. 优秀测试人员具备的素质 【测试开发】答疑篇 软件不一定是桌面应用&#…

JSON和全局异常处理

目录 1️⃣JSON 一、什么是json&#xff1f; 二、与javascript的关系 三、语法格式 四、注意事项 五、总结 六&#xff0c;使用json 1导入pom.xml依赖 2.配置spring-mvc.xml 3. ResponseBody注解使用 创建一个web层控制器 编写ClazzBiz 实现接口 测试&#xff1a; …

树莓派4b装系统到运行 Blazor Linux 本地程序全记录

在Linux下运行gui程序,咱也是第一次做,属于是瞎子过河乱摸一通,写得有什么不对和可以优化的地方,希望各位看官斧正斧正. ##1. 下载烧录器 https://www.raspberrypi.com/software/####我选择的是Raspbian 64位系统,并配置好ssh账号密码,wifi,以便启动后可以直接黑屏ssh连接 ##…