当前位置: 首页 > news >正文

在 Linux下使用 Python 3.11 和 FastAPI 搭建带免费证书的 HTTPS 服务器

在当今数字化时代,保障网站数据传输的安全性至关重要。HTTPS 协议通过使用 SSL/TLS 加密技术,能够有效防止数据在传输过程中被窃取或篡改。本教程将详细介绍如何在 Ubuntu 22.04 系统上,使用 Python 3.11 和 FastAPI 框架搭建一个带有免费 SSL 证书的 HTTPS 服务器。

准备工作

在开始之前,你需要确保满足以下条件:

  • 拥有一台运行 Ubuntu 22.04 的服务器。
  • 具备一个有效的域名,并将其 DNS 解析指向你的服务器 IP 地址。因为 Let's Encrypt 不支持为 IP 地址颁发证书,所以域名是必需的。
  • 服务器已经连接到互联网,并且能够正常访问外部网络。

步骤 1:安装必要的软件包 

首先,我们需要更新系统的软件包列表,并安装 Python 3.11、pip(Python 包管理工具)、Certbot(用于获取免费 SSL 证书)和 Nginx(作为反向代理服务器)。 

# 更新系统软件包列表
sudo apt update
# 安装 Python 3.11 和 pip
sudo apt install python3.11 python3.11-venv python3-pip
# 安装 Certbot 和 Nginx
sudo apt install certbot python3-certbot-nginx nginx

 解释

  • sudo apt update:该命令用于更新系统软件包列表,确保我们能够获取到最新的软件包信息。
  • sudo apt install python3.11 python3.11-venv python3-pip:安装 Python 3.11 及其虚拟环境创建工具 venv 和包管理工具 pip。虚拟环境可以帮助我们隔离不同项目的依赖,避免版本冲突。
  • sudo apt install certbot python3-certbot-nginx nginx:安装 Certbot 及其 Nginx 插件,用于获取和管理 Let's Encrypt 免费 SSL 证书,同时安装 Nginx 服务器。

步骤 2:创建 Python 虚拟环境并安装 FastAPI

为了避免全局 Python 环境的污染,我们将创建一个虚拟环境,并在其中安装 FastAPI 和 Uvicorn(一个用于运行 FastAPI 应用的 ASGI 服务器)。

 注意:也可以用conda来创建pyhton的虚拟环境。以下代码用的python3的source来创建的建议虚拟环境,也够用。

# 创建虚拟环境
python3.11 -m venv fastapi_env
# 激活虚拟环境
source fastapi_env/bin/activate
# 安装 FastAPI 和 Uvicorn
pip install fastapi uvicorn

解释

  • python3.11 -m venv fastapi_env:使用 Python 3.11 的 venv 模块创建一个名为 fastapi_env 的虚拟环境。
  • source fastapi_env/bin/activate:激活虚拟环境,激活后,我们在该终端中执行的所有 Python 命令都将使用该虚拟环境中的 Python 和相关包。
  • pip install fastapi uvicorn:在虚拟环境中安装 FastAPI 和 Uvicorn。

步骤 3:编写 FastAPI 应用

创建一个名为 main.py 的 Python 文件,并编写一个简单的 FastAPI 应用。

from fastapi import FastAPIapp = FastAPI()@app.get("/")
def read_root():return {"..."}

 解释

  • from fastapi import FastAPI:导入 FastAPI 类。
  • app = FastAPI():创建一个 FastAPI 应用实例。
  • @app.get("/"):定义一个 HTTP GET 请求处理函数,当用户访问根路径 / 时,将返回一个包含 {"..."} 的 JSON 响应。

 步骤 4:配置 Nginx 作为反向代理

Nginx 可以作为反向代理服务器,将客户端的请求转发到我们的 FastAPI 应用。

 4.1 创建 Nginx 配置文件

创建一个新的 Nginx 配置文件 /etc/nginx/sites-available/fastapi_app

sudo nano /etc/nginx/sites-available/fastapi_app

在文件中添加以下内容: 

