Huginn — build agents that monitor and act on your behalf: watch websites, scrape data, run workflows and send notifications (a self-hosted IFTTT/Zapier alternative). Deployed as an all-in-one host-networked Nomad service (bundled MySQL).
Needs nomad-pack on PATH. The script only adds the nomploy registry and runs this pack.
Source ↗ Project ↗ ★ 50k ⚑ Report an issue
Save as values.hcl, edit, then run:
# The name of the Nomad job.
job_name = "huginn"
# The Nomad namespace to deploy into.
namespace = "default"
# The datacenters to deploy to.
datacenters = ["*"]
# The Huginn all-in-one container image. Pin a tag in production.
image = "ghcr.io/huginn/huginn:latest"
# Host port for the Huginn web UI.
port = 3000
# Admin username seeded on first start.
admin_user = "admin"
# Admin password seeded on first start. CHANGE THIS.
admin_password = "huginn_change_me"
# Secret token used to sign cookies (128-char hex, openssl rand -hex 64). CHANGE THIS.
app_secret_token = "change_me_to_a_128_char_random_hex_secret_00000000000000000000000000000000000000000000000000000000000000000000000000000000"
# Domain/host:port used in generated links (e.g. huginn.example.com).
domain = "localhost:3000"
# Named volume for the bundled MySQL data (/var/lib/mysql).
data_volume = "huginn_data"
# Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []
# The task resources.
resources = {
cpu = 1000
memory = 1536
}
| Name | Type | Default | Description |
|---|---|---|---|
| job_name | string | "huginn" | The name of the Nomad job. |
| namespace | string | "default" | The Nomad namespace to deploy into. |
| datacenters | list | ["*"] | The datacenters to deploy to. |
| image | string | "ghcr.io/huginn/huginn:latest" | The Huginn all-in-one container image. Pin a tag in production. |
| port | number | 3000 | Host port for the Huginn web UI. |
| admin_user | string | "admin" | Admin username seeded on first start. |
| admin_password set me | string | "huginn_change_me" | Admin password seeded on first start. CHANGE THIS. |
| app_secret_token set me | string | "change_me_to_a_128_char_random_hex_secret_00000000000000000000000000000000000000000000000000000000000000000000000000000000" | Secret token used to sign cookies (128-char hex, openssl rand -hex 64). CHANGE THIS. |
| domain | string | "localhost:3000" | Domain/host:port used in generated links (e.g. huginn.example.com). |
| data_volume | string | "huginn_data" | Named volume for the bundled MySQL data (/var/lib/mysql). |
| constraints | list | [] | Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true". |
| resources | object | {
cpu = 1000
memory = 1536
} | The task resources. |
No variables match.
This pack stores data in one Docker named volume:
huginn_data
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/huginn_data/_data
rclone (sync to S3/R2)
rclone sync /var/lib/docker/volumes/huginn_data/_data backup:<bucket>/huginn_data
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.
Huginn is a system for building agents that perform automated tasks online — a self-hosted alternative to IFTTT or Zapier. Agents can watch websites for changes, scrape and transform data, poll APIs and RSS feeds, run schedules, and chain together to send emails, push notifications or trigger webhooks. Everything runs on your own server, keeping your data private.
This pack runs the Huginn all-in-one image (application plus a bundled MySQL and background workers) as a single host-networked Nomad service.
nomad-pack run huginn --registry=nomploy \
--var admin_password=$(openssl rand -hex 12) \
--var app_secret_token=$(openssl rand -hex 64) \
--var domain=huginn.example.com
Open http://<node-ip>:3000 and log in.
| Variable | Default | Description |
|---|---|---|
image |
ghcr.io/huginn/huginn:latest |
All-in-one image (pin a tag in production). |
port |
3000 |
Host port for the web UI. |
admin_user |
admin |
Seeded admin username. |
admin_password |
huginn_change_me |
Seeded admin password — change this. |
app_secret_token |
placeholder (128 hex) | Cookie-signing secret — change this. |
domain |
localhost:3000 |
Domain used in generated links. |
data_volume |
huginn_data |
Volume for the bundled MySQL (/var/lib/mysql). |
resources |
1000 MHz / 1536 MB | CPU and memory for the task. |
The bundled MySQL data persists in data_volume. For larger deployments, use the
huginn/huginn-single-process image with an external database instead.