Nomploy Nomad Packs

← All packs

automatisch v0.1.0

Automation

Automatisch — an open-source workflow automation tool (a Zapier alternative) for connecting apps and building automations without code. Deployed as an all-in-one host-networked Nomad job (PostgreSQL + Redis + web + background worker).

nomad-pack run automatisch --registry nomploy
…or one line (add registry + run)
curl -fsSL https://packs.nomploy.com/install.sh | sh -s -- automatisch

Needs nomad-pack on PATH. The script only adds the nomploy registry and runs this pack.

4 tasks http 3000db 5432redis 6379 2 volumes image automatischio/automatisch:latest tracks :latest image bumped today
Variables 22
values.hcl

Save as values.hcl, edit, then run:

nomad-pack run automatisch -f values.hcl --registry nomploy
# The name of the Nomad job.
job_name = "automatisch"

# The Nomad namespace to deploy into.
namespace = "default"

# The datacenters to deploy to.
datacenters = ["*"]

# The Automatisch container image (used for both web and worker). Pin a tag in production.
image = "automatischio/automatisch:latest"

# The PostgreSQL image for the bundled database.
postgres_image = "postgres:16"

# The Redis image for the bundled queue.
redis_image = "redis:7"

# Host port for the Automatisch web UI / API.
port = 3000

# Host port for the bundled PostgreSQL (loopback only).
db_port = 5432

# Host port for the bundled Redis (loopback only).
redis_port = 6379

# Public hostname of this Automatisch instance (used to build links and webhook URLs).
host = "localhost"

# Public protocol (http or https) used to build links and webhook URLs.
protocol = "http"

# Password for the bundled PostgreSQL. CHANGE THIS.
db_password = "automatisch_change_me"

# Key used to encrypt stored connection credentials (openssl rand -base64 36). CHANGE THIS and keep it stable.
encryption_key = "change_me_encryption_key_to_a_long_random_value"

# Secret used to sign webhook URLs (openssl rand -base64 36). CHANGE THIS and keep it stable.
webhook_secret_key = "change_me_webhook_secret_to_a_long_random_value"

# Secret used to sign sessions/tokens (openssl rand -base64 36). CHANGE THIS and keep it stable.
app_secret_key = "change_me_app_secret_to_a_long_random_value"

# Named volume for PostgreSQL data.
db_data_volume = "automatisch_db_data"

# Named volume for uploaded files, shared by web and worker.
storage_volume = "automatisch_storage"

# Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []

# Resources for the Automatisch web task.
resources = {
    cpu    = 1000
    memory = 1024
  }

# Resources for the Automatisch worker task.
worker_resources = {
    cpu    = 500
    memory = 1024
  }

# Resources for the bundled PostgreSQL task.
db_resources = {
    cpu    = 500
    memory = 512
  }

# Resources for the bundled Redis task.
redis_resources = {
    cpu    = 200
    memory = 128
  }
NameTypeDefaultDescription
job_name string
"automatisch"
The name of the Nomad job.
namespace string
"default"
The Nomad namespace to deploy into.
datacenters list
["*"]
The datacenters to deploy to.
image string
"automatischio/automatisch:latest"
The Automatisch container image (used for both web and worker). Pin a tag in production.
postgres_image string
"postgres:16"
The PostgreSQL image for the bundled database.
redis_image string
"redis:7"
The Redis image for the bundled queue.
port number
3000
Host port for the Automatisch web UI / API.
db_port number
5432
Host port for the bundled PostgreSQL (loopback only).
redis_port number
6379
Host port for the bundled Redis (loopback only).
host string
"localhost"
Public hostname of this Automatisch instance (used to build links and webhook URLs).
protocol string
"http"
Public protocol (http or https) used to build links and webhook URLs.
db_password set me string
"automatisch_change_me"
Password for the bundled PostgreSQL. CHANGE THIS.
encryption_key set me string
"change_me_encryption_key_to_a_long_random_value"
Key used to encrypt stored connection credentials (openssl rand -base64 36). CHANGE THIS and keep it stable.
webhook_secret_key set me string
"change_me_webhook_secret_to_a_long_random_value"
Secret used to sign webhook URLs (openssl rand -base64 36). CHANGE THIS and keep it stable.
app_secret_key set me string
"change_me_app_secret_to_a_long_random_value"
Secret used to sign sessions/tokens (openssl rand -base64 36). CHANGE THIS and keep it stable.
db_data_volume string
"automatisch_db_data"
Named volume for PostgreSQL data.
storage_volume string
"automatisch_storage"
Named volume for uploaded files, shared by web and worker.
constraints list
[]
Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
resources object
{
    cpu    = 1000
    memory = 1024
  }
Resources for the Automatisch web task.
worker_resources object
{
    cpu    = 500
    memory = 1024
  }
Resources for the Automatisch worker task.
db_resources object
{
    cpu    = 500
    memory = 512
  }
Resources for the bundled PostgreSQL task.
redis_resources object
{
    cpu    = 200
    memory = 128
  }
Resources for the bundled Redis task.
Back up this pack

This pack stores data in 2 Docker named volumes: automatisch_db_dataautomatisch_storage

⚠ This pack bundles a database. A cold copy of the volume can be inconsistent — for a reliable backup, dump the DB (pg_dump / mysqldump) or stop the job while backing up.

restic

# Run on the node hosting this pack. Point restic at your repo first:
#   export RESTIC_REPOSITORY="s3:https://<account>.r2.cloudflarestorage.com/<bucket>"
#   export RESTIC_PASSWORD="<repo-password>"
#   export AWS_ACCESS_KEY_ID=<key>  AWS_SECRET_ACCESS_KEY=<secret>
restic backup \
  /var/lib/docker/volumes/automatisch_db_data/_data \
  /var/lib/docker/volumes/automatisch_storage/_data

rclone (sync to S3/R2)

rclone sync /var/lib/docker/volumes/automatisch_db_data/_data backup:<bucket>/automatisch_db_data
rclone sync /var/lib/docker/volumes/automatisch_storage/_data backup:<bucket>/automatisch_storage

Paths assume the default Docker volume location (/var/lib/docker/volumes). Restore by stopping the job, restoring files into the same volume, and re-running the pack.

Readme

automatisch

Automatisch is an open-source workflow automation tool — a Zapier alternative you host yourself. Connect apps and build automations ("flows") without writing code.

This pack runs Automatisch all-in-one as a single host-networked Nomad job:

All tasks share the host network and talk over 127.0.0.1, so no mesh networking is required. Database migrations run automatically on the web task's first start.

Quick start

nomad-pack run automatisch --registry=nomploy

Then open http://<node-ip>:3000 and create the first account.

Configuration

Variable Default Notes
port 3000 Web UI / API host port
host localhost Public hostname (links, webhook URLs)
protocol http Public scheme (http / https)
db_password change me Bundled PostgreSQL password
encryption_key change me Encrypts stored credentials — keep stable
webhook_secret_key change me Signs webhook URLs — keep stable
app_secret_key change me Signs sessions/tokens — keep stable

Change every secret before deploying anywhere real, and keep encryption_key, webhook_secret_key and app_secret_key stable across deploys — rotating encryption_key makes previously stored connection credentials unreadable.

Set host/protocol to the public hostname and scheme so the webhook URLs Automatisch generates for triggers are reachable from the services you connect.

Data persists in the automatisch_db_data and automatisch_storage named volumes.