server {listen 80;server_name your_domain;  # 替换为你的实际域名location / {proxy_pass http://127.0.0.1:8000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

解释

  • listen 80;:指定 Nginx 监听 HTTP 端口 80。
  • server_name your_domain;:指定服务器的域名,需要将 your_domain 替换为你自己的域名。
  • proxy_pass http://127.0.0.1:8000;:将客户端的请求转发到本地的 8000 端口,即我们的 FastAPI 应用运行的端口。
  • proxy_set_header:设置一些代理请求头,确保 FastAPI 应用能够获取到客户端的真实信息。

4.2 创建符号链接并测试配置

将配置文件链接到 sites-enabled 目录,并测试 Nginx 配置是否正确。

# 创建符号链接到 sites-enabled 目录
sudo ln -s /etc/nginx/sites-available/fastapi_app /etc/nginx/sites-enabled/
# 测试 Nginx 配置
sudo nginx -t
# 重启 Nginx 服务
sudo systemctl restart nginx

 步骤 5:获取免费 SSL 证书

使用 Certbot 工具获取 Let's Encrypt 免费 SSL 证书。

sudo certbot --nginx -d your_domain  # 替换为你的实际域名

多个域名时,申请方法如下: 

sudo certbot --nginx -d your_domain.com -d www.your_domain.com

详细提示和输入说明

5.1 邮箱地址输入

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):

Let's Encrypt 需要一个有效的邮箱地址,用于在证书即将到期或有安全通知时联系你。输入你的常用邮箱地址,然后按回车键。

5.2 协议条款确认

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:

你需要同意 Let's Encrypt 的服务条款才能继续注册并获取证书。输入 Y 然后按回车键表示同意。

5.3 订阅邮件选项

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:

 这是一个可选的订阅选项,询问你是否愿意与电子前沿基金会(EFF)共享你的邮箱地址,以便接收他们的相关新闻和活动信息。如果你愿意接收相关邮件,输入 Y 并回车;如果不愿意,输入 N 并回车。

5.4 域名验证与证书安装确认

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for your_domain
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/fastapi_appPlease choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

 Certbot 会验证你的域名所有权,并在验证通过后部署证书。这里会询问你是否要将所有 HTTP 请求重定向到 HTTPS。

  • 如果你希望将所有 HTTP 请求重定向到 HTTPS,输入 2 并回车。
  • 如果你暂时不想进行重定向,输入 1 并回车。

5.5 完成提示

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.5-February-24-2025.pdf. You must
agree in order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Account registered.
Requesting a certificate for ftpeak.comSuccessfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/ftpeak.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/ftpeak.com/privkey.pem
This certificate expires on 2025-06-15.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.Deploying certificate
Successfully deployed certificate for ftpeak.com to /etc/nginx/sites-enabled/fastapi_app
Congratulations! You have successfully enabled HTTPS on https://ftpeak.com- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:* Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate* Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

这表示证书已经成功获取并安装,同时会显示证书和私钥的保存路径以及证书的到期日期等重要信息。

步骤 6:在配置中增加SSL

6.1 编辑配置文件

打开配置文件进入编辑状态:

sudo nano /etc/nginx/sites-available/fastapi_app

 代码修改如下:

# HTTP 服务器块,用于将所有 HTTP 请求重定向到 HTTPS
server {listen 80;server_name ftpeak.com;# 永久重定向 HTTP 请求到 HTTPSreturn 301 https://$host$request_uri;
}# HTTPS 服务器块,处理实际的 HTTPS 请求
server {listen 443 ssl;server_name ftpeak.com;# SSL 证书和私钥配置ssl_certificate /etc/letsencrypt/live/ftpeak.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/ftpeak.com/privkey.pem;# 包含 Certbot 提供的 SSL 配置选项include /etc/letsencrypt/options-ssl-nginx.conf;# SSL  Diffie-Hellman 参数配置ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;# 反向代理配置,将请求转发到本地的 FastAPI 应用location / {proxy_pass http://127.0.0.1:8000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}
}

6.1 启动 FastAPI 应用

在激活的虚拟环境中启动 FastAPI 应用。

uvicorn main:app --host 127.0.0.1 --port 8000

