Installation
This page covers every way to get Aviso Server running: building from source, using Docker, or deploying to Kubernetes with Helm.
Prerequisites
Rust toolchain
Aviso is written in Rust and requires edition 2024, which means Rust 1.85 or newer. The CI always builds against the latest stable toolchain.
Install or update Rust via rustup:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Verify your version:
rustc --version
# rustc 1.85.0 (... ) or newer
System dependencies
Aviso links against OpenSSL. On Debian/Ubuntu:
sudo apt-get install -y libssl-dev pkg-config build-essential
On Fedora/RHEL:
sudo dnf install -y openssl-devel pkg-config gcc
On macOS (with Homebrew):
brew install openssl pkg-config
Build from Source
Clone the repository:
git clone https://github.com/ecmwf/aviso-server.git
cd aviso-server
Development build
Fast to compile, includes debug symbols:
cargo build
Binary location: target/debug/aviso_server
Release build
Optimized for production use:
cargo build --release
Binary location: target/release/aviso_server
Run directly
cargo run # development
cargo run --release # release
./target/release/aviso_server # pre-built binary
The server loads ./configuration/config.yaml by default.
See Configuration for all config loading options.
Docker
The repository includes a multi-stage Dockerfile that produces a minimal
distroless image.
Build the image
# Production image (distroless, minimal attack surface)
docker build --target release -t aviso-server:local .
# Debug image (Debian slim, includes bash for troubleshooting)
docker build --target debug -t aviso-server:debug .
Run with Docker
Mount your config file and expose the port:
docker run --rm \
-p 8000:8000 \
-v $(pwd)/configuration/config.yaml:/app/configuration/config.yaml:ro \
aviso-server:local
Or override settings via environment variables (no config mount needed):
docker run --rm \
-p 8000:8000 \
-e AVISOSERVER_APPLICATION__HOST=0.0.0.0 \
-e AVISOSERVER_APPLICATION__PORT=8000 \
-e AVISOSERVER_NOTIFICATION_BACKEND__KIND=in_memory \
aviso-server:local
Build targets summary
| Target | Base image | Size | Use |
|---|---|---|---|
release | distroless/cc | minimal | Production |
debug | debian:bookworm-slim | larger | Troubleshooting |
Local JetStream (Docker)
For local development with the JetStream backend, use the provided script to spin up a NATS server with JetStream enabled:
./scripts/init_nats.sh
This script:
- Generates a NATS config file in
./nats_config/ - Creates a Docker volume for persistent JetStream storage
- Starts a
nats:2-alpinecontainer onlocalhost:4222 - Waits for the server to be ready and prints a connection summary
Requires: Docker
Optional environment variables:
NATS_PORT=4222 # NATS client port (default: 4222)
ENABLE_AUTH=true # Enable token auth (default: false)
MAX_MEMORY=5GB # JetStream memory limit (default: 5GB)
MAX_STORAGE=10GB # JetStream file storage limit (default: 10GB)
Example with auth enabled:
ENABLE_AUTH=true ./scripts/init_nats.sh
The script prints the generated token at the end of its output, for example:
Authentication enabled with token: aviso_secure_token_1712345678
After the script completes, configure Aviso to connect:
Without auth (default):
notification_backend:
kind: jetstream
jetstream:
nats_url: "nats://localhost:4222"
With auth — pass the token printed by the script:
notification_backend:
kind: jetstream
jetstream:
nats_url: "nats://localhost:4222"
token: "aviso_secure_token_1712345678"
Alternatively, set the token as an environment variable (Aviso reads NATS_TOKEN automatically):
export NATS_TOKEN=aviso_secure_token_1712345678
cargo run
Kubernetes / Helm
For production Kubernetes deployments, use the official Helm chart:
- Chart repository: https://github.com/ecmwf/aviso-chart
The chart handles:
- Deployment with configurable replicas
- ConfigMap-based configuration mounting
- Service and Ingress setup
- JetStream connection settings via values
Build Documentation
Aviso docs are built with mdBook.
Install mdBook and the mermaid preprocessor:
cargo install mdbook
cargo install mdbook-mermaid
Serve docs locally with live reload:
mdbook serve docs --open
Build static output to docs/book/:
mdbook build docs
Run Tests
# Unit and integration tests (in-memory backend)
cargo test --workspace
# Include JetStream integration tests (requires running NATS)
AVISO_RUN_NATS_TESTS=1 cargo test --workspace
# Tests must run single-threaded (shared port binding)
cargo test -- --test-threads=1