TimescaleDB — PostgreSQL with the TimescaleDB extension for fast time-series data (hypertables, continuous aggregates, compression) while keeping full SQL. Deployed as a host-networked Nomad service with a persistent Docker volume.
Save as values.hcl, edit, then run:
# The name of the Nomad job.
job_name = "timescaledb"
# The Nomad namespace to deploy into.
namespace = "default"
# The datacenters to deploy to.
datacenters = ["*"]
# The TimescaleDB container image (PostgreSQL + TimescaleDB extension). Pin a tag in production.
image = "timescale/timescaledb:latest-pg16"
# Host port the database listens on (host networking). Pick a free port on the target node.
port = 5432
# Initial database created on first boot (the timescaledb extension is available in it).
db_name = "app"
# Superuser role created on first boot.
db_user = "app"
# Password for db_user. CHANGE THIS — it is baked into the job env.
db_password = "timescale"
# Docker named volume for the data dir. A fresh volume inherits the image's data-dir ownership (uid 999), so Postgres can write it. Back it up.
data_volume = "timescaledb_data"
# Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []
# The task resources.
resources = {
cpu = 500
memory = 512
}
| Name | Type | Default | Description |
|---|---|---|---|
| job_name | string | "timescaledb" | The name of the Nomad job. |
| namespace | string | "default" | The Nomad namespace to deploy into. |
| datacenters | list | ["*"] | The datacenters to deploy to. |
| image | string | "timescale/timescaledb:latest-pg16" | The TimescaleDB container image (PostgreSQL + TimescaleDB extension). Pin a tag in production. |
| port | number | 5432 | Host port the database listens on (host networking). Pick a free port on the target node. |
| db_name | string | "app" | Initial database created on first boot (the timescaledb extension is available in it). |
| db_user | string | "app" | Superuser role created on first boot. |
| db_password key | string | "timescale" | Password for db_user. CHANGE THIS — it is baked into the job env. |
| data_volume | string | "timescaledb_data" | Docker named volume for the data dir. A fresh volume inherits the image's data-dir ownership (uid 999), so Postgres can write it. Back it up. |
| constraints | list | [] | Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true". |
| resources | object | {
cpu = 500
memory = 512
} | The task resources. |
No variables match.
TimescaleDB — PostgreSQL with the TimescaleDB extension for high-performance time-series data: hypertables, continuous aggregates, and compression, all with full SQL and the Postgres ecosystem. Host-networked Nomad service with a persistent volume. A drop-in Postgres that's tuned for metrics/events/IoT.
nomad-pack registry add nomploy github.com/Nomploy/nomad-packs
nomad-pack run timescaledb --registry nomploy --var db_password=<secret>
In nomploy: create a Compose service, type Nomad Pack, pack timescaledb, set
db_password, then Deploy. Connect at <node-ip>:5432.
Enable the extension in your database and create a hypertable:
CREATE EXTENSION IF NOT EXISTS timescaledb;
| Variable | Default | Notes |
|---|---|---|
image |
timescale/timescaledb:latest-pg16 |
Pin a tag in production. |
port |
5432 |
Host port. |
db_name / db_user / db_password |
app / app / timescale |
Created on first boot. Change the password. |
data_volume |
timescaledb_data |
Persistent data dir. Back it up. |
constraints |
[] |
Pin to a node so the local volume stays put. |
resources |
cpu 500 / mem 512 |
Raise for larger workloads. |
count at 1 — local volume, no built-in replication. Pin with
constraints.adminer/pgadmin packs manage it too.data_volume, or pg_dump.