解释

  • uvicorn main:app:指定要运行的 FastAPI 应用,main 是 Python 文件名,app 是 FastAPI 应用实例的名称。
  • --host 127.0.0.1:指定应用监听的 IP 地址为本地回环地址。
  • --port 8000:指定应用监听的端口为 8000。

步骤 7:验证 HTTPS 访问

现在,你可以通过浏览器访问 https://your_domain(替换为你的实际域名)来验证 HTTPS 服务器是否正常工作。如果一切正常,你应该能看到 {"..."} 的响应。

注意事项

  • 确保服务器的防火墙允许 HTTP(端口 80)和 HTTPS(端口 443)流量。可以使用以下命令开放端口: 
sudo ufw allow 80
sudo ufw allow 443
sudo ufw allow 443

步骤8:自动更新证书

自动更新测试

Let's Encrypt 证书的有效期为 90 天,为了避免证书过期导致服务中断,建议设置定期自动更新证书。可以使用以下命令测试自动更新:

sudo certbot renew --dry-run

测试结果如果通过如下:

Saving debug log to /var/log/letsencrypt/letsencrypt.log- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/ftpeak.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for ftpeak.com- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded: /etc/letsencrypt/live/ftpeak.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

可以使用系统的定时任务(如 crontab -e)来定期执行 certbot renew 命令。

crontab -e

 如果你是第一次使用该命令,系统可能会提示你选择一个文本编辑器,你可以根据自己的喜好选择,例如选择 nano 编辑器,输入对应的数字并回车即可。

添加定时任务

在打开的 crontab 文件中,添加如下一行内容:

0 2 * * 1 /usr/bin/certbot renew --quiet --deploy-hook "systemctl reload nginx"

