Skip to main content

First Run

Fire Arrow Server is distributed as a pre-built Docker image from the Evoleen Public ACR (Azure Container Registry):

evoleenpublicacr.azurecr.io/fire-arrow-server-azure

Images are tagged with the release version (e.g. 0.0.60) and latest.

License

Fire Arrow Server requires a valid license. Contact Evoleen to obtain one for your deployment.

The simplest way to inject a license into the Docker container is via environment variables:

docker run -p 8080:8080 \
-e FIRE_ARROW_LICENSE_SOURCE=inline \
-e FIRE_ARROW_LICENSE_CONTENT="<your-license-string>" \
-e FIRE_ARROW_LICENSE_DEPLOYMENT_ID="<your-deployment-id>" \
-e FIRE_ARROW_LICENSE_RUNTIME_ENVIRONMENT=nonprod \
evoleenpublicacr.azurecr.io/fire-arrow-server-azure:latest

Alternatively, you can configure the license in your application.yaml (see Licensing for all options).

Running the Default Image

The default image ships with an in-memory H2 database, so you can start exploring immediately without any external dependencies beyond the license:

docker run -p 8080:8080 \
-e FIRE_ARROW_LICENSE_SOURCE=inline \
-e FIRE_ARROW_LICENSE_CONTENT="<your-license-string>" \
-e FIRE_ARROW_LICENSE_DEPLOYMENT_ID="<your-deployment-id>" \
-e FIRE_ARROW_LICENSE_RUNTIME_ENVIRONMENT=nonprod \
evoleenpublicacr.azurecr.io/fire-arrow-server-azure:latest

This starts Fire Arrow Server on port 8080 with REST and GraphQL enabled. When the server is ready you'll see:

A FHIR has been lit on this server
note

The in-memory database is ephemeral — all data is lost when the container stops. For persistent storage, set up PostgreSQL as described below.

Setting Up PostgreSQL

Fire Arrow Server uses PostgreSQL as its primary data store in production. Any recent version (14+) is supported.

Installing PostgreSQL

macOS (Homebrew)
brew install postgresql@16
brew services start postgresql@16
Ubuntu / Debian
sudo apt update
sudo apt install -y postgresql
sudo systemctl enable --now postgresql
Windows

Download and run the installer from the official PostgreSQL site. The installer includes pgAdmin and a command-line shell.

You can also use a managed PostgreSQL service (e.g. Azure Database for PostgreSQL, AWS RDS, or Google Cloud SQL) — just note the host, port, and credentials for the next step.

Creating the Database

Connect to your PostgreSQL instance as a superuser (e.g. postgres) and run:

CREATE USER hapi WITH PASSWORD 'hapi';
CREATE DATABASE hapi OWNER hapi;
\c hapi
GRANT ALL ON SCHEMA public TO hapi;

This creates a user hapi with password hapi, a database hapi owned by that user, and grants the necessary permissions on the public schema.

tip

On PostgreSQL 15+ the default privileges on the public schema were tightened. The explicit GRANT ALL ON SCHEMA public TO hapi; ensures Fire Arrow Server can create and manage its tables.

Configuring the Datasource

Point Fire Arrow Server at your PostgreSQL instance by passing environment variables to the container:

docker run -p 8080:8080 \
-e FIRE_ARROW_LICENSE_SOURCE=inline \
-e FIRE_ARROW_LICENSE_CONTENT="<your-license-string>" \
-e FIRE_ARROW_LICENSE_DEPLOYMENT_ID="<your-deployment-id>" \
-e FIRE_ARROW_LICENSE_RUNTIME_ENVIRONMENT=nonprod \
-e SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/hapi \
-e SPRING_DATASOURCE_USERNAME=hapi \
-e SPRING_DATASOURCE_PASSWORD=hapi \
-e SPRING_DATASOURCE_DRIVER_CLASS_NAME=org.postgresql.Driver \
evoleenpublicacr.azurecr.io/fire-arrow-server-azure:latest

Alternatively, create an application.yaml file and mount it into the container (see Custom Configuration below):

spring:
datasource:
url: jdbc:postgresql://localhost:5432/hapi
username: hapi
password: hapi
driver-class-name: org.postgresql.Driver
note

When running the Docker container with --network host or docker-compose, localhost refers to the container itself. Use host.docker.internal (macOS/Windows) or the host's IP address to reach a PostgreSQL instance running on the Docker host.

Custom Configuration

The image supports two mechanisms for overriding the bundled defaults, listed from highest to lowest precedence:

  1. Environment variables — use Spring Boot's relaxed binding (dots become underscores, uppercase), e.g. SPRING_DATASOURCE_URL
  2. External config file — mount or copy a YAML file to /config/application.yaml

Mounting a Configuration File

You can mount a local configuration file into the container:

docker run -p 8080:8080 \
-v ./my-application.yaml:/config/application.yaml:ro \
evoleenpublicacr.azurecr.io/fire-arrow-server-azure:latest

Building a Derived Image

For production deployments, build a derived image that bakes in your configuration:

FROM evoleenpublicacr.azurecr.io/fire-arrow-server-azure:0.0.60

COPY application.yaml /config/application.yaml

This lets you pin a specific version and bundle environment-specific settings (authentication providers, database connection, authorization rules, etc.) directly into the image. Build args and environment variables can be used for values that differ between environments:

FROM evoleenpublicacr.azurecr.io/fire-arrow-server-azure:0.0.60

ARG MY_OIDC_URI
ENV MY_OIDC_URI=${MY_OIDC_URI}

COPY application.yaml /config/application.yaml

Explore the Server

Once the server is up, you have three interfaces available:

Swagger UI

Browse and test every FHIR REST endpoint interactively. See the FHIR REST API overview for details.

http://localhost:8080/fhir/swagger-ui/index.html

GraphQL

Send GraphQL queries via POST. See GraphQL API overview for query types and patterns.

POST http://localhost:8080/fhir/$graphql

You can use any HTTP client, or the built-in GraphQL explorer in the admin UI (see below).

Admin Web UI

Manage and inspect your FHIR server through a browser-based administration interface. See the Web UI overview for a full walkthrough.

http://localhost:8080/admin/

The admin UI provides a GraphQL explorer, resource browser, and configuration overview.

Next Steps

Now that the server is running, head to Minimal Configuration to learn how to configure authentication, authorization, and other features. You may also want to review: