news 2026/9/26 10:21:55

Open-Meteo 本地部署:3 步快速自建免费气象数据 API

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Open-Meteo 本地部署:3 步快速自建免费气象数据 API

Open-Meteo 本地部署:3 步快速自建免费气象数据 API

【免费下载链接】open-meteoFree Weather Forecast API for non-commercial use项目地址: https://gitcode.com/GitHub_Trending/op/open-meteo

Open-Meteo 是一个开源的气象数据平台,把 NOAA GFS、DWD ICON、ECMWF IFS 等气象机构发布的公开预报,统一成一套无需 API key 的 REST 接口。跑在自己的服务器上,就等于自建气象服务:数据落在自己机器,接口随业务改,不用向第三方按量付费。

先跑起来:3 条命令完成 Open-Meteo 本地部署

🚀 结论先说:不用写代码,也不用 clone 源码编译——官方镜像可以直接从公开数据库取数,第一次请求就能出结果。

先看硬件底线:x86-64 或 Arm 服务器、至少 8GB 内存(推荐 16GB)、100GB 以上磁盘,NVMe SSD 更好(存储同时兼任缓存)。详见 启动文档。

  1. 创建数据卷,存放气象数据和缓存:
docker volume create --name open-meteo-data
  1. 启动 API 容器,REMOTE_DATA_DIRECTORY指定公开数据库来源,端口默认只绑定本机:
docker run -d --rm --name open-meteo \ -v open-meteo-data:/app/data \ -e REMOTE_DATA_DIRECTORY=https://openmeteo.s3.amazonaws.com/data/ \ -e CACHE_SIZE=8GB \ -p 127.0.0.1:8080:8080 \ ghcr.io/open-meteo/open-meteo
  1. 发一条查询,第一次会慢几秒(要取数并写缓存),之后就近坐标会明显变快:
curl "http://127.0.0.1:8080/v1/forecast?latitude=47.1&longitude=8.4&models=ecmwf_ifs025&hourly=temperature_2m"

如何确认跑成功:响应是一段 JSON,里面temperature_2m字段有完整的小时时间序列(time 和 values),说明本地气象服务已经可用。

一句实话:自托管实例是"按需从公开数据库取数 + 本地缓存"的模式,响应通常比官方公网 API 慢,适合有稳定、重复查询量的场景,不适合只查一次。

它是怎么工作的:数据从哪来、怎么存、怎么查

🧊 打个比方:各国气象机构是出厂的原料商,Open-Meteo 是超市,你的查询是直接从货架上拿一袋已经分装好的商品。

  • 数据从哪来:各国气象机构公开发布的数值预报(NOAA GFS、DWD ICON、ECMWF IFS、MeteoFrance 等)免费可下载,但原始格式是二进制 GRIB 文件,直接用的话要懂网格、投影、二进制定制格式这些专业内容——这正是 Open-Meteo 替你做的事。
  • 怎么存:下载后统一转换成它自研、开源的压缩二进制格式(OM 文件),存在./data目录。这个格式专为"查某个地点一段时间序列"优化,比如"取柏林未来 7 天的温度"只需读很少的数据块。API 大约每 2 分钟检查一次公开数据库的预报更新并预加载,本地数据则保留在CACHE_SIZE控制的 LRU 缓存里。
  • 对外怎么查:标准的/v1/forecast这类 REST 接口,参数就是经纬度、模型、变量,返回 JSON。整个链路源码都在仓库里,比如 预报 API 路由、数据读取层,想改什么都能翻到出处。

长期用得稳:按需同步、控制存储、管住访问

📌 跑起来之后,真正花心思的是这三件事。

1. 按需同步,而不是全量下载

  • 默认配置下 API 已经会按需从公开数据库取数并缓存,什么也不用做。
  • 想让数据完全落盘在自己机器上,就另起一个容器跑sync命令,只拉"模型 + 变量"组合(源码见 SyncCommand.swift):
docker run -d --name open-meteo-sync \ -v open-meteo-data:/app/data \ ghcr.io/open-meteo/open-meteo \ sync dwd_icon temperature_2m --repeat-interval 5

它每 5 分钟对账一次,只下载缺失或新增的文件。

  • 官方 cronjob 示例列了直连各气象机构的全量时间表,但官方明确提醒:全量下载每天产生 4~8TB 流量,务必只选业务需要的变量。

2. 用定时任务压住存储占用

  • 存储占用 ≈ 变量数 × 时间深度,历史数据只增不减,必须定期清理。
  • 官方给出的做法是find按文件年龄分层删除,例如删掉 30 天前的预报数据(sync 文档里的例子用的是 Ubuntu 包路径,Docker 部署对应到数据卷里的/app/data):
find /app/data -type f -name "chunk_*" -mtime +30 -delete
  • 机器多时不必每台都下载:指定一台机器跑下载,其余 API 节点按 多节点同步方案 拉取现成数据库。

3. 管住访问,盯住指标

  • 默认端口只绑 127.0.0.1,不要直接暴露公网;对外开放就前置 nginx 反向代理,顺带解决 TLS。
  • 多人共用可以启用内置的 API key 机制:把 key 和限额写进文件、设置API_APIKEYS_PATH,每个 key 有独立调用配额,内置限流。
  • /metrics接口输出 Prometheus 格式(仅本机可访问),请求数、错误数、缓存占用都有现成指标,可直接接进已有监控(实现在 MetricsController.swift)。

两个真实使用场景

🌾场景一:给 App 加天气功能,不想被第三方免费 API 卡脖子

  • 问题:调用第三方免费 API 有每日请求量上限,网络延迟也取决于别人的服务。
  • 做法:在用户所在区域部署一个 Open-Meteo 本地部署节点,App 后端改为调用本地 API,热查坐标自动进缓存。
  • 效果:接口与公网版完全一致,业务代码不用改;天气请求走内网,配额和数据都归自己。

🚚场景二:内部系统批量查天气(农业、物流、户外排班)

  • 问题:系统每小时要对几百个坐标取天气,反复走公网 API 费带宽、也费配额。
  • 做法:自建节点,用sync只拉业务用到的变量(温度、降水、风速),保留天数按业务设定。
  • 效果:盘里只存真正要用的数据,系统从此有了"自己的气象服务",数据还能离线分析和回测。

怎么选:Open-Meteo 自建 vs 其他方案

对比项Open-Meteo 自建商业气象 API公网免费 Open-Meteo API
费用免费,只承担服务器成本按调用量或档位收费非商业用途免费
数据掌控数据存本机,完全自主数据在第三方不可控
定制能力开源(AGPL-3.0),源码可改有限不可修改
部署复杂度中等,容器一键启动低无
性能取决于自有机器和缓存依赖服务商公网延迟,通常很快
商用允许商用自托管(数据为 CC-BY-4.0,需署名)可商用商用需另行联系

适合谁:需要持续、批量获取气象数据的开发者和团队——App 天气功能、智慧农业、物流与户外排班、能源预测这类场景。如果这个气象 API 就该跑在你自己的机器上,不妨先把上面那 3 条命令跑一遍。

【免费下载链接】open-meteoFree Weather Forecast API for non-commercial use项目地址: https://gitcode.com/GitHub_Trending/op/open-meteo

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/26 10:20:52

在 Visual Studio 2026 中配 TaoToken:减少升级等待,把时间还给编码

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

作者头像 李华
网站建设 2026/9/26 10:20:50

服务端带宽压测与瓶颈排查:万人同服状态下的吞吐瓶颈

服务端带宽压测与瓶颈排查:万人同服状态下的吞吐瓶颈在大型多人在线游戏(MMO)或超大规模同屏竞技场景中,网络子系统的吞吐能力直接决定了服务器的承载上限。许多项目在内网测试时 500 人运转良好,但压测一旦推升至 5,0…

作者头像 李华
网站建设 2026/9/26 10:20:43

PyTorch Tensor布局与拷贝:从内存地址到GPU性能实战

1. 项目概述:为什么Tensor的布局与拷贝不是“复制粘贴”那么简单?你写完x torch.tensor([1, 2, 3]),再敲一句y x.clone(),心里想的是“好了,两个独立的张量”,结果模型训练突然报错RuntimeError: one of …

作者头像 李华
网站建设 2026/9/26 10:20:41

YOLOv8共享单车违停检测系统:PyQt5界面与数据集实战

简介:基于YOLOv8与PyQt5构建的共享自行车识别检测系统,面向计算机相关专业学生与算法开发人员,适合课程设计、毕业设计及各类竞赛场景,可对画面中的共享自行车进行识别与计数,并能扩展为违规停放检测告警模块。资源共8…

作者头像 李华
网站建设 2026/9/26 10:20:21

Cubiomes Viewer:Minecraft世界生成器的Lua可视化调试沙盒

1. 这不是普通地图工具,而是Minecraft世界的“地质勘探仪”Cubiomes Viewer这个名字听起来像某个小众开源项目,但只要你玩过Minecraft、研究过种子、被“出生点附近没村庄”折磨过,或者为找一个带特定生物群系组合的完美出生地熬过整晚——那…

作者头像 李华