代码解释

  • 时间设置部分(0 2 * * 1

    • 0 表示分钟,即每小时的第 0 分钟(整点)。
    • 2 表示小时,即凌晨 2 点。
    • * 表示任意值,这里前两个 * 分别表示每月的任意天和每年的任意月。
    • 1 表示星期,即星期一。

    综合起来,0 2 * * 1 表示每周一凌晨 2 点执行该任务。你可以根据自己的需求调整时间,例如你也可以设置为每月执行一次,将时间设置为 0 2 1 * * ,表示每月 1 号凌晨 2 点执行。

  • 命令部分(/usr/bin/certbot renew --quiet --deploy-hook "systemctl reload nginx"

    • /usr/bin/certbot renew:这是执行 Certbot 证书更新的命令。
    • --quiet:表示以安静模式运行,避免在更新过程中输出过多的信息,减少不必要的干扰。
    • --deploy-hook "systemctl reload nginx":这是一个部署钩子选项,当 Certbot 成功更新证书后,会执行双引号内的命令。这里的 systemctl reload nginx 表示重新加载 Nginx 服务,使新的证书配置生效。

保存并退出

在 nano 编辑器中,按下 Ctrl + X 组合键,然后输入 Y 确认保存修改,最后按下回车键退出编辑器。 

列出你设置的定时任务

你可以使用以下命令查看当前用户的 crontab 任务列表,确认刚才添加的任务是否已经正确保存:

crontab -l

如果输出中包含你添加的定时任务,说明配置成功。之后,系统会按照你设置的时间定期执行证书更新操作。

注意事项

  • 确保 certbot 命令的路径 /usr/bin/certbot 是正确的。你可以使用 which certbot 命令来确认其实际路径。
  • 在使用 systemctl reload nginx 之前,要确保当前用户有足够的权限来执行该命令。如果遇到权限问题,可能需要调整 sudo 配置或使用其他方式来重新加载 Nginx 服务。

相关文章:

在 Linux下使用 Python 3.11 和 FastAPI 搭建带免费证书的 HTTPS 服务器

在当今数字化时代,保障网站数据传输的安全性至关重要。HTTPS 协议通过使用 SSL/TLS 加密技术,能够有效防止数据在传输过程中被窃取或篡改。本教程将详细介绍如何在 Ubuntu 22.04 系统上,使用 Python 3.11 和 FastAPI 框架搭建一个带有免费 SS…...

[QMT量化交易小白入门]-三十五、如何将聚宽策略信号转为QMT实盘交易

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。 QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步。 文章目录 相关阅读一、聚宽模拟运行:构建交易策略的基础在聚宽…...

国思RDIF低代码快速开发框架 v6.2版本发布

1、平台介绍 国思RDIF企业级低代码开发平台,给用户和开发者最佳的框架平台方案,为企业快速构建跨平台、企业级的应用提供强大支持。致力于解决企业信息化项目交付难、实施效率低、开发成本高的问题。能帮助企业快速构建美观易用、架构专业、安全可控的企…...

学习笔记 ASP.NET Core Web API 8.0部署到iis

一.修改配置文件 修改Program.cs配置文件将 if (app.Environment.IsDevelopment()) {app.UseSwagger();app.UseSwaggerUI(); }修改为 app.UseSwagger(); app.UseSwaggerUI(); 二.安装ASP.NET Core Runtime 8.0.14 文件位置https://dotnet.microsoft.com/en-us/download/do…...

【Linux】信号:产生信号

🔥个人主页:Quitecoder 🔥专栏:linux笔记仓 目录 01.信号信号处理简单理解信号的发送和保存由软件产生的信号由硬件(异常)产生的信号 01.信号 进程信号是操作系统提供的一种异步通知机制,用于…...

单片机自学总结

自从工作以来,一直努力耕耘单片机,至今,颇有收获。从51单片机,PIC单片机,直到STM32,以及RTOS和Linux,几乎天天在搞:51单片机,STM8S207单片机,PY32F003单片机,…...

Idea集成docker通过ca加密实现镜像打包

​ Idea集成docker实现镜像打包_ideadocker镜像打包-CSDN博客 ​ 之前通过这种方式虽然可以实现idea通过maven打jar包的同时把docker镜像也进行打包,但是这种方式存在很大漏洞,就是服务器的2375端口大开,任何人拿着idea通过这种方式都可以连…...

【Prometheus】prometheus标签替换label_replace,动态修改生成标签,增强查询的灵活性和表达能力

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...

蓝桥杯 之 暴力回溯

文章目录 数字接龙小u的最大连续移动次数问题 在蓝桥杯中,十分喜欢考察对于网格的回溯的问题,对于这类的问题,常常会使用到这个DFS和BFS进行考察,不过无论怎么考察,都只是会在最基础的模本的基础上,根据这个…...

在K8S中挂载 Secret 到 Pod

在 Kubernetes 里,把 Secret 挂载到 Pod 中有两种主要方式:作为卷挂载和作为环境变量挂载。下面为你提供相应的代码示例。 作为卷挂载 Secret 将 Secret 作为卷挂载到 Pod 时,Secret 的每个键会成为挂载目录下的一个文件,文件内…...

LINUX网络编程API原型详细解析

1. 网络体系 1.1. 简介 网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。 每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的。每层向上层提供服务,同时使用下层提供…...

Android 13 Launcher3最近任务列表“全部清除“按钮位置优化实战

一、问题背景与实现难点 在Android 13横屏设备开发中,系统默认将最近任务列表的"全部清除"按钮布局在屏幕左侧,这与用户习惯的底部布局存在明显差异。相较于Android 8.1时代SystemUI模块的实现,Android 13将相关逻辑迁移至Launche…...

docker最新源,及遇到问题+处理

目前国内可用Docker镜像源汇总(截至2025年3月) - CoderJia 遇到问题: Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp: lookup registry-1.docker.io on [::1]:53: read udp [::1]:13287->[:…...

Python简单爬虫实践案例

学习目标 能够知道Web开发流程 能够掌握FastAPI实现访问多个指定网页 知道通过requests模块爬取图片 知道通过requests模块爬取GDP数据 能够用pyecharts实现饼图 能够知道logging日志的使用 一、基于FastAPI之Web站点开发 1、基于FastAPI搭建Web服务器 # 导入FastAPI模…...

统信UOS中使用Vscode编程

写在前面:统信UOS其实就是套壳的Linux系统,所以有问题如果搜不到解决方法,可以参考Linux下的解决方法。 1.环境配置 Vscode : 1.85.0 Vscode就直接下载安装就行,然后安装插件:Volar、中文汉化包 node:18…...

C#从入门到精通(1)

目录 第一章 C#与VS介绍 第二章 第一个C#程序 (1)C#程序基本组成 1.命名空间 2.类 3.Main方法 4.注释 5.语句 6.标识符及关键字 (2)程序编写规范 1.代码编写规则 2.程序命名方法 3.元素命名规范 第三章 变量 &…...

openharmony中hilog实证记录说明(3.1和5.0版本)

每次用这个工具hilog都有一些小用法记不清,需要花一些时间去查去分析使用方法,为了给丰富多彩的生活留出更多的时间,所以汇总整理共享来了,它来了它来了~~~~~~~~~ 开始是想通过3.1来汇总的,但实际测试发现openharmony…...

飞书 设计智能字段:通过“字段类型”添加AI功能列

在飞书多维表格中,通过“字段类型”添加AI功能列的核心逻辑是将AI模型能力与结构化数据结合,实现自动化内容生成与信息处理。以下是具体操作步骤及关键要点,结合实际应用场景说明: 一、基础操作步骤 创建多维表格 登录飞书&#x…...

Cannot find module @rollup/rollup-win32-x64-msvc

方法1 在package.json中添加postinstall: "scripts": {"postinstall": "node -e \"const { platform } process; if (platform win32) { require(child_process).execSync(npm install rollup/rollup-win32-x64-msvc, { stdio: inherit });…...

Docker和Dify学习笔记

文章目录 1 docker学习1.1 基本命令使用1.1.1 docker ps查看当前正在运行的镜像1.1.2 docker stop停止容器1.1.3 docker compose容器编排1.1.4 docker网络[1] 进入到容器里面敲命令[2] docker network ls[3] brige网络模式下容器访问宿主机的方式 2 Dify的安装和基础使用2.1 下…...

【AIGC】Win10系统极速部署Docker+Ragflow+Dify

【AIGC】WIN10仅3步部署DockerRagflowDify 一、 Docker快速部署1.F2进入bios界面,按F7设置开启VMX虚拟化技术。保存并退出。2.打开控制面板配置开启服务3.到官网下载docker安装包,一键安装(全部默认勾选) 二、 RagFlow快速部署1.确…...

Oracle ASM 磁盘组冗余策略

Oracle ASM 磁盘组冗余策略 1. 外部冗余(External Redundancy)2. 普通冗余(Normal Redundancy)3. 高冗余(High Redundancy)关键注意事项如何选择合适的策略? Oracle ASM(Automatic S…...

C++ 数据结构

C++ 数据结构 概述 C++作为一种强大的编程语言,在软件开发领域有着广泛的应用。数据结构作为C++编程中不可或缺的一部分,它决定了程序的性能和效率。本文将详细介绍C++中的常见数据结构,包括其定义、特点以及在实际应用中的使用方法。 常见数据结构 1. 数组 数组是一种…...

Unity NodeCanvas AI使用笔记

扩展: 1. 输入输出参数限制,增加描述,根据接口判断类型限制 2.选择节点,遍历节点,行为节点 3.行为节点 行为执行的时候有互斥关系,加入一个queue,最后执行 4.NodeCanvas的参数传参可以由上个节点传到下个节…...

(* IOB = “FORCE“ *) 的使用分享

在Xilinx FPGA设计中,IOBFORCE是一个与输入输出块(IOB)相关的属性设置。这个设置主要用于控制逻辑是否被推入到IOB(Input/Output Block)中,即FPGA芯片边缘的I/O引脚附近的专用硬件资源。使用IOB属性可以帮助…...

【大语言模型_7】利用ragas框架评测rag系统指标

一、介绍 ragas是一个用来评估RAG系统的框架,允许不在依赖人工注释的情况下,通过一套指标评估检索模块和生成模块的性能及其质量。 二、准备 数据准备:需要准备评估数据集,数据集格式如下 [{"question": "安全智…...

adb常用的命令

1. 查看adb版本 adb version 2. 将apk安装包安装到手机/模拟器上 adb install apk路径 3. 获取apk包名和界面名 包名(package):决定程序的唯一性 界面名(activity):一个界面界面名,对应一个界面…...

手动集成sqlite的方法

注意到sqlite有backup方法(https://www.sqlite.org/backup.html)。 也注意到android中sysroot下,没有sqlite3的库,也没有相关头文件。 如果要使用 sqlite 的backup,那么就需要手动集成sqlite代码到项目中。可以如下操…...

自然语言处理(NLP)技术

人工智能(Artificial Intelligence,AI)是一种模拟人类智能思维过程的技术,它在现代科技中的应用非常广泛,涉及诸多领域,如自然语言处理、计算机视觉、机器学习、数据分析等。以下是人工智能在现代科技中的应…...

【GPT入门】第25课 掌握 LangChain:链式调用的奥秘、特性与使用示例

【GPT入门】第25课 掌握 LangChain:链式调用的奥秘、特性与使用示例 语法解释各部分性质链式调用的性质调用方式注意事项 语法解释 你给出的代码 is_duplicated_chain (check_duplicated | model | parser) 运用了 LangChain 里的链式调用语法。在 LangChain 中&a…...

机器学习之DBSCAN算法详解

文章目录 引言1. DBSCAN算法概述2.DBSCAN算法的基本概念2.1 ε-邻域2.2 核心点(Core Point)2.3 边界点(Border Point)2.4 噪声点(Noise Point)2.5 直接密度可达(Directly Density-Reachable&…...

借助vite来优化前端性能

Vite 是一个现代化的前端构建工具,凭借其基于原生 ES 模块的开发服务器和高效的构建能力,可以显著优化前端性能。 一、开发环境优化 1.快速启动与热更新 Vite 利用浏览器对 ES 模块的原生支持,在开发环境中无需打包,直接按需加载…...

[工控机安全] 使用DriverView快速排查不可信第三方驱动(附详细图文教程)

导语: 在工业控制领域,设备驱动程序的安全性至关重要。第三方驱动可能存在兼容性问题、安全漏洞甚至恶意代码,威胁设备稳定运行。本文将手把手教你使用 DriverView工具,高效完成工控机驱动安全检查,精准识别可疑驱动&a…...

Execution failed for task ‘:path_provider_android:compileDebugJavaWithJavac‘.

What went wrong: Execution failed for task ‘:path_provider_android:compileDebugJavaWithJavac’. Could not resolve all files for configuration ‘:path_provider_android:androidJdkImage’. Failed to transform core-for-system-modules.jar to match attributes {…...

基于SpringBoot的社区/物业管理系统

项目介绍 平台采用B/S结构,后端采用主流的SpringBoot语言进行开发,前端采用主流的Vue.js进行开发。是一个综合的社区/物业管理系统。 整个平台包括前台和后台两个部分。 - 前台功能包括:小区信息、社区论坛、社区公告、社区留言板、个人中心。…...

vmware下linux无法上网解决方法

首先,打开打开"编辑" “虚拟网络编辑器”,并将"桥接"方式的网卡选择为主机上网的网卡。 虚拟机中,设置IP地址为主机网卡同样子网下的ip地址: 并且要选择桥接模式!注意如下图,"复制物理连接状…...

【数据库备份】docker中数据库备份脚本——MySql备份脚本

docker中数据库备份脚本——MySql备份脚本 #!/bin/bash# MySQL数据库信息 DB_USER"root" DB_PASSWORD"你的密码"# 备份保存主目录 BACKUP_ROOT"/data/data_backup/mysql"# 最多保留的备份日期文件夹数 MAX_DATE_FOLDERS15# 数组包含要备份的数据…...

SpringBoot 第二课(Ⅰ) 整合springmvc(详解)

目录 一、SpringBoot对静态资源的映射规则 1. WebJars 资源访问 2. 静态资源访问 3. 欢迎页配置 二、SpringBoot整合springmvc 概述 Spring MVC组件的自动配置 中央转发器(DispatcherServlet) 控制器(Controller) 视图解…...

centos家用笔记

改用阿里云yum源 因CentOS7已经停止维护,原有的yum源也无法使用,在国内,改用阿里云yum源是个方便的选择。 cd /etc/yum.repos.d/ mkdir backup mv Cent* backup wget http://mirrors.aliyun.com/repo/Centos-7.repo mv Centos-7.repo Cen…...

数据可视化(matplotlib)-------辅助图标的设置

目录 一、认识图表常用的辅助元素 坐标轴 二、设置坐标轴的标签、刻度范围和刻度标签 (一)、设置坐标轴的标签 1、xlabel()------设置x轴标签 2、ylabel()------设置y轴标签 (二) 、设置刻度范围和刻度标签 1、xlim()和ylim()函数分别可…...

15-双链表-双链表基本操作

题目 来源 827. 双链表 - AcWing题库 思路 此题我只想说,千万千万别漏了头结点和尾结点,不然根本查不出来是哪里出了问题,因为传入的k会有问题;最左边插入,相当于是在头结点的右边插入(也就是0号节点的右…...

HTTP和RPC的区别

RPC和 HTTP是两种常见的通信方式,它们在设计目标、使用场景和技术实现上有显著区别。以下是它们的详细对比: 1. 定义与核心思想 特性RPCHTTPRemote Procedure Call远程过程调用HyperText Transfer Protocol超文本传输协议定义一种协议或框架&#xff0…...

【Linux内核系列】:动静态库详解

🔥 本文专栏:Linux 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 有些鸟儿是注定是关不住的,因为它们的每一片羽翼都沾满了自由的光辉 ★★★ 本文前置知识: 编译与链接的过程…...

【IROS 2025】CMU提出路径规划器PIPE:机器人探索效率提升14.6%,地图准确率提高9.3%!

在自主机器人探索未知环境的研究中,如何高效地规划路径、最大化信息获取,一直是一个核心问题。传统的方法往往仅在离散的路径点上计算信息增益,而缺乏对整个路径信息获取的综合考量,从而可能导致探索低效甚至错误的规划决策。近日…...

《笔记》Android 获取第三方应用及查看应用信息、apk大小、缓存、存储,以及第三方清除缓存

获取应用相关信息&#xff1a; PS:manifest标签中设置以下属性表示系统应用 android:process"system" android:sharedUserId"android.uid.system" //获取所有应用&#xff08;非系统apk&#xff0c;有些应用获取不到&#xff09; List<ApplicationInf…...

npm 安装 pnpm 的详细步骤及注意事项

一、安装步骤 1.全局安装 pnpm npm install -g pnpm2.验证安装 pnpm -v输出版本号即表示安装成功。 二、升级 pnpm 若已安装旧版本&#xff0c;可通过以下命令升级&#xff1a; npm install -g pnpmlatest三、配置镜像加速 设置淘宝镜像 pnpm config set registry http…...

大白话详细解读React框架的diffing算法

1. Diffing 算法是什么&#xff1f; Diffing 算法是 React 用来比较虚拟 DOM&#xff08;Virtual DOM&#xff09;树的一种算法。它的作用是找出前后两次渲染之间的差异&#xff08;diff&#xff09;&#xff0c;然后只更新这些差异部分&#xff0c;而不是重新渲染整个页面。 …...

【架构】单体架构 vs 微服务架构:如何选择最适合你的技术方案?

文章目录 ⭐前言⭐一、架构设计的本质差异&#x1f31f;1、代码与数据结构的对比&#x1f31f;2、技术栈的灵活性 ⭐二、开发与维护的成本博弈&#x1f31f;1、开发效率的阶段性差异&#x1f31f;2、维护成本的隐形陷阱 ⭐三、部署与扩展的实战策略&#x1f31f;1、部署模式的本…...

面试redis常被问到的面试题含答案

什么是Redis&#xff1f;它的特点是什么&#xff1f; Redis是一个开源的内存数据库&#xff0c;用于存储数据并支持多种数据结构&#xff08;如字符串、哈希、列表、集合、有序集合等&#xff09;。其特点包括高性能、支持持久化、数据结构丰富、原子性操作、支持事务等。 Red…...

Asp.net Core API 本地化

本文是一个demo&#xff0c;演示了如何根据用户接口查询字段(正常放header中),设置当前culture&#xff0c;并获取当前culture的key value给用户提示 创建Resources文件夹&#xff0c;添加以下三个文件 其中ExceptionUnuse 是一个空的类&#xff0c;供IStringLocalizer使用&a…...