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:
```bash
# 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](https://docs.vapor.codes/install/macos/) and [linux](https://docs.vapor.codes/install/linux/) help to get started.
### Develop with Docker:
```bash
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:
```bash
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.
```bash
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