news 2026/9/26 2:18:46

如何自建免费 Open-Meteo 天气 API:新手三步部署完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何自建免费 Open-Meteo 天气 API:新手三步部署完整指南

如何自建免费 Open-Meteo 天气 API:新手三步部署完整指南

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

Open-Meteo 是一个免费开源的气象数据平台,用它几行命令就能自建专属天气 API 服务:拉源码、起容器、同步数据,8080 端口上就有可用的小时级预报接口。

一、Open-Meteo 到底能帮你解决什么问题

不再被第三方接口卡脖子

如果你的项目里只要"一个天气接口",通常的路径是:找商业 API 注册、付费、看配额脸色。Open-Meteo 把这条链路整个换掉:上游数据来自各国气象机构公开发布的数值预报,处理管线和 API 服务全部开源,整套服务可以跑在你自己的机器上,端点、变量、存储都归你管。

一个容易落地的场景

假设你运营几个温室大棚,想每小时拿 2 米气温、相对湿度和降水量,来决定通风机和遮阳网的开关。调公开 API 也能做,但更新节奏、私有派生变量、内网设备访问这些需求就受制于人了。自建 Open-Meteo 之后,接口就挂在你的内网里,要什么变量自己定,数据落在自己的磁盘上。

开箱能拿到什么

  • 最长 16 天的小时级预报
  • 80 年历史天气(基于 ERA5 再分析)
  • 多模型集成:全球 11 km 分辨率,区域模型细到 2 km(ICON D2),个别模型可达 1.5 km
  • 除预报外还有海洋、空气质量、洪水、高程等 API

以上能力以 README 中的描述为准。

二、动手前:环境清单 + 源码获取

硬件最低要求与推荐配置

API 服务器用 Swift 编写,编译后是单个二进制文件,运行环境非常干净,你只需要 Docker。

项目最低要求推荐配置
操作系统任意装有 Docker 的 LinuxUbuntu 22.04 LTS(官方 APT 包仅支持该系统)
Docker20.10 以上,含 Compose v2最新版
内存8 GB16 GB(内存兼作数据缓存)
存储100 GBNVMe SSD
CPU支持 SIMD 指令(如 AVX2),x86-64 或 Arm4 核及以上

两个容易忽略的点:

  1. 磁盘就是缓存。每次请求只会读取压缩数据里的一小段,最近访问的数据会留在本地盘上,NVMe 和 SATA 在这里体验差距明显。
  2. 内存也参与缓存。轻度自用 8 GB 足够;变量多、还要查历史数据的场景,16 GB 会从容很多。

完整硬件要求见 入门指南。

获取源码

git clone https://gitcode.com/GitHub_Trending/op/open-meteo cd open-meteo

仓库不大,核心就是 Dockerfile(把 Swift 源码编译成单个openmeteo-api二进制)和 docker-compose.yml(服务编排)。

三、三步跑起来:容器化部署实操 🚀

以下就是完整的 Open-Meteo Docker 搭建流程。

第一步:一条命令启动服务

docker compose up -d

docker-compose.yml 里定义了两个容器:

  • open-meteo-api:API 服务器,监听8080端口(--hostname 0.0.0.0 --port 8080)
  • open-meteo-sync:数据同步 worker,持续从数据分发源拉取dwd_icon模型的temperature_2m变量

两者共享一个命名卷open_meteo_database(挂载到容器内/app/data),所有气象数据都存在这里。首次运行需要构建镜像(Swift 编译,约几分钟),之后再启动只要几秒。

第二步:首次数据同步

同步 worker 会自动启动,你也可以手动触发一次,直观看到发生了什么:

docker exec -it open-meteo-api sync dwd_icon temperature_2m --past-days 3 --repeat-interval 5

命令格式是固定的:sync <模型,逗号分隔> <变量,逗号分隔>。想多拿几个变量,直接加:

docker exec -it open-meteo-api sync dwd_icon temperature_2m,relative_humidity_2m,precipitation --past-days 7

常用选项(完整参数见 同步命令源码):

  • --past-days:往回同步多少天,默认 7
  • --repeat-interval N:常驻运行,每 N 分钟检查一次新文件
  • --server:数据源,默认指向 Open-Meteo 开放数据 S3 分发源,不用配置

第三步:验证接口是否可用

curl "http://localhost:8080/v1/forecast?latitude=52.52&longitude=13.41&hourly=temperature_2m&models=icon_global"

返回包含time数组和temperature_2m数组的 JSON,就说明部署成功了。注意第一次请求偏慢:数据要从远端拉下来写入本地缓存,之后同位置或邻近坐标的请求通常都在亚秒级。接口的完整定义在 openapi/forecast.yml。

四、数据从哪来:气象模型与变量解析 📡

上游是国家气象机构的开放预报

Open-Meteo 自己不做模型,它把各国机构公开发布的数值天气预报拉下来,统一格式后存入可查询的数据库。常见来源:

模型提供方分辨率
ICON(icon / icon-eu / icon-d2)德国 DWD11 km / 7 km / 2 km
GFS + HRRR美国 NOAA全球 + 北美高分辨率
IFS欧洲中期天气预报中心 ECMWF0.25°
AROME / ARPEGE法国 MeteoFrance区域高分辨率
GEM加拿大北美区域

模型域注册表 里列出了全部可用的域标识符,sync命令里的dwd_icon指的就是 DWD ICON。

变量名怎么读

变量命名基本自解释,几个高频的:

  • temperature_2m:距地面 2 米气温,后缀_2m表示高度
  • dew_point_2m、relative_humidity_2m:露点温度、相对湿度
  • precipitation:每小时降水量
  • wind_speed_10m、wind_direction_10m:10 米高度风速、风向
  • weather_code:整数天气码(WMO 标准),对应"小雨""多云"这类文字描述

想看某个模型支持哪些变量,直接读源码最快,例如 ICON 的完整变量清单在 IconVariable.swift。

单点取数为什么快

这是 Open-Meteo 最有工程味的一环。原始模型文件(GRIB 之类)体积很大,每次查询都要在网格里定位经纬度再插值,开销不小。Open-Meteo 把数据预先转成自研二进制格式:按"位置 × 变量 × 时间段"拆成独立小文件,查询时直接打开对应文件就行——类似图书馆按编号取书,而不是每次翻遍整个书库。这也是它能在普通硬件上把平均响应时间压到毫秒级的原因。

五、调优与生产化:性能、成本、安全 🔧

只同步需要的变量

这是省空间最直接的手段。ICON 全量变量体积可观,只需要温度和湿度就只同步这两个:

docker exec -it open-meteo-api sync dwd_icon temperature_2m,relative_humidity_2m --past-days 7 --repeat-interval 5

如果用 Ubuntu 包版本,也可以写进配置文件:SYNC_ENABLED=true、SYNC_DOMAINS=dwd_icon、SYNC_VARIABLES=temperature_2m,dew_point_2m、SYNC_REPEAT_INTERVAL=5,然后重启同步服务。全部参数见 数据下载文档。

8GB 内存够不够

轻度使用够。记住前面的结论:内存和磁盘都参与缓存。跑高频业务或大量查询历史数据时(ERA5 一年大约 60 GB),把CACHE_SIZE环境变量调大(如 8GB),内存给到 16 GB + NVMe,体验会明显更好。

用 cron 自动清理过期数据

预报数据时效性强,老数据没多少价值。官方给出的清理模板是:气压层数据 10 天后删除,地表数据 90 天后删除,照抄即可,模板见 cronjobs.md。

前置 nginx:TLS 与限流

compose 版默认监听 0.0.0.0:8080,直接暴露公网不建议。生产环境挂一层反向代理做 TLS 最稳妥,多节点同步文档 里有一份现成的 nginx 配置可以参考。服务端自带限流和 API key 管理实现(RateLimiter.swift、ApiKeyManager.swift),需要管控访问时可以用上。另外数据是 CC-BY-4.0:展示数据时要保留来源署名。

六、常见问题 FAQ 🛟

首次请求为什么很慢

冷缓存。第一次请求某个变量需要从远端分发源取数,单次可能涉及几 MB 数据;之后同位置或邻近坐标的请求命中本地缓存,通常亚秒返回。

能不能不下载全量数据直接用

能。API 可以直接读取远端开放数据源并本地缓存,不需要先下完整个数据集。只有当你想完全离线、或者查询量很大时,才需要用sync把数据完整拉到本地。

想加一个新变量怎么办

把变量追加到sync命令的变量列表即可。如果要走原始数据路线,也可以让下载器按变量过滤,例如download icon --run 00 --only-variables temperature_2m,weather_code。注意不是所有变量在所有模型上都提供。

想绑域名对外提供怎么配

nginx 反代到127.0.0.1:8080,配上证书即可。Ubuntu 包版本默认只绑定 127.0.0.1(外部不可访问),天然安全,直接加代理层就行。

能商用吗

自部署支持非商业与商业两种用途,但注意两份协议:源码是 AGPL-3.0(修改后以服务形式对外提供,需要开放你的修改版源码),数据是 CC-BY-4.0(必须署名)。完整条款见 README。

写在最后

把主线再串一遍:git clone→docker compose up -d→sync→curl验证,这套 Open-Meteo 部署下来也就半小时的事。自建的最大价值不是省下几块钱接口费,而是端点、变量、存储都在你手里,可以按业务节奏改。如果你的项目涉及天气,值得在服务器上给它留个位置。

再往后延伸的空间也不小:海洋 API、空气质量 API、80 年历史天气 API,以及多节点分布式部署(一台机器负责下载、多台机器共享查询)——每个方向都值得单独展开。

【免费下载链接】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 2:17:29

雷达弱目标检测前跟踪TBD MATLAB实战:多帧积累与航迹回溯

简介&#xff1a;这份MATLAB检测前跟踪&#xff08;TBD&#xff09;资源面向雷达信号处理方向的学习者与研究人员&#xff0c;聚焦微弱目标检测与跟踪这一难点问题。其核心思路是在正式检测前对多帧回波数据进行积累与联合处理&#xff0c;以提升信噪比&#xff0c;并借助卡尔曼…

作者头像 李华
网站建设 2026/9/26 2:15:11

本地部署 AI 小说生成器:3 步跑通多章节长篇小说自动写作

本地部署 AI 小说生成器:3 步跑通多章节长篇小说自动写作 【免费下载链接】AI_NovelGenerator 使用ai生成多章节的长篇小说&#xff0c;自动衔接上下文、伏笔 项目地址: https://gitcode.com/GitHub_Trending/ai/AI_NovelGenerator AI_NovelGenerator 用大模型生成多章节…

作者头像 李华
网站建设 2026/9/26 2:13:48

储运部经理绩效考核指标量表与物流管理

绩效考核表中,储运部经理的绩效指标涵盖了从物料入库到部门管理费用节省的多个方面,侧重于确保物料质量、供应及时性、库存准确性以及部门运营成本的控制。每个绩效指标都设计有明确的考核目标和标准,目的在于通过精确的数据反映部门经理在日常管理中的表现。例如,物料入库…

作者头像 李华
网站建设 2026/9/26 2:13:48

项目部经理绩效考核指标量表与项目管理

在项目管理中,项目部经理的绩效考核标准不仅要关注项目的执行进度、质量以及团队管理能力,还要在更细化的层面上进行分析和评估。通过明确的KPI指标体系,可以有效地推动项目的顺利执行和团队的协同作业。本考核指标量表针对项目部经理的工作内容从多个维度进行了综合评估,以…

作者头像 李华