Skip to main content

Docker Deployment

Run Ignixa with Docker and SQL Server.

Quick Start​

docker pull ghcr.io/brendankowitz/ignixa-fhir:release
TagDescription
releaseLatest stable release
latestLatest build from main branch

Docker Compose​

The recommended way to run Ignixa locally with SQL Server.

docker-compose.yml​

services:
ignixa:
image: ghcr.io/brendankowitz/ignixa-fhir:release
ports:
- "8080:8080"
environment:
- Tenants__Configurations__1__Storage__ConnectionString=Server=sql;Database=FHIR_R4;User Id=sa;Password=${SQL_SA_PASSWORD};TrustServerCertificate=true
depends_on:
sql:
condition: service_healthy
healthcheck:
test: curl -f http://localhost:8080/health/check || exit 1
interval: 30s
timeout: 10s
retries: 3

sql:
image: mcr.microsoft.com/mssql/server:2022-latest
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=${SQL_SA_PASSWORD}
volumes:
- sql-data:/var/opt/mssql
healthcheck:
test: /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "${SQL_SA_PASSWORD}" -C -Q "SELECT 1"
interval: 10s
retries: 10

volumes:
sql-data:

.env​

SQL_SA_PASSWORD=<your-password>

Run​

docker compose up -d

Access at http://localhost:8080/metadata.

With Azure Storage Emulator​

For bulk operations, add Azurite:

services:
ignixa:
image: ghcr.io/brendankowitz/ignixa-fhir:release
ports:
- "8080:8080"
environment:
- Tenants__Configurations__1__Storage__ConnectionString=Server=sql;Database=FHIR_R4;User Id=sa;Password=${SQL_SA_PASSWORD};TrustServerCertificate=true
- BlobStorage__Provider=Azure
- AzureBlobStorage__ConnectionString=DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite:10000/devstoreaccount1
depends_on:
sql:
condition: service_healthy

sql:
image: mcr.microsoft.com/mssql/server:2022-latest
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=${SQL_SA_PASSWORD}
volumes:
- sql-data:/var/opt/mssql
healthcheck:
test: /opt/mssql-tools18/bin/sqlcmd -S localhost -U sa -P "${SQL_SA_PASSWORD}" -C -Q "SELECT 1"
interval: 10s
retries: 10

azurite:
image: mcr.microsoft.com/azure-storage/azurite
command: azurite-blob --blobHost 0.0.0.0
volumes:
- azurite-data:/data

volumes:
sql-data:
azurite-data:

Environment Variables​

VariableDescription
Tenants__Configurations__1__Storage__ConnectionStringSQL Server connection string (required)
BlobStorage__ProviderAzure or Local
AzureBlobStorage__ConnectionStringAzure Storage connection string
ASPNETCORE_FORWARDEDHEADERS_ENABLEDSet true behind reverse proxy
SqlServer__AutomaticSchemaDeploymentEnabledAllow the server to deploy and upgrade tenant schema itself (default false). See the note in Database Schema about box SQL Server targets

See Configuration for all options.

Database Schema​

The tenant database must contain the Ignixa schema before the first request for that tenant is served. By default the server will not create it — SqlServer__AutomaticSchemaDeploymentEnabled is false, so an uninitialized or out-of-date tenant database fails the request with an error naming the remedy. See SQL Server Schema Deployment.

:::note Target platform The schema is built for Azure SQL Database, which is a distinct DacFx target platform from a box SQL Server (including the mcr.microsoft.com/mssql/server image in the compose file above). When the server runs as Production against a box SQL Server, automatic deployment is refused on platform grounds even with SqlServer__AutomaticSchemaDeploymentEnabled set to true — this is deliberate, and there is no configuration setting that overrides it. Apply the schema with the Schema Upgrade CLI using --allow-incompatible-platform instead. Non-production hosts (for example ASPNETCORE_ENVIRONMENT=Development) allow it automatically, which is what local development and the test containers rely on. :::

The schema-upgrade CLI is published into this image alongside the server, so you can act on that error from inside the running container:

docker exec -w /app ignixa dotnet Ignixa.SchemaUpgrade.Cli.dll --tenant-id 1

The container's environment variables — including the connection string you passed with -e — are inherited by docker exec, so the tool resolves the same tenant configuration the server is using. Against a box SQL Server (the mssql/server image above, or local development) add --allow-incompatible-platform: the schema targets Azure SQL Database.

See Schema Upgrade CLI for every option and its exit codes.

Health Check​

curl http://localhost:8080/health/check
# Returns: {"status":"healthy","timestamp":"...","version":"0.1.0"}