Nomploy Nomad Packs

← All packs

timescaledb v0.1.0

Databases

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.

nomad-pack run timescaledb --registry nomploy
1 task db 5432 1 volume image timescale/timescaledb:latest-pg16
Variables 11
values.hcl

Save as values.hcl, edit, then run:

nomad-pack run timescaledb -f values.hcl --registry nomploy
# 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
  }
NameTypeDefaultDescription
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.
Readme

timescaledb

TimescaleDBPostgreSQL 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.

Usage

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;

Key variables

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.

Notes