使用 mkcert 本地部署启动了 TLS/SSL 加密通讯的 MongoDB 副本集和分片集群
MongoDB 是支持客户端与 MongoDB 服务器之间启用 TLS/SSL 进行加密通讯的, 对于 MongoDB 副本集和分片集群内部的通讯, 也可以开启 TLS/SSL 认证. 本文会使用 mkcert 创建 TLS/SSL 证书, 基于创建的证书, 介绍 MongoDB 副本集、分片集群中启动 TLS/SSL 通讯的方法.
我们将会在本地部署启用了 SSL/TLS 通讯的副本集、分片集群.
安装 mkcert 和 MongoDB
在介绍 MongoDB 副本集和 MongoDB 分片集群中启用 SSL/TLS 通讯前, 我们先在本地安装好 MongoDB 和 mkcert.
mkcert 是一个 Go 实现的命令行工具, 方便我们使用一行命令就创建好 TLS/SSL 证书. 这里我们以 Ubuntu Linux 为例子:
# 需要安装有 Go
go install filippo.io/mkcert@latest
你也可以参考 mkcert 文章中描述的安装方法进行安装: mkcert installation.
接下来我们安装 MongoDB Server 和 MongoDB Shell 命令行工具. 你可以在 https://www.mongodb.com/try/download/community 下载到对应的二进制 (mongod、mongos) 文件压缩包. 后续我们将会以 MongoDB@2.0.26 版本为例:
❯ mongod --version
db version v5.0.26
Build Info: {"version": "5.0.26","gitVersion": "0b4f1ea980b5380a66425a90b414106a191365f4","openSSLVersion": "OpenSSL 1.1.1f 31 Mar 2020","modules": [],"allocator": "tcmalloc","environment": {"distmod": "ubuntu2004","distarch": "x86_64","target_arch": "x86_64"}
}
注意, 如果你使用了高本版的 MongoDB, 需要单独下载 MongoDB Shell 命令行客户端工具. 可以在这里下载 https://www.mongodb.com/try/download/shell.
接下来让我们看看如何在 MongoDB 中启用 TLS/SSL 通讯.
MongoDB 副本集中启用 TLS/SSL
让我们先看看怎么在副本集中启用 SSL/TLS.
- 第一步, 我们先使用 mkcert 生成待会 MongoDB 服务器
mongod
使用的证书
# 将 CA 证书存放在 mkcert 目录下
export CAROOT=$(pwd)/mkcert
# 安装 CA
mkcert -install
# 将证书和密钥合并, 后续 mongod 会使用到, 一般用来校验客户端使用的证书
cat mkcert/rootCA.pem mkcert/rootCA-key.pem > mkcert/CA.pem# 生成 mongod 使用的服务器证书, 这个证书在通信的时候会传递给客户端校验合法性
mkcert -cert-file mongo-tls.crt -key-file mongo-tls.key localhost 127.0.0.1 ::1
# 同样, 合并证书和密钥
cat mongo-tls.crt mongo-tls.key > mongo-tls.pem# 生成 mongo 客户端使用的证书, 这个证书后续不只用于客户端于服务器的通讯, 也用于副本集成员内部认证时使用
mkcert -client -cert-file mongo-tls-client.crt -key-file mongo-tls-client.key localhost 127.0.0.1 ::1
cat mongo-tls-client.crt mongo-tls-client.key > mongo-tls-client.pem
- 第二步, 我们使用上述生成的证书 pem 文件来启动副本集, 副本集各成员使用的配置文件如下:
❯ cat etc/primary.conf.yaml
replication:replSetName: mongo_replica_setstorage:dbPath: build/mongo_replica_set/mongodata_primary# where to write logging data.
systemLog:destination: filelogAppend: truepath: logs/mongo_replica_set_mongod_primary.logverbosity: 0# network interfaces
net:tls:mode: requireTLSCAFile: mkcert/CA.pemcertificateKeyFile: mongo-tls.pemclusterFile: mongo-tls-client.pem # https://www.mongodb.com/docs/manual/tutorial/configure-ssl/#member-certificate-requirementsallowConnectionsWithoutCertificates: trueport: 47017bindIp: 127.0.0.1,localhostcompression:compressors: zlib# how the process runs
processManagement:fork: truetimeZoneInfo: /usr/share/zoneinfo# Member x.509 Certificate
# https://www.mongodb.com/docs/manual/tutorial/configure-x509-member-authentication/
security:clusterAuthMode: x509
❯ cat etc/secondary_a.conf.yaml
replication:replSetName: mongo_replica_setstorage:dbPath: build/mongo_replica_set/mongodata_secondary_a# where to write logging data.
systemLog:destination: filelogAppend: truepath: logs/mongo_replica_set_mongod_secondary_a.logverbosity: 0# network interfaces
net:tls:mode: requireTLSCAFile: mkcert/CA.pemcertificateKeyFile: mongo-tls.pemclusterFile: mongo-tls-client.pem # https://www.mongodb.com/docs/manual/tutorial/configure-ssl/#member-certificate-requirementsallowConnectionsWithoutCertificates: trueport: 47018bindIp: 127.0.0.1,localhostcompression:compressors: zlib# how the process runs
processManagement:fork: truetimeZoneInfo: /usr/share/zoneinfo# Member x.509 Certificate
# https://www.mongodb.com/docs/manual/tutorial/configure-x509-member-authentication/
security:clusterAuthMode: x509
❯ cat etc/secondary_b.conf.yaml
replication:replSetName: mongo_replica_setstorage:dbPath: build/mongo_replica_set/mongodata_secondary_b# where to write logging data.
systemLog:destination: filelogAppend: truepath: logs/mongo_replica_set_mongod_secondary_b.logverbosity: 0# network interfaces
net:tls:mode: requireTLSCAFile: mkcert/CA.pemcertificateKeyFile: mongo-tls.pemclusterFile: mongo-tls-client.pem # https://www.mongodb.com/docs/manual/tutorial/configure-ssl/#member-certificate-requirementsallowConnectionsWithoutCertificates: trueport: 47019bindIp: 127.0.0.1,localhostcompression:compressors: zlib# how the process runs
processManagement:fork: truetimeZoneInfo: /usr/share/zoneinfo# Member x.509 Certificate
# https://www.mongodb.com/docs/manual/tutorial/configure-x509-member-authentication/
security:clusterAuthMode: x509
其中主节点(primary)监听的地址为 127.0.0.1:47017
, 从节点监听的地址为 127.0.0.1:47018
、127.0.0.1:47019
. 这是典型的 PSS 架构部署的 MongoDB 副本集, 网络拓扑如下:
我们使用 mongod
启用上述配置文件, 注意配置文件中 certificate 相关字段引用到的 mkcert 生成的配置文件, mongod
启用命令如下:
mkdir logs
mkdir buildmongod --config "etc/primary.conf.yaml"
mongod --config "etc/secondary_a.conf.yaml"
mongod --config "etc/secondary_b.conf.yaml"# 初始化副本集
mongo --port 47017 --tls <<EOF
db.adminCommand({replSetInitiate: { _id: "mongo_replica_set", members: [{ _id: 0, host: "127.0.0.1:47017", priority: 2}, { _id: 1, host: "127.0.0.1:47018", priority: 1}, { _id: 2, host: "127.0.0.1:47019", priority: 1} ],settings: {electionTimeoutMillis: 3000}
}})
EOF
启动完成后, 我们使用 MongoDB Shell 命令客户端尝试连接主 (primary) 节点 127.0.0.1:47017
, 命令如下:
❯ mongo --port 47017
MongoDB shell version v5.0.26
connecting to: mongodb://127.0.0.1:47017/?compressors=disabled&gssapiServiceName=mongodb
Error: network error while attempting to run command 'isMaster' on host '127.0.0.1:47017' :
connect@src/mongo/shell/mongo.js:372:17
@(connect):2:6
exception: connect failed
exiting with code 1
会看到连接会失败, 这是因为 MongoDB 服务器强制开启了 TLS/SSL 通讯, 配置文件中相关字段如下:
net:tls:mode: requireTLS
这时候 mongo 客户端连接的使用需要走 TLS/SSL, 命令如下:
❯ mongo --port 47017 --tls
MongoDB shell version v5.0.26
connecting to: mongodb://127.0.0.1:47017/?compressors=disabled&gssapiServiceName=mongodb
{"t":{"$date":"2025-02-06T14:22:24.093Z"},"s":"I", "c":"NETWORK", "id":5490002, "ctx":"thread4","msg":"Started a new thread for the timer service"}
Implicit session: session { "id" : UUID("0a5698d1-81b5-4aee-800b-809da69baf58") }
MongoDB server version: 5.0.26
================
Warning: the "mongo" shell has been superseded by "mongosh",
which delivers improved usability and compatibility.The "mongo" shell has been deprecated and will be removed in
an upcoming release.
For installation instructions, see
https://docs.mongodb.com/mongodb-shell/install/
================
mongo_replica_set:PRIMARY>
可以看到我们能正常连接到副本集. 通过 tcpdump 能网络抓包工具, 我们可以看到通信流量是被加密过的. 接下来我们看看如何在 MongoDB 分片集群 (Sharding Cluster) 中启用 TLS/SSL.
MongoDB 分片集群中启用 TLS/SSL
接下来我们将本地部署的 MongoDB 分片集群拓扑大致如下, 其中两个 mongos、一个 config shard、一个数据分片 mongo shard a:
- 同样, 我们也需要生成 mongod、mongos、mongo 客户端使用的证书:
# 将 CA 证书存放在 mkcert 目录下
export CAROOT=$(pwd)/mkcert
# 安装 CA
mkcert -install
# 将证书和密钥合并, 后续 mongod 会使用到, 一般用来校验客户端使用的证书
cat mkcert/rootCA.pem mkcert/rootCA-key.pem > mkcert/CA.pem# 生成 mongod 使用的服务器证书, 这个证书在通信的时候会传递给客户端校验合法性
mkcert -cert-file mongo-tls.crt -key-file mongo-tls.key localhost 127.0.0.1 ::1
# 同样, 合并证书和密钥
cat mongo-tls.crt mongo-tls.key > mongo-tls.pem# 生成 mongo 客户端使用的证书, 这个证书后续不只用于客户端于服务器的通讯, 也用于副本集成员内部认证时使用
mkcert -client -cert-file mongo-tls-client.crt -key-file mongo-tls-client.key localhost 127.0.0.1 ::1
cat mongo-tls-client.crt mongo-tls-client.key > mongo-tls-client.pem
- 我们先启用 mongo config shard 集群配置分片, 一般用于存储集群的路由信息等数据, 主节点启动配置如下,
clusterFile
字段指定了集群成员间内部认证使用的证书:
> cat etc/mongo_config_shard/mongo_cfg_primary.yaml
sharding:clusterRole: configsvrreplication:replSetName: config_shard_replstorage:dbPath: build/config_shard_repl/mongodata_primary# where to write logging data.
systemLog:destination: filelogAppend: truepath: logs/config_shard_repl_mongod_primary.logverbosity: 0# network interfaces
net:tls:mode: requireTLSCAFile: mkcert/CA.pemcertificateKeyFile: mongo-tls.pemclusterFile: mongo-tls-client.pem # https://www.mongodb.com/docs/manual/tutorial/configure-ssl/#member-certificate-requirementsallowConnectionsWithoutCertificates: trueport: 27017bindIp: localhost,127.0.0.1compression:compressors: zlib# how the process runs
processManagement:fork: truetimeZoneInfo: /usr/share/zoneinfo# https://www.mongodb.com/docs/manual/tutorial/configure-x509-member-authentication/
security:clusterAuthMode: x509
从节点使用的配置可以在这里看到: ShardingCluster/etc/mongo_config_shard, 启动命令如下:
mongod --config "etc/mongo_config_shard/mongo_cfg_primary.yaml"
mongod --config "etc/mongo_config_shard/mongo_cfg_secondary_a.yaml"
mongod --config "etc/mongo_config_shard/mongo_cfg_secondary_b.yaml"# 初始化副本集
mongo --port 27017 --tls <<EOF
db.adminCommand({replSetInitiate: { _id: "config_shard_repl", members: [{ _id: 0, host: "127.0.0.1:27017", priority: 2}, { _id: 1, host: "127.0.0.1:27018", priority: 1}, { _id: 2, host: "127.0.0.1:27019", priority: 1} ],settings: {electionTimeoutMillis: 3000}
}})
EOF
- 启动数据分片 (mongo shard a), 这个分片一般用于存储业务数据, 实际的生产使用会有多个, 主从节点配置文件可以在 ShardingCluster/etc/mongo_shard_a 中找到, 与配置分片的各节点配置除访问地址外大致相同, 各节点启用命令如下:
mongod --config "etc/mongo_shard_a/mongo_cfg_primary.yaml"
mongod --config "etc/mongo_shard_a/mongo_cfg_secondary_a.yaml"
mongod --config "etc/mongo_shard_a/mongo_cfg_secondary_b.yaml"# 初始化副本集
mongo --port 37017 --tls <<EOF
db.adminCommand({replSetInitiate: { _id: "shard_a_repl", members: [{ _id: 0, host: "127.0.0.1:37017", priority: 2}, { _id: 1, host: "127.0.0.1:37018", priority: 1}, { _id: 2, host: "127.0.0.1:37019", priority: 1} ],settings: {electionTimeoutMillis: 3000}
}})
EOF
- 接下来我们通过如下配置启动 mongos 路由器, mongo 客户端一般通过 mongos 访问业务数据, mongos 的启用配置如下:
❯ cat etc/mongos/mongos_a_cfg.yaml
# network interfaces
net:tls:mode: requireTLSCAFile: mkcert/CA.pemcertificateKeyFile: mongo-tls.pemclusterFile: mongo-tls-client.pem # https://www.mongodb.com/docs/manual/tutorial/configure-ssl/#member-certificate-requirementsallowConnectionsWithoutCertificates: trueport: 27011bindIp: localhost,127.0.0.1
sharding:configDB: config_shard_repl/127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019
systemLog:destination: filelogAppend: truepath: logs/mongos_a.logverbosity: 0# https://www.mongodb.com/docs/manual/tutorial/configure-x509-member-authentication/
security:clusterAuthMode: x509
❯ cat etc/mongos/mongos_b_cfg.yaml
# network interfaces
net:tls:mode: requireTLSCAFile: mkcert/CA.pemcertificateKeyFile: mongo-tls.pemclusterFile: mongo-tls-client.pem # https://www.mongodb.com/docs/manual/tutorial/configure-ssl/#member-certificate-requirementsallowConnectionsWithoutCertificates: trueport: 27012bindIp: localhost,127.0.0.1
sharding:configDB: config_shard_repl/127.0.0.1:27017,127.0.0.1:27018,127.0.0.1:27019
systemLog:destination: filelogAppend: truepath: logs/mongos_b.logverbosity: 0# https://www.mongodb.com/docs/manual/tutorial/configure-x509-member-authentication/
security:clusterAuthMode: x509
mongos 启动命令如下:
mongos --config "etc/mongos/mongos_a_cfg.yaml"
mongos --config "etc/mongos/mongos_b_cfg.yaml"# Cluster Member enable X503 authenticate, need auth access for db
mongo --port 27011 --tls <<EOF
use admin
db.createUser({user: "mongo_super_user",pwd: "mongo_super_user_pwd",roles: [{ role: "userAdminAnyDatabase", db: "admin" },{ role: "readWriteAnyDatabase", db: "admin" },{ role: "clusterAdmin", "db" : "admin" }]}
)
EOF# mongos 添加分片
mongo --port 27011 --tls --username mongo_super_user --password mongo_super_user_pwd <<EOF
sh.addShard( "shard_a_repl/127.0.0.1:37017,127.0.0.1:37018,127.0.0.1:37019")
EOF
mongo --port 27012 --tls --username mongo_super_user --password mongo_super_user_pwd <<EOF
sh.addShard( "shard_a_repl/127.0.0.1:37017,127.0.0.1:37018,127.0.0.1:37019")
EOF
- 待分片集群初始化完成后, 我们即可通过如下命令走 TLS/SSL 加密通讯访问分片集群数据:
mongo --port 27011 --tls --username mongo_super_user --password mongo_super_user_pwd <<EOF
show dbs;quit();
EOF
Good~
结语
好了, 相信你跟着本篇文章成功在本地环境部署了开启 TLS/SSL 加密通讯的副本集或者 MongoDB 分片集群, 我已经将相关配置文件整理到了 GitHub 仓库中方便你后续快速参考使用, 访问地址为: https://github.com/yeshan333/mongo-deployment-with-tls.
git clone git@github.com:yeshan333/mongo-deployment-with-tls.git
cd /mongo-deployment-with-tlsbash run.sh ReplicaSet
参考
- MongoDB configure-ssl
本文由博客一文多发平台 OpenWrite 发布!
相关文章:
使用 mkcert 本地部署启动了 TLS/SSL 加密通讯的 MongoDB 副本集和分片集群
MongoDB 是支持客户端与 MongoDB 服务器之间启用 TLS/SSL 进行加密通讯的, 对于 MongoDB 副本集和分片集群内部的通讯, 也可以开启 TLS/SSL 认证. 本文会使用 mkcert 创建 TLS/SSL 证书, 基于创建的证书, 介绍 MongoDB 副本集、分片集群中启动 TLS/SSL 通讯的方法. 我们将会在…...
荣耀手机Magic3系列、Magic4系列、Magic5系列、Magic6系列、Magic7系列详情对比以及最新二手价格预测
目录 荣耀Magic系列手机详细对比 最新二手价格预测 性价比分析 总结 以下是荣耀Magic系列手机的详细对比以及最新二手价格预测: 荣耀Magic系列手机详细对比 特性荣耀Magic3系列荣耀Magic4系列荣耀Magic5系列荣耀Magic6系列荣耀Magic7系列处理器骁龙888&#x…...
利用HTML和css技术编写学校官网页面
目录 一,图例展示 二,代码说明 1,html部分: 【第一张图片】 【第二张图片】 【第三张图片】 2,css部分: 【第一张图片】 【第二张图片】 【第三张图片】 三,程序代码 一,…...
易语言Easy Programming Language
E易语言 EF 易语言.飞场 EPL EF 我心易飞扬! Elogo 易乐谷我的程序我来写! Easy Programming Language Elogo 未来的小程序员!易语言运行时环境检验报告 自有编辑器、自带数据库、本土化支持 易语言系统全部自行设计开发。自有编译器。所编译目的程序运…...
支付宝安全发全套解决方案
产品价值 ● 通过支付宝的资金能力,让服务商机构通过信息流驱动资金流,在不碰触客户企业资金的同时,为客户企业完成转账。账目清晰,无合规和资质风险。 ● 为服务商提供全链路的资金流动明细信息,服务商可以将这些信息…...
如何通过腾讯 ima.copilot 训练自己的知识库
如何通过腾讯 ima.copilot 训练自己的知识库 在信息爆炸的时代,拥有一个专属的知识库,能让我们在学习、工作中快速获取所需信息,极大地提升效率。腾讯推出的 AI 智能工作台 ima.copilot,为我们打造个人知识库提供了便利。今天&am…...
本地部署DeepSeek-R1(Mac版)
本地部署DeepSeek-R1(Mac版) 前言:过年这段时间,DeepSeek火遍全球,但遭受黑客攻击,10次对话基本9次都是服务器繁忙,请稍后重试。那么,本地部署整起来 总体来说,本地部署…...
uniapp 编译生成鸿蒙正式app步骤
1,在最新版本DevEco-Studio工具新建一个空项目并生成p12和csr文件(构建-生成私钥和证书请求文件) 2,华为开发者平台 根据上面生成的csr文件新增cer和p7b文件,分发布和测试 3,在最新版本DevEco-Studio工具 文…...
C++STL与内存管理总结
1:内存管理方面:涉及分配(请求)与释放,主要分为 静态内存,自动存储期(栈内存)、动态内存分配(堆内存)以及智 能指针系列,之所以重要,因…...
【文本处理】如何在批量WORD和txt文本提取手机号码,固话号码,提取邮箱,删除中文,删除英文,提取车牌号等等一些文本提取固定格式的操作,基于WPF的解决方案
企业的应用场景 数据清洗:在进行数据导入或分析之前,往往需要对大量文本数据进行预处理,比如去除文本中的无关字符(中文、英文),只保留需要的联系信息(手机号码、固话号码、邮箱)。…...
算法跟练第十弹——栈与队列
文章目录 part01 逆波兰表达式求值part02 滑动窗口最大值part03 前 K 个高频元素归纳:将字符串转转换成整数:LinkedListMap遍历优先级队列的比较器 跟着代码随想录刷题的第十天。 代码随想录链接:代码随想录 part01 逆波兰表达式求值 题目链接…...
计算机毕业设计——Springboot的校园新闻网站
🎉**欢迎来到琛哥的技术世界!**🎉 📘 博主小档案: 琛哥,一名来自世界500强的资深程序猿,毕业于国内知名985高校。 🔧 技术专长: 琛哥在深度学习任务中展现出卓越的能力&a…...
在CT107D单片机综合训练平台上实现外部中断控制LED闪烁
引言 在单片机开发中,外部中断是一个非常重要的功能,它可以让单片机在检测到外部信号变化时立即做出响应。本文将详细介绍如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们将使用两种不同的方式来实现这一功能:一种是在…...
C# ASP.NET 介绍
.NET学习资料 .NET学习资料 .NET学习资料 一、概述 ASP.NET是由微软创建的一个开源 Web 框架,用于使用.NET 构建现代化的 Web 应用程序和服务。它为开发者提供了一套丰富的工具、库和编程模型,使得创建功能强大、高效且安全的 Web 应用变得更加容易。…...
Django中select_related 的作用
Django中这句代码Dynamic.objects.select_related(song)是什么意思? 在 Django 中,这句代码: Dynamic.objects.select_related(song) 的作用是 在查询 Dynamic 模型的同时,预加载 song 关联的外键对象,从而减少数据…...
MyBatis常见知识点
#{} 和 ${} 的区别是什么? 答: ${}是 Properties 文件中的变量占位符,它可以用于标签属性值和 sql 内部,属于原样文本替换,可以替换任意内容,比如${driver}会被原样替换为com.mysql.jdbc. Driver。 一个…...
CentOS 安装 Docker
一、使用官方安装脚本自动安装 安装命令如下: curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 也可以使用国内 daocloud 一键安装命令: curl -sSL https://get.daocloud.io/docker | sh 二、手动安装 卸载旧版本 较旧的 Do…...
【sqlite】python操作sqlite3(含测试)
个人小项目或者小团队,sqllite很适用,数据库封装操作如下 #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2025-02-08 13:57 # Author : duxiaowei # File : connect_sqllite.py # Software: PyCharm """ sqllite操作, …...
PTC Windchill介绍
以下内容摘自PTC的Windchill介绍材料,确有其用,摘录一些: 存储和搜索产品信息 所有产品信息的中央存储库。同样的,对于产品相关内容,例如 CAD 模型、文档、技术插图、嵌入式软件、计算和要求规范,都有一个…...
3.矩阵分解技术在推荐系统中的应用
接下来我们将深入探讨矩阵分解技术在推荐系统中的应用。矩阵分解是一种强大的技术,可以有效地处理数据稀疏性问题,并提高推荐系统的性能。在这一课中,我们将介绍以下内容: 矩阵分解的基本概念奇异值分解(SVDÿ…...
visual studio 在kylin v10上跨平台编译时c++标准库提示缺少无法打开的问题解决
情况1:提示无法打开 源文件 "string"之类导致无法编译 情况2:能编译,但无法打开这些库文件或标准库使用提示下划红色问题 解决方案: 一、通过工具->选项->跨平台里,在“远程标头IntelliSense管理器”更新下载一下…...
TextWebSocketHandler 和 @ServerEndpoint 各自实现 WebSocket 服务器
TextWebSocketHandler 和 ServerEndpoint 都可以用于实现 WebSocket 服务器,但它们属于不同的技术栈,使用方式和功能有一些区别。以下是它们的对比: 1. 技术栈对比 特性TextWebSocketHandler (Spring)ServerEndpoint (Java EE/JSR-356)所属框…...
一种非完全图下的TSP求解算法
序 旅行商问题(Traveling Salesman Problem,简称TSP)是组合优化中的一个经典问题,就是给定一组城市和城市之间的距离,找到一条最短路径使得每个城市只被访问一次后返回到起点。 一些传统的解法都是基于完全图的,我在网上也很少找到非完全图的解法,非完全图应该在实际应…...
文件操作(1.文件资源上传到MinIO 2.文件资源保存在数据库中)
目录 本文提供文件操作接口的实现(上传下载) 附件资源表实体类 具体代码实现 上传到MinIO服务器 pom依赖 yml配置 MinIO配置 服务实现类 保存到数据库 本文提供文件操作接口的实现(上传下载) 附件资源表实体类 Data AllArgsConstructor NoArgsConstructor EqualsAndHa…...
deepseek模型技术优势研究
1.1 混合专家模型(MoE)架构 DeepSeek 模型采用了混合专家模型(Mixture-of-Experts,MoE)架构,这一架构在大规模预训练与下游应用中展现了显著的计算资源利用效率优势。MoE 架构的基本思想是在传统 Transfor…...
项目6:基于大数据校园一卡通数据分析和可视化
1、项目简介 本项目是基于大数据的清华校园卡数据分析系统,通过Hadoop,spark等技术处理校园卡交易、卡号和商户信息数据。系统实现消费类别、男女消费差异、学院消费排行和年级对比等分析,并通过Web后端和可视化前端展示结果。项目运行便捷&…...
搭建Spark集群(CentOS Stream 9)
零、资源准备 虚拟机相关: VMware workstation 16:虚拟机/vmware_16.zip(建议选择vmware_17版本)CentOS Stream 9:虚拟机/CentOS-Stream-9-latest-x86_64-boot.iso(安装包小,安装时需要联网下载)/ 虚拟机/CentOS-Stream-9-latest-x86_64-dvd1.iso(安装包大)JDK jdk1.8:…...
leetcode 2466. 统计构造好字符串的方案数
题目如下 数据范围 本题就是加了马甲的跳格子问题即一次能选择跳zero格或者one格(注意这两个不是定值,不是翻译成0和1它们只是代表能跳几格)我们令f(i)为从第0格跳到i格的路径数(也就是好串有几个)显然如果存在的话: f(i) f(i - zero) f(i - one)。…...
Jupyter Notebook自动保存失败等问题的解决
一、未生成配置文件 需要在命令行中,执行下面的命令自动生成配置文件 jupyter notebook --generate-config 执行后会在 C:\Users\用户名\.jupyter目录中生成文件 jupyter_notebook_config.py 二、在网页端打开Jupyter Notebook后文件保存失败;运行代码…...
局域网内别的电脑怎么连接到对方的mysql数据库
要让局域网内的其他电脑连接到一台主机上的 MySQL 数据库,你需要进行一些配置,包括 MySQL 服务器的设置、权限调整,以及客户端连接的步骤。以下是详细的步骤说明: 1. 确保 MySQL 服务器允许远程连接 默认情况下,MySQL 服务器可能只允许本地连接(localhost)。你需要修改…...
flask和django的对比
Flask 和 Django 都是流行的 Python Web 框架,尽管它们都用于构建 Web 应用,但它们的设计理念和使用场景有所不同。以下是它们之间的一些对比: 1. 框架类型 Flask:微框架(Micro-framework),意…...
基于 GEE 批量下载陆地植被净初级生产力 NPP 产品
目录 1 陆地植被净初级生产力(NPP) 2 完整代码 3 运行结果 1 陆地植被净初级生产力(NPP) 陆地植被净初级生产力(NPP)是指植物在单位时间单位面积上由光合作用产生的有机物质总量中扣除自养呼吸后的剩余…...
使用Deepseek ,怎么很好的与Deepseek 进行精准问答
与 DeepSeek 进行高效问答的关键在于 清晰表达需求、合理使用功能、灵活调整提问方式。以下是一些实用建议: 一、基础原则 明确问题 ✅ 清晰描述背景、目标和具体需求。 ❌ 避免模糊提问:“帮我写点东西”→ ✅“我需要一篇关于AI在医疗领域应用的500字…...
cefsharp131升级132测试(WinForms.NETCore)
一、升级(Nuget) 版本说明(readme):最低.NET Core3.1 (NET5.0+) + Visual C++ 2019 Redist 二、试运行、兼容性测试...
docker部署及操作
目录 一、Docker的简介 二、基础环境配置以及部署 1. Linux基础配置 2. 开启Linux内核的流量转发功能 一、Docker的简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows …...
Jmeter对图片验证码的处理
Jmeter对图片验证码的处理 在web端的登录接口经常会有图片验证码的输入,而且每次登录时图片验证码都是随机的;当通过jmeter做接口登录的时候要对图片验证码进行识别出图片中的字段,然后再登录接口中使用; 通过jmeter对图片验证码…...
DeepSeek本地部署_cherry studio知识库搭建
1.下载并安装:ollama Download Ollama on macOSDownload Ollama for macOShttps://ollama.com/download 安装是否成功确认,管理员权限运行PowerShell: ollama -h 2.下载安装deepseek 管理员方式运行PowerShell,运行命令&#x…...
CSS 实现下拉菜单效果实例解析
1. 引言 在 Web 开发过程中,下拉菜单是一种常见且十分实用的交互组件。很多前端教程都提供过简单的下拉菜单示例,本文将以一个简洁的实例为出发点,从 HTML 结构、CSS 样式以及整体交互逻辑三个层面进行详细解析,帮助大家理解纯 C…...
项目场景拷打
补偿事务解决超卖 通过补偿事务避免超卖问题,可以通过以下几种方式实现: 1. 使用数据库事务与锁机制 事务管理:将库存扣减和订单生成操作放在同一个数据库事务中,确保操作的原子性。如果事务中任何一个步骤失败,则整…...
C语言之扫雷
C语言之扫雷 game.hgame.ctest.c 参考 https://blog.csdn.net/m0_62391199/article/details/124694375 game.h #pragma once #include <stdio.h> #include <time.h> #include <stdlib.h>#define ROW 9 #define COL 9#define ROWS ROW2 #define COLS COL2#de…...
android手机本地部署deepseek1.5B
手机本地部署大模型需要一个开源软件 Release Release v1.6.7 a-ghorbani/pocketpal-ai GitHub 下载release版本apk 它也支持ios,并且是开源的,你可以编译修改它 安装完后是这样的 可以下载推荐的模型,也可以在pc上下载好,然后copy到手机里 点 + 号加载本地模型...
用C语言实现斐波那契数列:从基础代码到深入理解
在编程的世界里,斐波那契数列是一个经典且有趣的概念,今天我们就通过一段C语言代码来深入探索如何生成斐波那契数列。 代码初览 这段代码实现了输入一个整数 n ,然后输出斐波那契数列的第 n 项。 代码逐行解析 变量声明: - int …...
vue3 怎么自动全局注册某个目录下的所有 vue 和 tsx 组件
在开发 vue3 项目时,我们会有这样的诉求,怎么自动全局注册某个目录下的所有 vue 和 tsx 组件? 虽然已经有非常强大的 unplugin-vue-components 支持,但是在某些动态场景下,unplugin-vue-components 也选择了不支持。 …...
Android 消息总站 设计思路
项目是组件化模式,这里记录下项目消息总站设计思路 目录 1、接口模式 2、Viewmodel 模式 3、LiveDataBus 模式 3、EventBus 模式 1、接口模式 消息总站:MessageCenter 单利模式 public class MessageCenter {private static MessageCenter instanc…...
webstorm 右下角git分支组件不显示如何恢复
1、在上方工具栏点击view 2、选择Appearance 3、选择 Status Bar Widgets 4、勾选Git Branch 目录如下图所示...
三、k8s pod详解
pod详解的相关的基础知识和初始化容器,以及私有化的镜像仓库*。 pod进阶:pod的状态,pod的探针 pod的详解: pod是k8s集群管理的最小单位,最小的资源组件,也是最小化运行容器的资源对象。 容器运行在pod里…...
代码随想录算法训练day39--动态规划之《打家劫舍系列》
代码随想录算法训练 —day39 文章目录 代码随想录算法训练前言一、198.打家劫舍二、213.打家劫舍II三、337.打家劫舍 III总结 前言 今天是算法训练的第39天,希望自己能够坚持下来! 今日任务依旧是动态规划,不过是打家劫舍系列: …...
AI是什么?
一、概述 1.1 AI是什么 就像给机器装了个"会学习的大脑",让它们能像人一样: 看懂世界(比如手机相册自动识别猫狗照片)听懂人话(比如叫"Siri定个闹钟")自己思考(比如围棋…...
ZooKeeper 的典型应用场景:从概念到实践
引言 在分布式系统的生态中,ZooKeeper 作为一个协调服务框架,扮演着至关重要的角色。它的设计目的是提供一个简单高效的解决方案来处理分布式系统中常见的协调问题。本文将详细探讨 ZooKeeper 的典型应用场景,包括但不限于配置管理、命名服务…...
C++ list介绍
文章目录 1. list简介2. list的实现框架2.1 链表结点2.2 链表迭代器2.3 链表 3. list迭代器及反向迭代器设计3.1 list迭代器3.2 list反向迭代器3.3 list迭代器失效 4. list与vector比较 1. list简介 list,即链表。 链表的种类有很多,是否带头结点&#…...