Environment Variables
Use environment variables to parameterize Radiator configuration
- Environment Variables in Configuration
- Syntax
- Default values
- Filters
- Supported value types
- Examples
- Secrets and credentials
- Listen address and port
- Timeouts and intervals
- Database backend
- Boolean settings
- Certificate paths
- Format strings with environment variables
- Setting environment variables
- systemd
- Container deployments
- Shell
- See also
Environment Variables in Configuration
Radiator configuration files can reference process environment variables. This allows you to keep sensitive values, deployment-specific settings, and environment-dependent parameters outside the configuration files.
Environment variables are particularly useful in containerized and systemd-managed deployments where multiple Radiator instances share an identical base configuration. Each instance can be customized at startup by setting different environment variables -- for example, different listen ports, shared secrets, or backend addresses -- without duplicating or modifying the configuration files themselves.
Syntax
Reference an environment variable with the env. prefix:
env.VARIABLE_NAME
Inside quoted strings, use the %{...} placeholder syntax:
"%{env.VARIABLE_NAME}"
Default values
Use the default() filter to provide a fallback when an environment variable is not set:
env.VARIABLE_NAME | default("fallback_value")
Inside quoted strings:
"%{env.VARIABLE_NAME | default("fallback_value")}"
If the variable is not set and no default is provided, Radiator reports a configuration error at startup.
Filters
Environment variable expressions support the default() filter. The full set of filters is available only inside execution pipelines where expressions are evaluated at runtime per-request:
@execute {
modify radius.reply."Reply-Message" "%{env.WELCOME_PREFIX | uppercase} %{aaa.identity}";
modify radius.reply."Filter-Id" "%{env.FILTER_TEMPLATE | default("default") | lowercase}";
accept;
}
Supported value types
Environment variables can be used wherever Radiator accepts a value. The table below lists each value type with an example.
| Value type | Example |
|---|---|
| String | secret env.RADIUS_SECRET; |
| Number | port env.RADIUS_PORT; |
| Duration | timeout env.TIMEOUT | default("5s"); |
| Boolean | require_message_authenticator env.REQUIRE_MA; |
| IP address | ip env.LISTEN_IP; |
| IP prefix | ip env.CLIENT_NETWORK; |
| File path | filename env.CERT_PATH; |
The resolved string is parsed and validated the same way as a literal value. For example, a duration variable must contain a valid duration string such as 5s or 1m30s (see Duration Units), and a boolean variable must be true, false, on, or off.
Examples
Secrets and credentials
Keep shared secrets and passwords out of configuration files:
clients {
radius "CLIENTS" {
client "UPSTREAM" {
source {
ip 10.0.0.0/8;
}
secret env.RADIUS_SECRET;
}
}
}
Listen address and port
Parameterize network binding for different environments:
servers {
radius "AUTH" {
listen {
protocol udp;
ip env.LISTEN_IP | default("0.0.0.0");
port env.LISTEN_PORT | default(1812);
}
clients "CLIENTS";
}
}
Timeouts and intervals
Set timeouts from the environment:
servers {
radius "AUTH" {
listen {
protocol tcp;
ip 0.0.0.0;
port 1812;
timeout env.TCP_TIMEOUT | default("30s");
}
clients "CLIENTS";
}
}
Database backend
Parameterize database connection details, credentials, and pool settings:
backends {
postgres "USERS_DB" {
server "PRIMARY" {
host env.DB_HOST;
port env.DB_PORT | default(5432);
database env.DB_NAME;
username env.DB_USER;
password env.DB_PASSWORD;
connections env.DB_POOL_SIZE | default(20);
idle-timeout env.DB_IDLE_TIMEOUT | default("60s");
}
query "FIND_USER" {
statement "SELECT username, password FROM users WHERE username = $1";
bindings {
aaa.identity;
}
mapping {
user.username = username;
user.password = password;
}
}
}
}
Boolean settings
Toggle features with environment variables:
clients {
radius "CLIENTS" {
client "NAS" {
source {
ip 10.0.0.0/8;
}
secret env.RADIUS_SECRET;
require_message_authenticator env.REQUIRE_MA | default("false");
}
}
}
Certificate paths
Point to TLS certificates deployed in environment-specific locations:
certificates {
x509 "SERVER_CERT" {
filename env.TLS_CERT_PATH;
}
key "SERVER_KEY" {
filename env.TLS_KEY_PATH;
password env.TLS_KEY_PASSWORD;
}
}
Format strings with environment variables
Combine environment variables with other text using format strings:
include "%{env.CONFIG_DIR}/backends.radconf";
logging {
application {
file {
filename "%{env.LOG_DIR | default("/var/log/radiator")}/radiator-server.log";
}
}
}
Setting environment variables
systemd
Add environment variables to the Radiator systemd service using an override file:
sudo systemctl edit radiator-server.service
Add the variables under [Service]:
[Service]
Environment="RADIUS_SECRET=mysecret"
Environment="LISTEN_PORT=1812"
Environment="TLS_CERT_PATH=/var/lib/radiator/tls/certs/server.pem"
For sensitive values, use EnvironmentFile to load from a protected file:
[Service]
EnvironmentFile=/etc/radiator/env
The environment file uses KEY=value format, one variable per line:
RADIUS_SECRET=mysecret
TLS_KEY_PASSWORD=keypassword
Restrict access to the environment file:
sudo chmod 600 /etc/radiator/env
sudo chown root:root /etc/radiator/env
Container deployments
Pass environment variables with -e flags or an env file:
docker run -e RADIUS_SECRET=mysecret -e LISTEN_PORT=1812 radiator-server
Or with an environment file:
docker run --env-file /path/to/env radiator-server
Shell
Export variables before starting Radiator:
export RADIUS_SECRET=mysecret
export LISTEN_PORT=1812
radiator -c /var/lib/radiator
See also
- Built-in Environment Variables -- variables that control Radiator Server behavior at startup and runtime
- Filters -- full list of filters available in execution pipeline expressions
- High Availability Identifiers -- instance and cluster IDs settable via environment variables
- Environment Variables in Configuration
- Syntax
- Default values
- Filters
- Supported value types
- Examples
- Secrets and credentials
- Listen address and port
- Timeouts and intervals
- Database backend
- Boolean settings
- Certificate paths
- Format strings with environment variables
- Setting environment variables
- systemd
- Container deployments
- Shell
- See also
About Radiator software development security
Architecture Overview
Backend Load Balancing
Basic Installation
Built-in Environment Variables
Comparison Operators
Configuration Editor
Configuration Import and Export
Data Types
Duration Units
Environment Variables
Execution Context
Execution Pipelines
Filters
Getting a Radiator License
Health check /live and /ready
High Availability and Load Balancing
High availability identifiers
HTTP Basic Authentication
Introduction
Linux systemd support
Local AAA Backends
Log storage and formatting
Management API privilege levels
Namespaces
Password Hashing
Pipeline Directives
Probabilistic Sampling
Prometheus scraping
PROXY Protocol Support
Radiator server health and boot up logic
Radiator sizing
Radiator software releases
Rate Limiting
Rate Limiting Algorithms
Reverse Dynamic Authorization
Service Level Objective
Template Rendering CLI
Tools radiator-client
TOTP/HOTP Authentication
What is Radiator?
YubiKey Authentication
YubiKey Context Variables
About Radiator software development security
Architecture Overview
Backend Load Balancing
Basic Installation
Built-in Environment Variables
Comparison Operators
Configuration Editor
Configuration Import and Export
Data Types
Duration Units
Environment Variables
Execution Context
Execution Pipelines
Filters
Getting a Radiator License
Health check /live and /ready
High Availability and Load Balancing
High availability identifiers
HTTP Basic Authentication
Introduction
Linux systemd support
Local AAA Backends
Log storage and formatting
Management API privilege levels
Namespaces
Password Hashing
Pipeline Directives
Probabilistic Sampling
Prometheus scraping
PROXY Protocol Support
Radiator server health and boot up logic
Radiator sizing
Radiator software releases
Rate Limiting
Rate Limiting Algorithms
Reverse Dynamic Authorization
Service Level Objective
Template Rendering CLI
Tools radiator-client
TOTP/HOTP Authentication
What is Radiator?
YubiKey Authentication
YubiKey Context Variables