Onyx supports PostgreSQL 15 and later. Use the latest minor of a supported major version.
Guide
1
Create an RDS PostgreSQL instance
In the Amazon RDS console, click Create database.
- Select PostgreSQL as the engine type
- Choose Standard create for the creation method
2
Configure database settings
Settings:
- Set a Master username (for example,
postgres) - Set a strong Master password
- Choose an Instance class.
db.t4g.mediumsuits small deployments;db.m7g.largesuits production - Configure Storage size and enable autoscaling if needed
3
Configure connectivity and security
- Select your VPC and Subnet group
- Configure the VPC security group to allow port
5432from your Onyx instance or EKS nodes - Set Public access to No for production (recommended)
4
Configure Onyx
Get the Endpoint from the RDS instance details. The database name is The bundled To keep the password out of
postgres unless you set one.For Docker Compose deployments, set these variables in your .env file:relational_db container keeps running but Onyx no longer uses it.For Kubernetes deployments, disable the bundled PostgreSQL and point the chart at RDS in values.yaml:values.yaml
values.yaml,
create a Kubernetes Secret with keys username and password and set auth.postgresql.existingSecret to its name
instead of values.Onyx runs its database migrations on the next start.Optional: Verify the RDS certificate
RDS encrypts connections by default, but Onyx does not verify the server certificate unless you tell it to. To verify it, download the RDS CA bundle and set the TLS mode..env:
docker-compose.prod.yml
.env
postgresTls.
The chart mounts the CA and sets the variables for you:
values.yaml
POSTGRES_SSLMODE accepts the libpq values disable, allow, prefer, require, verify-ca, and verify-full.
Only verify-ca and verify-full check the server certificate, and both require POSTGRES_SSLROOTCERT.
Optional: Enable IAM authentication
IAM database authentication replaces the static password with short-lived IAM tokens. Onyx fetches a new token for each connection and always verifies the RDS certificate.1
Enable IAM authentication on RDS
- Open your RDS PostgreSQL instance and click Modify
- Under Database authentication, enable IAM database authentication
- Click Continue, then Apply immediately
2
Create the IAM database user
Connect to your database with the master credentials and run:
3
Configure the IAM policy
Get your Create this IAM policy. Fill in the
DbiResourceId (or DbClusterResourceId for Aurora):region, account-id, and resource-id,
then attach the policy to the role Onyx runs as: the EC2 instance role, or the EKS node role or pod identity.4
Download the RDS CA bundle
IAM authentication requires TLS. Onyx reads the CA bundle from
/app/bundle.pem inside each container.5
Configure Onyx for IAM authentication
For Docker Compose deployments, set these variables in your Then uncomment the For Kubernetes deployments, set the variables in Store the CA bundle in a Secret:Then mount it at
.env file. Leave POSTGRES_PASSWORD unset:bundle.pem volume mounts for the api_server and background services in
docker-compose.prod.yml:docker-compose.prod.yml
values.yaml and disable the bundled PostgreSQL:values.yaml
/app/bundle.pem in the API server and every worker.
Add this to the volumes and volumeMounts of each of those deployments in values.yaml:values.yaml
USE_IAM_AUTH overrides POSTGRES_SSLMODE and the other POSTGRES_SSL* variables.
Onyx ignores them while IAM authentication is on.6
Restart Onyx
Docker Compose
Kubernetes
Next Steps
Configure Authentication
Set up authentication for your Onyx deployment with OAuth, OIDC, or SAML.
More Onyx Configuration Options
Learn about all available configuration options for your Onyx deployment.