Ubuntu 22.04 部署 Elastic Stack:APT 安装与生产环境调优指南
1. 项目概述为什么要在Ubuntu上部署Elastic Stack如果你正在处理日志、指标或者任何需要被搜索和分析的数据那么Elasticsearch和Kibana这对组合几乎是绕不开的。Elasticsearch是一个基于Lucene的分布式搜索和分析引擎它以近乎实时的速度处理海量数据而闻名。而Kibana则是Elasticsearch的官方数据可视化和管理工具它让你能通过漂亮的图表、仪表盘和地图直观地理解数据背后的故事。在Ubuntu服务器上部署这套环境是构建数据中台、日志分析系统或业务监控平台非常经典且基础的一步。我之所以选择Ubuntu是因为它在服务器领域的稳定性和广泛的社区支持无论是物理机、虚拟机还是云主机部署流程都高度一致且可靠。这篇文章我会带你从零开始在Ubuntu 22.04 LTS上通过官方APT仓库一步步安装和配置Elasticsearch与Kibana并分享一些只有踩过坑才知道的配置技巧和排查方法。2. 环境准备与核心思路解析在动手之前明确我们的目标和路径至关重要。我们的目标是在一台纯净的Ubuntu 22.04 LTS系统上搭建一个可用于生产环境测试或开发的Elasticsearch Kibana单节点集群。这里有几个关键决策点需要先理清。2.1 安装方式选型为什么选择APT而非Docker或Tarball安装Elasticsearch主要有三种方式使用操作系统包管理器如APT、使用Docker容器、或者下载压缩包Tarball手动安装。对于Ubuntu服务器环境我强烈推荐使用APT方式。使用APT安装的优势系统集成度高APT安装会将Elasticsearch和Kibana注册为系统服务systemd这意味着你可以使用熟悉的systemctl start/stop/status elasticsearch命令来管理服务并且服务会随系统自动启动这对于服务器运维来说是基本要求。依赖管理自动Java运行时环境JRE是Elasticsearch的必须依赖。通过APT安装如果系统没有合适的Java安装过程会提示或自动安装OpenJDK省去手动配置的麻烦。配置路径规范所有配置文件/etc/elasticsearch//etc/kibana/、数据目录/var/lib/elasticsearch/、日志目录/var/log/elasticsearch/都遵循Linux的FHS标准便于管理和备份。安全更新便捷当Elastic官方发布安全更新时你可以直接通过sudo apt update sudo apt upgrade来更新流程和更新其他系统软件无异。相比之下Docker方式虽然隔离性好、部署快但在生产环境中对于需要深度监控、性能调优以及与主机系统其他服务紧密集成的场景直接使用系统服务往往更直观、可控。而Tarball方式则过于手动不适合用于需要标准化运维的服务器环境。2.2 版本协同确保Elasticsearch与Kibana版本严格一致这是新手最容易踩坑的地方。Elasticsearch和Kibana的主版本号必须完全一致。例如如果你安装了Elasticsearch 8.12.0那么Kibana也必须安装8.12.0。跨主版本如7.x配8.x完全无法工作即使是次版本号不同也可能出现兼容性问题。我们将通过配置Elastic的官方APT仓库来安装这能天然保证我们从同一源获取版本一致的软件包。在安装时我们也会显式指定版本号来双重确认。2.3 硬件与系统先决条件检查在开始安装前请确保你的Ubuntu系统满足以下条件内存Elasticsearch是Java应用且其性能与内存紧密相关。对于学习或轻量级使用至少需要2GB可用内存。生产环境建议8GB或更多。你可以用free -h命令查看。磁盘空间确保/var/lib目录有足够的空间存放数据建议预留10GB以上。JavaElasticsearch 8.x需要Java 17或更高版本。我们将通过安装包自动解决。网络服务器需要能访问互联网以下载软件包并且后续Kibana需要通过浏览器访问。3. 逐步安装Elasticsearch现在我们进入核心实操环节。请跟随步骤并在每个步骤后验证操作是否成功。3.1 导入Elasticsearch GPG密钥并添加APT仓库首先我们需要将Elastic官方的软件源添加到系统的APT源列表中这样apt才能找到并验证软件包。打开终端依次执行以下命令# 1. 安装必要的HTTPS传输工具 sudo apt update sudo apt install -y apt-transport-https ca-certificates curl gnupg # 2. 下载并导入Elasticsearch的GPG公钥用于验证软件包签名 curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg # 3. 将Elasticsearch仓库定义添加到系统的sources.list.d目录 echo deb [signed-by/usr/share/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list关键点解析apt-transport-https允许APT通过HTTPS协议下载软件包现在是必须的。gpg --dearmorGPG密钥是二进制格式--dearmor选项将其转换为APT可以识别的ASCII格式。signed-by这是一个更安全的指定密钥路径的方式优于已弃用的apt-key add命令。/etc/apt/sources.list.d/将第三方仓库的文件放在这个目录下是一个良好的实践便于管理不会污染主sources.list文件。3.2 安装Elasticsearch添加仓库后更新本地软件包索引并安装Elasticsearch。# 更新软件包列表使其包含新添加的Elastic仓库 sudo apt update # 安装指定版本的Elasticsearch。这里安装8.12.0你可以替换为当时最新的稳定版。 # 使用‘’号指定版本可以避免意外升级到不兼容的新版本。 sudo apt install -y elasticsearch8.12.0安装过程会自动处理Java依赖。安装完成后Elasticsearch服务文件elasticsearch.service会自动配置好但服务默认是未启动的。3.3 关键配置调整从单节点测试到生产就绪安装完成后最重要的步骤是配置文件。Elasticsearch的主配置文件位于/etc/elasticsearch/elasticsearch.yml。我们需要修改几个关键参数。使用你喜欢的文本编辑器打开它例如sudo nano /etc/elasticsearch/elasticsearch.yml。找到并修改/添加以下配置项# ---------------------------- 集群与节点名称 ----------------------------- # 给集群起个名字。单节点也是集群。 cluster.name: my-elastic-cluster # 给当前节点起个名字。 node.name: node-1 # ------------------------------ 网络绑定 ---------------------------------- # 默认只绑定本地回环地址(127.0.0.1)这样只有本机可以访问。 # 如果你需要从其他机器访问比如Kibana装在同一台机器用localhost就行 # 或者未来扩展节点需要绑定到服务器的实际IP或0.0.0.0。 # 对于单机学习环境绑定到localhost是安全的。 network.host: 127.0.0.1 # HTTP API端口默认9200。 http.port: 9200 # ------------------------------ 发现与集群初始化 -------------------------- # 对于单节点集群必须显式配置否则节点会一直等待其他节点加入。 discovery.type: single-node # ------------------------------ 安全特性Elasticsearch 8.x 默认开启---- # 8.x版本默认开启了安全功能TLS和用户认证。 # 对于本地学习环境我们可以暂时禁用安全以简化连接。 # 注意生产环境绝对不要禁用 xpack.security.enabled: false # 如果你选择开启安全后续Kibana连接时需要配置用户名密码。 # 初始内置用户如elastic的密码可以通过 /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive 命令设置。配置心得network.host: 127.0.0.1是最安全的初始配置。只有当你的Kibana安装在其他服务器时才需要将其改为本机内网IP如192.168.1.100或0.0.0.0监听所有接口。改为0.0.0.0后务必配置防火墙只允许可信IP访问9200端口。discovery.type: single-node是单节点部署的必选项没有它节点日志里会不断提示master not discovered。关于安全我建议初学者先关闭 (xpack.security.enabled: false)快速搭建起来看到效果。等熟悉基本操作后再在一个新环境中尝试开启安全特性学习如何配置证书和用户。3.4 启动服务与验证安装配置完成后启动Elasticsearch服务并设置开机自启。# 重新加载systemd配置使新的服务文件生效 sudo systemctl daemon-reload # 启用开机自启动 sudo systemctl enable elasticsearch # 启动Elasticsearch服务 sudo systemctl start elasticsearch # 查看服务运行状态确认状态为‘active (running)’ sudo systemctl status elasticsearch如果状态显示为active (running)恭喜你Elasticsearch已经成功启动。接下来我们验证它是否真的在工作。打开另一个终端窗口使用curl命令访问其HTTP APIcurl -X GET http://localhost:9200/你应该会看到一个包含集群名称、节点名称、Elasticsearch版本等信息的JSON响应类似于{ name : node-1, cluster_name : my-elastic-cluster, cluster_uuid : abcdefghijklmnopqrstuv, version : { number : 8.12.0, build_flavor : default, build_type : deb, build_hash : abc123def456, build_date : 2024-01-01T00:00:00.000Z, build_snapshot : false, lucene_version : 9.9.0, minimum_wire_compatibility_version : 7.17.0, minimum_index_compatibility_version : 7.0.0 }, tagline : You Know, for Search }看到这个说明Elasticsearch安装、配置、启动全部成功。4. 安装与配置Kibana可视化界面Elasticsearch本身没有图形界面所有操作通过API进行。Kibana就是为我们提供这个可视化操作窗口的工具。4.1 通过APT安装Kibana由于我们已经添加了Elastic的APT仓库安装Kibana就非常简单了。确保版本与Elasticsearch一致。# 更新列表可选但建议 sudo apt update # 安装指定版本的Kibana sudo apt install -y kibana8.12.04.2 配置Kibana连接ElasticsearchKibana的配置文件位于/etc/kibana/kibana.yml。我们需要告诉它Elasticsearch在哪里。使用sudo nano /etc/kibana/kibana.yml打开文件找到并修改以下关键参数# Kibana服务端口默认5601 server.port: 5601 # Kibana服务绑定的地址。如果想从其他机器访问改为‘0.0.0.0’ server.host: 127.0.0.1 # 要连接的Elasticsearch实例的URL。因为我们Elasticsearch也在本机且没开安全所以是http elasticsearch.hosts: [http://localhost:9200] # 如果Elasticsearch开启了安全认证xpack.security.enabled: true需要配置用户名密码 # elasticsearch.username: kibana_system # elasticsearch.password: your-strong-password # 对于8.x如果Elasticsearch开启了安全可能还需要配置CA证书路径 # elasticsearch.ssl.certificateAuthorities: [ /path/to/your/http_ca.crt ] # 可选设置Kibana界面语言为中文 # i18n.locale: zh-CN配置要点server.host和elasticsearch.hosts是核心。如果Elasticsearch和Kibana在同一台机器都用localhost或127.0.0.1是最简单的。如果Kibana和Elasticsearch不在同一主机elasticsearch.hosts需要改为Elasticsearch服务器的实际IP地址例如[http://192.168.1.100:9200]并且要确保Elasticsearch的network.host配置允许该IP连接。语言切换i18n.locale: zh-CN可以让界面变成中文对初学者友好但某些翻译可能不够准确熟悉后可以改回en。4.3 启动Kibana并访问配置完成后启动Kibana服务。# 启用开机自启 sudo systemctl enable kibana # 启动服务 sudo systemctl start kibana # 查看状态 sudo systemctl status kibana等待十几秒让Kibana完全启动。然后打开你的浏览器访问http://你的服务器IP:5601。如果Kibana配置的server.host是127.0.0.1你需要在服务器本机使用浏览器访问http://localhost:5601。首次访问如果Elasticsearch安全未开启你会直接进入Kibana的主页。如果开启了安全你会看到登录界面需要使用内置用户如elastic和之前设置的密码登录。进入Kibana后我建议你先到Management Dev Tools里面试试。这里有一个控制台可以直接编写和发送REST API请求到Elasticsearch是学习和调试的利器。例如输入GET /并点击发送你会看到和之前curl命令一样的集群信息。5. 核心功能初探与数据导入示例安装完成只是开始让数据跑起来才是目的。这里我以一个最简单的例子——导入一些系统日志并可视化——来演示整个流程。5.1 使用Dev Tools创建索引并插入数据在Kibana的Dev Tools中我们执行以下命令// 1. 创建一个名为‘my-logs’的索引并定义简单的字段映射 PUT /my-logs { mappings: { properties: { timestamp: { type: date }, level: { type: keyword }, // keyword类型适合精确匹配和聚合 message: { type: text } // text类型会被分词适合全文搜索 } } } // 2. 向索引中插入几条模拟的日志文档 POST /my-logs/_doc { timestamp: 2024-05-27T10:00:00, level: ERROR, message: Failed to connect to database server } POST /my-logs/_doc { timestamp: 2024-05-27T10:01:00, level: WARN, message: High memory usage detected } POST /my-logs/_doc { timestamp: 2024-05-27T10:02:00, level: INFO, message: User login successful } POST /my-logs/_doc { timestamp: 2024-05-27T10:05:00, level: ERROR, message: Disk space is running low }执行后Elasticsearch会创建索引并存储这四条数据。5.2 使用Discover搜索数据点击左侧导航栏的Discover。首次进入需要创建一个数据视图Data View。点击“Create data view”。Name: 输入my-logs-*可以使用通配符匹配多个索引。Index pattern: 输入my-logs下方会显示匹配到的索引。Timestamp field: 选择timestamp这样数据就可以按时间筛选。 点击“Save data view to Kibana”。现在你就能在Discover页面看到刚刚插入的4条日志了。你可以尝试在搜索框输入关键词比如error来过滤出错误级别的日志。5.3 创建可视化图表与仪表盘接下来我们基于这些数据创建两个简单的图表。创建饼图按日志级别统计点击左侧导航栏Visualize Library-Create visualization。选择图表类型Pie。选择数据视图my-logs-*。在“Buckets”区域点击“Add”选择“Split slices”。聚合方式选择“Terms”字段选择level.keyword。点击右上角“Save and return”给图表起名“Log Level Distribution”。创建柱状图按时间统计日志数量再次Create visualization选择Vertical Bar。选择数据视图my-logs-*。在“Buckets”区域点击“Add”选择“X-axis”。聚合方式选择“Date Histogram”字段选择timestamp间隔选择“Auto”。点击“Save and return”起名“Logs Over Time”。将图表加入仪表盘点击左侧导航栏Dashboard-Create dashboard。点击“Add panel”选择“Existing”。将刚才创建的“Log Level Distribution”和“Logs Over Time”两个图表都添加进来。调整图表位置和大小最后点击“Save”给仪表盘起名“My Logs Monitor”。现在你就拥有了一个可以实时展示日志级别分布和随时间变化趋势的简易监控看板。虽然数据是模拟的但这个流程与处理真实的生产日志如通过Filebeat采集Nginx、应用日志导入Elasticsearch完全一致。6. 系统调优与生产环境注意事项单机测试跑通后若想用于接近生产的环境以下几个调优点至关重要。6.1 JVM堆内存配置Elasticsearch的性能极度依赖JVM堆内存。默认安装会设置堆大小为系统内存的50%但上限为1GB。对于专用服务器这通常需要调整。配置文件位于/etc/elasticsearch/jvm.options。不要直接修改这个文件因为包更新可能会覆盖它。正确做法是创建一个自定义配置文件sudo nano /etc/elasticsearch/jvm.options.d/heap.options在这个新文件中根据你的机器内存设置堆大小。一个常见的经验法则是将堆大小设置为系统可用内存的50%但不超过32GB。JVM超过32GB会使用不同的内存指针反而降低效率。例如对于一台16GB内存的机器-Xms8g -Xmx8g这里-Xms和-Xmx设置为相同的值可以避免堆内存动态调整带来的性能开销。修改后需要重启Elasticsearch服务sudo systemctl restart elasticsearch。6.2 操作系统参数优化为了让Elasticsearch稳定处理大量数据需要调整一些Linux系统限制。编辑/etc/security/limits.conf文件在末尾添加elasticsearch soft nofile 65536 elasticsearch hard nofile 65536 elasticsearch soft memlock unlimited elasticsearch hard memlock unlimitednofile 65536增加Elasticsearch用户可打开的文件描述符数量应对大量并发连接和文件。memlock unlimited允许Elasticsearch进程锁定内存防止其被交换swapped到磁盘上这对性能至关重要。此外还需要增加系统的虚拟内存映射区域数量# 临时生效 sudo sysctl -w vm.max_map_count262144 # 永久生效写入配置文件 echo vm.max_map_count262144 | sudo tee -a /etc/sysctl.conf sudo sysctl -p这些优化对于防止Elasticsearch在负载下出现“too many open files”错误或性能急剧下降是必须的。6.3 数据与日志路径管理默认情况下数据存储在/var/lib/elasticsearch日志存储在/var/log/elasticsearch。在生产环境中你可能会希望将数据目录挂载到单独的、容量更大、性能更好的磁盘上如SSD。这可以通过修改/etc/elasticsearch/elasticsearch.yml中的path.data和path.logs配置项来实现。务必在首次写入数据之前进行此操作迁移已有数据是一个更复杂的过程。6.4 启用安全特性强烈建议用于任何可外部访问的环境我们在测试时关闭了安全但这绝不适用于生产。启用安全需要几个步骤在elasticsearch.yml中设置xpack.security.enabled: true。为节点间通信和HTTP层生成TLS证书。可以使用Elasticsearch自带的elasticsearch-certutil工具。为内置用户如elastic,kibana_system,logstash_system等设置密码。在Kibana配置中配置对应的用户名、密码和CA证书路径。这个过程有详细的官方文档第一次操作会有些繁琐但这是将系统暴露在网络上前的必备步骤。7. 常见问题与故障排查实录即使按照步骤操作你也可能会遇到一些问题。这里记录了几个我亲自踩过或帮别人解决过的典型问题。7.1 Elasticsearch启动失败状态为failed首先查看具体的错误信息sudo systemctl status elasticsearch -l sudo journalctl -u elasticsearch --no-pager -n 50常见原因及解决Java版本问题Elasticsearch 8.x需要Java 17。使用java -version检查。如果版本不对安装正确的OpenJDK版本sudo apt install openjdk-17-jdk-headless然后重新启动服务。配置文件语法错误YAML对缩进非常敏感。检查/etc/elasticsearch/elasticsearch.yml是否有缩进错误必须用空格不能用Tab或者冒号后面没加空格。一个快速的检查方法是使用sudo elasticsearch -d -p pid --quiet测试运行或使用YAML在线校验工具检查配置文件。内存不足如果系统内存太小JVM可能无法分配足够的堆内存。尝试在/etc/elasticsearch/jvm.options.d/heap.options中设置更小的堆如-Xms512m -Xmx512m。端口冲突默认端口9200或9300被占用。使用sudo netstat -tlnp | grep :9200查看。可以修改elasticsearch.yml中的http.port或transport.port或者停止占用端口的服务。7.2 Kibana无法连接到Elasticsearch在Kibana日志中sudo journalctl -u kibana -f常看到ConnectionError或StatusCodeError。排查步骤确认Elasticsearch是否运行curl http://localhost:9200是否返回JSON。检查网络配置确保elasticsearch.yml中的network.host包含Kibana所在机器能访问的IP如果是本机127.0.0.1即可。确保kibana.yml中的elasticsearch.hosts地址和端口完全正确。检查安全配置如果Elasticsearch开启了安全 (xpack.security.enabled: true)Kibana配置中必须提供正确的elasticsearch.username和elasticsearch.password通常是kibana_system用户及其密码。还需要配置elasticsearch.ssl.certificateAuthorities指向HTTP层的CA证书默认在/etc/elasticsearch/certs/http_ca.crt。检查防火墙如果Kibana和Elasticsearch不在同一主机确保服务器防火墙如ufw允许在9200端口上的连接。7.3 写入数据时报错cluster_block_exception错误信息可能提示blocked by: [FORBILSTERED/1/index read-only / allow delete (api)]。原因与解决这通常是因为Elasticsearch节点磁盘空间不足触发了只读保护机制。检查磁盘空间df -h /var/lib/elasticsearch。临时解决如果确认有空间可能是水位线设置问题可以临时解除只读状态PUT /_all/_settings { index.blocks.read_only_allow_delete: null }根本解决清理磁盘空间删除旧的、不用的索引或者增加磁盘容量。同时可以调整磁盘水位线在elasticsearch.yml中配置cluster.routing.allocation.disk.watermark但这不是长久之计。7.4 性能问题搜索或索引速度慢如果感觉操作响应迟缓可以从以下几个方面排查硬件资源使用top或htop查看CPU和内存使用率。Elasticsearch是内存消耗大户确保没有发生Swap使用free -h查看Swap使用应为0或极低。JVM堆内存如6.1节所述确保堆内存设置合理。可以通过curl localhost:9200/_cat/nodes?vhname,heap*查看堆内存使用情况。索引设计过多的分片和副本会带来开销。对于小数据量单个主分片number_of_shards: 1和1个副本number_of_replicas: 1通常足够。使用GET /_cat/indices?v查看索引的分片情况。查询优化避免使用过于宽泛的通配符查询或正则表达式查询。使用Kibana的Dev Tools的“Profile”功能可以分析查询的耗时细节。安装和配置本身只是第一步真正的挑战在于如何根据你的数据特性和查询模式去设计索引映射、分片策略和编写高效的查询。这需要不断的实践和学习。我个人的体会是多利用Kibana的Dev Tools做实验多查看/_cat系列API如/_cat/health,/_cat/indices,/_cat/allocation来监控集群状态是快速上手和排障的最佳途径。当你成功地将第一份真实的数据流导入Elasticsearch并在Kibana中构建出能实时反映业务状态的仪表盘时那种一切尽在掌握的感觉会让你觉得前面的所有折腾都是值得的。

相关新闻

Markdown+Git+AI:构建可编程知识库的创业公司协作新范式

Markdown+Git+AI:构建可编程知识库的创业公司协作新范式

这次我们来看一个很有意思的观点:Garry Tan 提出的“未来整个创业公司就是 Markdown 文件”。这不是一个具体的软件或模型,而是一个关于软件开发、团队协作和知识管理未来形态的前沿理念。对于开发者、产品经理和创业者来说,理解这个观点&…

2026/10/18 11:23:56 阅读更多 →
I2C总线从初始化到调用的实战指南:时序、电气特性与错误处理

I2C总线从初始化到调用的实战指南:时序、电气特性与错误处理

1. 项目概述:从“能用”到“好用”的I2C总线实践 搞嵌入式开发,特别是和传感器、EEPROM、显示屏这些外设打交道,I2C总线绝对是绕不开的一道坎。表面上看,I2C协议简单清晰,两根线(SDA数据线、SCL时钟线&…

2026/10/17 8:00:42 阅读更多 →
阿里云ECS+宝塔面板:从零构建官网子域名网站全流程指南

阿里云ECS+宝塔面板:从零构建官网子域名网站全流程指南

1. 项目概述:从零到一,构建独立的官网子站 在官网运营中,我们常常会遇到这样的需求:需要为某个特定活动、新产品线、海外市场或者一个独立的服务模块,创建一个风格统一但又相对独立的网站。直接新建一个顶级域名成本高…

2026/10/17 8:08:47 阅读更多 →

最新新闻

Vue3组合式API类型注解实战:从setup到ref/reactive的完整指南

Vue3组合式API类型注解实战:从setup到ref/reactive的完整指南

Vue 3 和 TypeScript 的组合,在组合式 API 落地时最不受重视、也最容易被写崩的,恰恰是 setup、props、ref、reactive 这几个核心 API 的类型注解。很多人项目一搭起来就跑,跑着跑着类型全变成 any,最后又回到“运行时才知道挂在哪…

2026/10/18 11:23:03 阅读更多 →
Agent与大模型:从聊天到办事,手把手搭建最小智能体

Agent与大模型:从聊天到办事,手把手搭建最小智能体

最近一年多,我几乎每天都要跟“Agent”这个词打交道。有人把它叫智能体,有人直接喊AI助手,但真正能说清楚Agent和大模型之间差在哪的人,其实不多。大家都能感知到:Chat类产品只能聊天,Agent却能“办事”。同…

2026/10/18 11:23:03 阅读更多 →
从零搭建RAG本地知识库:用检索增强生成根治大模型幻觉

从零搭建RAG本地知识库:用检索增强生成根治大模型幻觉

前段时间我拿一份几十页的内部运维规范文档去问通用大模型:“某个告警的处理时限是多少?”它给了我一个完全合理、语气笃定,但文档里根本不存在的数字,还附带了一段有模有样的流程说明。我翻了半天原文,愣是没找到这一…

2026/10/18 11:23:03 阅读更多 →
电容层析成像图像重建:inversecgls.m 三种算法解析与调参指南

电容层析成像图像重建:inversecgls.m 三种算法解析与调参指南

简介:面向电容层析成像(ECT)研究者的MATLAB算法文件包,聚焦两相流场景下的图像重建逆问题求解。压缩包共1个文件,为inversecgls.m脚本,大小仅1KB,适合快速部署与二次开发。该脚本涵盖最小二乘、…

2026/10/18 11:23:03 阅读更多 →
EasyX图形编程入门:用C语言实现植物大战僵尸课设

EasyX图形编程入门:用C语言实现植物大战僵尸课设

简介:这是一份基于EasyX图形库与标准C语言实现的《植物大战僵尸》简化版游戏源码,专为计算机类专业学生课程设计、大作业及项目入门实践打造,适用于计科、人工智能、物联网等方向的学习者,兼顾零基础入门与进阶二次开发需求。资源…

2026/10/18 11:23:03 阅读更多 →
C#三层架构学生管理系统实战:BLL+DAL+Models解耦设计

C#三层架构学生管理系统实战:BLL+DAL+Models解耦设计

简介:这是一套基于C# Windows平台开发的学生信息管理系统完整源码,面向.NET初学者与三层架构实践者,聚焦数据库应用开发核心能力训练。系统采用标准三层架构(UI/BLL/DAL),集成SQL Server数据库,…

2026/10/18 11:22:03 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →