三步跑通 Open-Meteo 天气 API 自托管:新手从零到上线的部署指南
【免费下载链接】open-meteoFree Weather Forecast API for non-commercial use项目地址: https://gitcode.com/GitHub_Trending/op/open-meteo
如果你想在项目里免费查询全球天气预报、又不想依赖商业 API,Open-Meteo 是可以自托管的天气数据服务:接口不需要 API key,公开 API 面向非商业用途免费,而它把同一套服务开放给你在自己的机器上完成自托管部署。硬件上准备至少 8 GB 内存、100 GB 空闲磁盘;时间上预留 10 分钟即可。
自托管替你省掉什么
官方公开 API 免费但有约定:单日请求超过 10000 次需先联系官方(见 README)。如果你的调用量更大,或者要求数据始终留在自己的机房,自托管就是出路。默认的部署方式不需要你下载任何原始模型文件:服务从开放数据仓库实时拉取预报数据库,并在本地做 LRU 缓存。整个系统说白了只有两件事:一个查询天气的 HTTP 服务,一个存放压缩时间序列数据的./data目录。内存建议 16 GB,x86-64 与 Arm 均支持。
三步让服务跑起来
第一步,启动容器。官方镜像默认走"远程数据 + 本地缓存",开箱即用:
docker volume create --name open-meteo-data 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第二步,验证接口。首次调用冷缓存需要几秒,之后同坐标的调用会快很多:
curl "http://127.0.0.1:8080/v1/forecast?latitude=47.1&longitude=8.4&models=ecmwf_ifs025&hourly=temperature_2m"第三步,圈定需要的数据。想把某个模型和变量落到本地磁盘,用 sync 命令,它只收两个参数:模型、变量(逗号分隔),实现见 SyncCommand.swift:
docker run -it --rm -v open-meteo-data:/app/data ghcr.io/open-meteo/open-meteo sync ecmwf_ifs025 temperature_2m模型与变量的完整清单见数据下载文档,完整部署流程见入门指南。
Docker 还是 Ubuntu 包:路线怎么选
三条路线的差别主要在管理与目标系统:
| 路线 | 适用场景 | 资源开销 |
|---|---|---|
| Docker | 验证、开发、临时部署;任何带 Docker 的 Linux | 8 GB+ 内存、100 GB+ 磁盘;冷缓存首查约数秒 |
| Ubuntu 22.04 APT 包 | 单台 22.04 机器长期生产运行 | 硬件要求相同;systemd 管理,附带 openmeteo-sync 同步服务 |
| 源码构建 | 需要改动代码本身 | 额外需要 Swift 工具链;AGPLv3 要求公开改动后的源码 |
安装 APT 包(官方仅支持 Ubuntu 22.04):
sudo gpg --keyserver hkps://keys.openpgp.org --no-default-keyring --keyring /usr/share/keyrings/openmeteo-archive-keyring.gpg --recv-keys E6D9BD390F8226AE echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/openmeteo-archive-keyring.gpg] https://apt.open-meteo.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/openmeteo-api.list sudo apt update && sudo apt install openmeteo-api装完打开/etc/default/openmeteo-api.env,取消REMOTE_DATA_DIRECTORY与CACHE_SIZE=8GB的注释,再sudo systemctl restart openmeteo-api。自托管同样可用于商业用途,但数据仍需署名;单机自托管性能通常低于官方公共服务,对重复调用多的业务才最划算。
跑起来之后要盯什么 ⚠️
数据清理。官方示例给出两条保留规则:压力层数据(文件名含 hPa)10 天后删、地表数据 90 天后删,完整 cron 任务集见cron 任务示例:
0 * * * * find /var/lib/openmeteo-api/data/ -type f -name "chunk_*" -wholename "*hPa*" -mtime +10 -delete 5 * * * * find /var/lib/openmeteo-api/data/ -type f -name "chunk_*" -mtime +90 -delete监控。APT 包用sudo journalctl -u openmeteo-api.service查日志;Docker 用docker logs open-meteo。
安全。默认只监听 127.0.0.1:8080,外部访问不到,这本身是安全的。要开放时在/etc/default/openmeteo-api.env设置API_BIND="0.0.0.0:8080",建议再挂 nginx 反向代理提供 TLS。
性能。一次预报要从数百个压缩文件里读取小片数据,冷缓存时耗时几秒;服务约每 2 分钟检查远端新预报并预加载。查询变量多或历史数据多时,调大CACHE_SIZE。多节点部署见多节点同步文档。
常见问题速查 🔍
- 首次调用超时——冷缓存的正常现象,等几秒重试即可;同坐标的重复调用会命中缓存。
- 变量查不到数据——本地没有该模型/变量,先用
sync <模型> <变量>补齐。 - 外部机器连不上端口——默认绑定 127.0.0.1,改
API_BIND或加反向代理。 - 数据落在哪——Docker 是
/app/data,APT 包是/var/lib/openmeteo-api/data,文件均为chunk_*.om。 - 升级——Docker 重新拉镜像并重建容器;APT 包用 apt 更新升级,再用
openmeteo-api version核对版本。 - 授权——天气数据为 CC BY 4.0,展示数据时须署名;源码为 AGPLv3,改动后以网络服务分发需公开源码。
最后跑一遍这条命令做验收:
curl -s -o /dev/null -w "%{http_code}" "http://127.0.0.1:8080/v1/forecast?latitude=47.1&longitude=8.4&models=ecmwf_ifs025&hourly=temperature_2m"【免费下载链接】open-meteoFree Weather Forecast API for non-commercial use项目地址: https://gitcode.com/GitHub_Trending/op/open-meteo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考