open-wether / docs /development.md
soiz1's picture
Migrated from GitHub
6ee917b verified

Build From Source

To compile and build the Open-Meteo Docker image yourself, you can download the source code and run docker build.

Build Docker image from source:

# Get Source code
git clone https://github.com/open-meteo/open-meteo.git
cd open-meteo

# Build Docker image
docker build -t open-meteo .

# Create a Docker volume to store weather data
docker volume create --name open-meteo-data

# Start the API service on http://127.0.0.1:8080
docker run -d --rm -v open-meteo-data:/app/data -p 8080:8080 open-meteo

# Download the digital elevation model
docker run -it --rm -v open-meteo-data:/app/data open-meteo sync copernicus_dem90 static

# Download global temperature forecast from GFS 13 km resolution 
docker run -it --rm -v open-meteo-data:/app/data open-meteo sync ncep_gfs013 temperature_2m --past-days 3

# Get your forecast
curl "http://127.0.0.1:8080/v1/forecast?latitude=47.1&longitude=8.4&models=gfs_global&hourly=temperature_2m"

Note: If built from source, the image name is just open-meteo instead of ghcr.io/open-meteo/open-meteo

Development

If you want to interactively develop on the Open-Meteo source code and rapidly test changes, you can build in debug mode.

Using docker helps to run Open-Meteo, but all changes require a new image build, which slows down development. The Vapor development guide for macOS and linux help to get started.

Develop with Docker:

git clone https://github.com/open-meteo/open-meteo.git
cd open-meteo

# Create a Docker volume to store weather data
docker volume create --name open-meteo-data

# Install docker
docker build -f Dockerfile.development -t open-meteo-development .
docker run -it --security-opt seccomp=unconfined -p 8080:8080 -v ${PWD}:/app -v open-meteo-data:/app/data -t open-meteo-development /bin/bash
# Run commands inside docker container:
swift run
swift run openmeteo-api download-ecmwf --run 00

Develop on macOS:

git clone https://github.com/open-meteo/open-meteo.git
cd open-meteo

# Install Xcode from the App store
# Install brew
brew install netcdf cdo bzip2
open Package.swift
# `swift run` works as well

Develop on Linux natively:

It is easiest to use ubuntu 22.04 since this is the only Linux where swift 5.8+ is supported natively.

git clone https://github.com/open-meteo/open-meteo.git
cd open-meteo

# Install the swift compiler as pointed out in the Vapor development guide
sudo apt install libnetcdf-dev libeccodes-dev libbz2-dev build-essential cdo curl
sudo apt-get install binutils git gnupg2 libc6-dev libcurl4-openssl-dev libedit2 libgcc-9-dev libpython3.8 \
  libsqlite3-0 libstdc++-9-dev libxml2-dev libz3-dev pkg-config tzdata unzip zlib1g-dev
sudo apt install libbz2-dev libz-dev

wget https://download.swift.org/swift-5.8.1-release/ubuntu2204/swift-5.8.1-RELEASE/swift-5.8.1-RELEASE-ubuntu22.04.tar.gz
tar xvzf swift-5.8.1-RELEASE-ubuntu22.04.tar.gz
sudo mv swift-5.8.1-RELEASE-ubuntu22.04 /opt
ln -s /opt/swift-5.8.1-RELEASE-ubuntu22.04/ /opt/swift
echo 'export PATH=/opt/swift/usr/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

# Test if swift is working
swift --version

swift run
swift run openmeteo-api download-ecmwf --run 00

Notes:

  • To restart swift run press ctrl+c and run swift run again
  • Add -c release to swift run to switch to a faster release build