Setting up Hatchet with an external database
Connecting to Postgres
To connect to Postgres, the hatchet-stack
chart requires the following configuration options:
hatchet-api:
env:
DATABASE_URL: "postgres://<user>:<password>@<host>:5432/<db-name>?sslmode=disable"
DATABASE_POSTGRES_HOST: "<host>"
DATABASE_POSTGRES_PORT: "5432"
DATABASE_POSTGRES_USERNAME: "<user>"
DATABASE_POSTGRES_PASSWORD: "<password>"
DATABASE_POSTGRES_DB_NAME: "<db-name>"
DATABASE_POSTGRES_SSL_MODE: "disable"
hatchet-engine:
env:
DATABASE_URL: "postgres://<user>:<password>@<host>:5432/<db-name>?sslmode=disable"
DATABASE_POSTGRES_HOST: "<host>"
DATABASE_POSTGRES_PORT: "5432"
DATABASE_POSTGRES_USERNAME: "<user>"
DATABASE_POSTGRES_PASSWORD: "<password>"
DATABASE_POSTGRES_DB_NAME: "<db-name>"
DATABASE_POSTGRES_SSL_MODE: "disable"
Mounting environment variables
Environment variables can also be mounted from secrets or configmaps via the deploymentEnvFrom
field, which corresponds to the envFrom
field in a Kubernetes deployment. For example, to mount the DATABASE_URL
environment variable from a secret, you can use the following configuration:
hatchet-api:
deploymentEnvFrom:
- secretRef:
name: hatchet-api-secrets
key: DATABASE_URL
hatchet-engine:
deploymentEnvFrom:
- secretRef:
name: hatchet-api-secrets
key: DATABASE_URL
For more information on mounting environment variables from secrets, refer to the Kubernetes documentation (opens in a new tab).
Migrations
In order for migrations to run, the database user requires permissions to write and modify schemas on a clean database. It is therefore recommended to create a separate database instance where Hatchet can run and grant permissions on this database to the Hatchet user. For example, to create a new database and user hatchet
in Postgres, run the following commands (warning: change the username/password for production usage):
create database hatchet;
create role hatchet
with
login password 'hatchet';
grant hatchet to postgres;
alter database hatchet owner to hatchet;