{"registry":"github.com/Nomploy/nomad-packs","repo":"https://github.com/Nomploy/nomad-packs","generated":"2026-09-23T08:38:42.216Z","count":121,"packs":[{"id":"actual","name":"actual","description":"Actual Budget — a fast, privacy-focused, local-first personal finance / envelope-budgeting app with a self-hosted sync server. Deployed as a host-networked Nomad service with a persistent volume for your budget data.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/actual","appUrl":"https://actualbudget.org","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run actual --registry nomploy","repo":"actualbudget/actual","stars":29097,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"actual\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Actual Budget server container image. Pin a tag in production.","type":"string","kind":"string","default":"\"actualbudget/actual-server:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Actual web app / sync server (ACTUAL_PORT).","type":"number","kind":"number","default":"5006","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Docker named volume for /data (the budget files + server DB). A prestart task chowns it to uid 1000 (the node user). Back it up.","type":"string","kind":"string","default":"\"actual_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"5006"}],"volumes":["/data"],"tasks":2,"image":"actualbudget/actual-server:latest"},"related":[],"icon":{"kind":"brand","slug":"actualbudget","hex":"#6B46C1","title":"Actual Budget"}},{"id":"adguardhome","name":"adguardhome","description":"AdGuard Home — a network-wide DNS server that blocks ads, trackers, and malware for every device on your network, with a web dashboard, filter lists, and per-client rules. Deployed as a single host-networked Nomad service with work and config volumes.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/adguardhome","appUrl":"https://adguard.com/adguard-home/overview.html","category":"Networking","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run adguardhome --registry nomploy","repo":"AdguardTeam/AdGuardHome","stars":37033,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"adguardhome\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The AdGuard Home container image. Pin a tag in production.","type":"string","kind":"string","default":"\"adguard/adguardhome:latest\"","placeholder":false,"sensitive":false},{"name":"dns_port","description":"Host port for the DNS server (TCP and UDP).","type":"number","kind":"number","default":"53","placeholder":false,"sensitive":false},{"name":"setup_port","description":"Host port for the first-run setup wizard.","type":"number","kind":"number","default":"3000","placeholder":false,"sensitive":false},{"name":"web_port","description":"Host port for the admin dashboard (choose this same value in the setup wizard).","type":"number","kind":"number","default":"80","placeholder":false,"sensitive":false},{"name":"work_volume","description":"Named volume for runtime data — query log, stats, filters (/opt/adguardhome/work).","type":"string","kind":"string","default":"\"adguardhome_work\"","placeholder":false,"sensitive":false},{"name":"conf_volume","description":"Named volume for the configuration file (/opt/adguardhome/conf).","type":"string","kind":"string","default":"\"adguardhome_conf\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"dns","port":"53"},{"name":"setup","port":"3000"},{"name":"web","port":"80"}],"volumes":["/opt/adguardhome/work","/opt/adguardhome/conf"],"tasks":1,"image":"adguard/adguardhome:latest"},"related":[],"icon":{"kind":"brand","slug":"adguard","hex":"#68BC71","title":"AdGuard"}},{"id":"adminer","name":"adminer","description":"Adminer — a full-featured database management tool in a single PHP file (PostgreSQL, MySQL/MariaDB, SQLite, and more). Deployed as a stateless host-networked Nomad service; pairs with the postgres/mariadb packs.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/adminer","appUrl":"https://www.adminer.org","category":"Dev tools","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run adminer --registry nomploy","repo":"vrana/adminer","stars":7898,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"adminer\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Adminer container image.","type":"string","kind":"string","default":"\"adminer:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Adminer web UI. Default 8083 to avoid common 8080 clashes (nginx/fleet/keycloak).","type":"number","kind":"number","default":"8083","placeholder":false,"sensitive":false},{"name":"default_server","description":"Optional DB server host:port to pre-fill on the login page (e.g. 127.0.0.1:5432 for the postgres pack). Empty = leave the field blank.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"design","description":"Optional Adminer CSS theme name (e.g. dracula, pepa-linha, nette). Empty = default theme.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"count","description":"Number of instances (Adminer is stateless, so this can be >1 if you give each a distinct port/node).","type":"number","kind":"number","default":"1","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8083"}],"volumes":[],"tasks":1,"image":"adminer:latest"},"related":[{"id":"clickhouse","name":"clickhouse"},{"id":"mariadb","name":"mariadb"},{"id":"postgres","name":"postgres"}],"icon":{"kind":"monogram","text":"A","color":"#609926"}},{"id":"alertmanager","name":"alertmanager","description":"Prometheus Alertmanager — handles alerts sent by Prometheus: deduplicates, groups, silences, and routes them to receivers (email, Slack, webhooks, ntfy/gotify, …). Deployed as a host-networked Nomad service with a rendered starter config on a persistent volume. Pairs with the monitoring pack.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/alertmanager","appUrl":"https://prometheus.io/docs/alerting/latest/alertmanager/","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run alertmanager --registry nomploy","repo":"prometheus/alertmanager","stars":8626,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"alertmanager\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Alertmanager container image. Pin a tag in production.","type":"string","kind":"string","default":"\"prom/alertmanager:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Alertmanager UI / API. Point Prometheus's alerting config at this.","type":"number","kind":"number","default":"9093","placeholder":false,"sensitive":false},{"name":"config","description":"Full alertmanager.yml contents. The default is a minimal valid config that drops alerts to a no-op receiver — replace it with your real routes/receivers (email, Slack, webhook to the ntfy/gotify packs, …).","type":"string","kind":"string","default":"<<-EOT\n    route:\n      receiver: default\n      group_by: ['alertname']\n    receivers:\n      - name: default\n  EOT","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Docker named volume for /alertmanager (silences + notification log). A fresh volume inherits the image's dir ownership (uid 65534).","type":"string","kind":"string","default":"\"alertmanager_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"9093"}],"volumes":["/alertmanager"],"tasks":1,"image":"prom/alertmanager:latest"},"related":[{"id":"gotify","name":"gotify"},{"id":"monitoring","name":"monitoring"},{"id":"ntfy","name":"ntfy"}],"icon":{"kind":"monogram","text":"A","color":"#E6522C"}},{"id":"audiobookshelf","name":"audiobookshelf","description":"Audiobookshelf — a self-hosted audiobook and podcast server with streaming apps for iOS/Android, progress sync, multi-user support, and podcast auto-download. Deployed as a single host-networked Nomad service with config, metadata, and library volumes.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/audiobookshelf","appUrl":"https://www.audiobookshelf.org","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run audiobookshelf --registry nomploy","repo":"advplyr/audiobookshelf","stars":14419,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"audiobookshelf\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Audiobookshelf container image. Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/advplyr/audiobookshelf:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Audiobookshelf web UI (PORT).","type":"number","kind":"number","default":"13378","placeholder":false,"sensitive":false},{"name":"config_volume","description":"Named volume for config and the database (/config).","type":"string","kind":"string","default":"\"audiobookshelf_config\"","placeholder":false,"sensitive":false},{"name":"metadata_volume","description":"Named volume for generated metadata — covers, cache (/metadata).","type":"string","kind":"string","default":"\"audiobookshelf_metadata\"","placeholder":false,"sensitive":false},{"name":"library_volume","description":"Named volume for your audiobooks and podcasts library (/audiobooks). Fill it with your media.","type":"string","kind":"string","default":"\"audiobookshelf_library\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"13378"}],"volumes":["/config","/metadata","/audiobooks"],"tasks":1,"image":"ghcr.io/advplyr/audiobookshelf:latest"},"related":[],"icon":{"kind":"brand","slug":"audiobookshelf","hex":"#82612C","title":"Audiobookshelf"}},{"id":"authentik","name":"authentik","description":"authentik — an open-source Identity Provider and SSO: OAuth2/OIDC, SAML, LDAP, forward-auth, MFA, and flows. Deployed all-in-one with its PostgreSQL and Redis plus the server and worker in a single host-networked Nomad job.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/authentik","appUrl":"https://goauthentik.io","category":"Identity","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run authentik --registry nomploy","repo":"goauthentik/authentik","stars":25690,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"authentik\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The authentik server/worker image (both tasks use it). Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/goauthentik/server:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the authentik web UI / API.","type":"number","kind":"number","default":"9000","placeholder":false,"sensitive":false},{"name":"secret_key","description":"AUTHENTIK_SECRET_KEY — a long random value used to sign sessions/tokens. CHANGE THIS (e.g. `openssl rand -base64 50`) and keep it stable.","type":"string","kind":"string","default":"\"CHANGE_ME_authentik_secret_key_use_openssl_rand_base64_50\"","placeholder":true,"sensitive":true},{"name":"bootstrap_password","description":"Initial password for the built-in `akadmin` user, set on first start. CHANGE THIS. Empty = you set the password via the first-run flow at /if/flow/initial-setup/.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"bootstrap_email","description":"Email for the initial akadmin user (used with bootstrap_password).","type":"string","kind":"string","default":"\"admin@example.com\"","placeholder":true,"sensitive":false},{"name":"server_resources","description":"Resources for the authentik server task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"worker_resources","description":"Resources for the authentik worker task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"postgres_image","description":"PostgreSQL image backing authentik.","type":"string","kind":"string","default":"\"postgres:16-alpine\"","placeholder":false,"sensitive":false},{"name":"db_port","description":"Host port PostgreSQL listens on. authentik connects on 127.0.0.1.","type":"number","kind":"number","default":"5432","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for the authentik Postgres user. CHANGE THIS. (DB name and user are both \"authentik\".)","type":"string","kind":"string","default":"\"authentik\"","placeholder":false,"sensitive":true},{"name":"db_data_volume","description":"Docker named volume for the Postgres data dir (users, apps, flows). Back it up.","type":"string","kind":"string","default":"\"authentik_db_data\"","placeholder":false,"sensitive":false},{"name":"redis_image","description":"Redis image (cache/queues; ephemeral, no volume).","type":"string","kind":"string","default":"\"redis:7-alpine\"","placeholder":false,"sensitive":false},{"name":"redis_port","description":"Host port Redis listens on.","type":"number","kind":"number","default":"6379","placeholder":false,"sensitive":false},{"name":"postgres_resources","description":"Resources for the PostgreSQL task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin the job to one node so the Postgres local volume stays put (single all-in-one alloc). On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"9000"},{"name":"db","port":"5432"},{"name":"redis","port":"6379"}],"volumes":["/var/lib/postgresql/data"],"tasks":4,"image":"ghcr.io/goauthentik/server:latest"},"related":[{"id":"keycloak","name":"keycloak"}],"icon":{"kind":"brand","slug":"authentik","hex":"#FD4B2D","title":"Authentik"}},{"id":"backup","name":"backup","description":"Scheduled volume backups with restic — a periodic Nomad batch job that snapshots the Docker named volumes you list to an S3-compatible repository (e.g. the seaweedfs pack), with encryption and retention/pruning.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/backup","appUrl":"https://restic.net","category":"Backup","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run backup --registry nomploy","repo":"restic/restic","stars":36198,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"backup\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The restic container image.","type":"string","kind":"string","default":"\"restic/restic:latest\"","placeholder":false,"sensitive":false},{"name":"volumes","description":"Docker named volumes to back up (e.g. [\"postgres_data\", \"gitea_data\"]). Each is mounted read-only and snapshotted. REQUIRED — an empty list backs up nothing. Named volumes are node-local, so pin this job (constraints) to the node that holds them.","type":"list(string)","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"cron","description":"Backup schedule (Nomad periodic cron). Default: daily at 03:00.","type":"string","kind":"string","default":"\"0 3 * * *\"","placeholder":false,"sensitive":false},{"name":"time_zone","description":"Time zone for the cron schedule (IANA name, e.g. Europe/Bratislava).","type":"string","kind":"string","default":"\"UTC\"","placeholder":false,"sensitive":false},{"name":"repository","description":"restic repository URL. For the seaweedfs pack: s3:http://<node-ip>:8333/<bucket>. The bucket/target must already exist. restic init runs automatically on first backup.","type":"string","kind":"string","default":"\"s3:http://127.0.0.1:8333/backups\"","placeholder":false,"sensitive":false},{"name":"restic_password","description":"Password that encrypts the restic repository. CHANGE THIS and keep it safe — without it the backups are unrecoverable.","type":"string","kind":"string","default":"\"changeme\"","placeholder":true,"sensitive":true},{"name":"access_key","description":"S3 access key for the repository (AWS_ACCESS_KEY_ID). Empty for an open S3 target.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"secret_key","description":"S3 secret key for the repository (AWS_SECRET_ACCESS_KEY).","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"keep_daily","description":"Retention: number of daily snapshots to keep.","type":"number","kind":"number","default":"7","placeholder":false,"sensitive":false},{"name":"keep_weekly","description":"Retention: number of weekly snapshots to keep.","type":"number","kind":"number","default":"4","placeholder":false,"sensitive":false},{"name":"keep_monthly","description":"Retention: number of monthly snapshots to keep.","type":"number","kind":"number","default":"6","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — REQUIRED in practice: pin to the node holding the named volumes. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[],"volumes":["/data/[[ $v ]]"],"tasks":1,"image":"restic/restic:latest"},"related":[{"id":"mariadb","name":"mariadb"},{"id":"postgres","name":"postgres"},{"id":"rest-server","name":"rest-server"},{"id":"seaweedfs","name":"seaweedfs"}],"icon":{"kind":"monogram","text":"B","color":"#D97706"}},{"id":"beszel","name":"beszel","description":"Beszel — a lightweight server monitoring hub with historical CPU/memory/disk/network stats, Docker container stats, and configurable alerts. Deployed as the host (web UI + database); add the beszel-agent on each machine you want to monitor. A simpler alternative to the monitoring pack.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/beszel","appUrl":"https://beszel.dev","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run beszel --registry nomploy","repo":"henrygd/beszel","stars":25656,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"beszel\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Beszel hub container image. Pin a tag in production.","type":"string","kind":"string","default":"\"henrygd/beszel:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Beszel hub web UI.","type":"number","kind":"number","default":"8090","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for the Beszel hub data — SQLite database and config (/beszel_data).","type":"string","kind":"string","default":"\"beszel_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8090"}],"volumes":["/beszel_data"],"tasks":1,"image":"henrygd/beszel:latest"},"related":[],"icon":{"kind":"monogram","text":"B","color":"#E6522C"}},{"id":"blackbox-exporter","name":"blackbox-exporter","description":"Prometheus Blackbox Exporter — probes endpoints over HTTP, HTTPS, TCP, DNS, and ICMP and exposes the results for Prometheus (uptime, latency, cert expiry). Deployed as a stateless host-networked Nomad service with a rendered module config. Pairs with the monitoring pack.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/blackbox-exporter","appUrl":"https://github.com/prometheus/blackbox_exporter","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run blackbox-exporter --registry nomploy","repo":"prometheus/blackbox_exporter","stars":5880,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"blackbox-exporter\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Prometheus Blackbox Exporter image. Pin a tag in production.","type":"string","kind":"string","default":"\"prom/blackbox-exporter:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the exporter (/probe and /metrics).","type":"number","kind":"number","default":"9115","placeholder":false,"sensitive":false},{"name":"config","description":"Full blackbox.yml contents (modules). The default provides http_2xx, tcp_connect, and icmp probers — extend it as needed.","type":"string","kind":"string","default":"<<-EOT\n    modules:\n      http_2xx:\n        prober: http\n        timeout: 5s\n        http:\n          preferred_ip_protocol: ip4\n      tcp_connect:\n        prober: tcp\n        timeout: 5s\n      icmp:\n        prober: icmp\n        timeout: 5s\n  EOT","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 64\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"9115"}],"volumes":[],"tasks":1,"image":"prom/blackbox-exporter:latest"},"related":[{"id":"monitoring","name":"monitoring"}],"icon":{"kind":"brand","slug":"prometheus","hex":"#E6522C","title":"Prometheus"}},{"id":"caddy","name":"caddy","description":"Caddy — a fast web server and reverse proxy with automatic HTTPS. Deployed as a host-networked Nomad service with a Caddyfile rendered from a variable and a data volume that persists ACME certificates. Edit the caddyfile variable to serve files or reverse-proxy your apps.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/caddy","appUrl":"https://caddyserver.com","category":"Networking","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run caddy --registry nomploy","repo":"caddyserver/caddy","stars":76011,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"caddy\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Caddy container image. Pin a tag in production.","type":"string","kind":"string","default":"\"caddy:2\"","placeholder":false,"sensitive":false},{"name":"http_port","description":"Host port for HTTP.","type":"number","kind":"number","default":"80","placeholder":false,"sensitive":false},{"name":"https_port","description":"Host port for HTTPS (automatic TLS when you use a domain in the Caddyfile).","type":"number","kind":"number","default":"443","placeholder":false,"sensitive":false},{"name":"caddyfile","description":"The full Caddyfile. The default responds on http_port; replace it to serve files (`root * /srv` + `file_server`) or reverse-proxy (`reverse_proxy 127.0.0.1:PORT`). For automatic HTTPS, use a real domain as the site address.","type":"string","kind":"string","default":"<<-EOT\n    :80 {\n      respond \"Caddy is running on nomploy — edit the caddyfile variable to add sites.\"\n    }\n  EOT","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for Caddy's data — ACME certificates and state (/data).","type":"string","kind":"string","default":"\"caddy_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"80"},{"name":"https","port":"443"}],"volumes":["/data"],"tasks":1,"image":"caddy:2"},"related":[],"icon":{"kind":"brand","slug":"caddy","hex":"#1F88C0","title":"Caddy"}},{"id":"changedetection","name":"changedetection","description":"changedetection.io — watch web pages for changes and get notified (price drops, restocks, content edits), with visual diffs, CSS/XPath filters, and 90+ notification targets. Deployed as a single host-networked Nomad service with a datastore volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/changedetection","appUrl":"https://changedetection.io","category":"Automation","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run changedetection --registry nomploy","repo":"dgtlmoon/changedetection.io","stars":34472,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"changedetection\"","placeholder":true,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The changedetection.io container image. Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/dgtlmoon/changedetection.io:latest\"","placeholder":true,"sensitive":false},{"name":"port","description":"Host port for the changedetection.io web UI (PORT).","type":"number","kind":"number","default":"5001","placeholder":false,"sensitive":false},{"name":"base_url","description":"Public base URL used in notification links (BASE_URL). Empty = not set.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for all configuration and watch history (/datastore).","type":"string","kind":"string","default":"\"changedetection_data\"","placeholder":true,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"5001"}],"volumes":["/datastore"],"tasks":1,"image":"ghcr.io/dgtlmoon/changedetection.io:latest"},"related":[],"icon":{"kind":"monogram","text":"C","color":"#EA4B71"}},{"id":"clickhouse","name":"clickhouse","description":"ClickHouse — a fast open-source column-oriented OLAP database for real-time analytics. Deployed as a host-networked Nomad service with a persistent Docker volume, HTTP and native ports, and a bootstrap user/database.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/clickhouse","appUrl":"https://clickhouse.com","category":"Databases","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run clickhouse --registry nomploy","repo":"ClickHouse/ClickHouse","stars":50031,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"clickhouse\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The ClickHouse server container image.","type":"string","kind":"string","default":"\"clickhouse/clickhouse-server:latest\"","placeholder":false,"sensitive":false},{"name":"http_port","description":"Host port for the HTTP interface (used by most clients, BI tools, and the play UI at /play).","type":"number","kind":"number","default":"8123","placeholder":false,"sensitive":false},{"name":"tcp_port","description":"Host port for the native TCP protocol (clickhouse-client, native drivers).","type":"number","kind":"number","default":"9000","placeholder":false,"sensitive":false},{"name":"db_name","description":"Database created on first boot.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"db_user","description":"User created on first boot.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for db_user. CHANGE THIS — empty means no password. Only applied on first boot.","type":"string","kind":"string","default":"\"clickhouse\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /var/lib/clickhouse. The image's entrypoint fixes ownership on start, so a fresh volume works. Back it up.","type":"string","kind":"string","default":"\"clickhouse_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources. ClickHouse likes memory — raise for real workloads.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 2048\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8123"},{"name":"tcp","port":"9000"}],"volumes":["/var/lib/clickhouse"],"tasks":1,"image":"clickhouse/clickhouse-server:latest"},"related":[{"id":"adminer","name":"adminer"}],"icon":{"kind":"brand","slug":"clickhouse","hex":"#FFCC01","title":"ClickHouse"}},{"id":"cloudbeaver","name":"cloudbeaver","description":"CloudBeaver — a browser-based database manager from the DBeaver team: connect to PostgreSQL, MySQL/MariaDB, SQLite, ClickHouse, and many more, and browse schemas, run SQL, and edit data. Deployed as a single host-networked Nomad service with a workspace volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/cloudbeaver","appUrl":"https://dbeaver.com/docs/cloudbeaver/","category":"Dev tools","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run cloudbeaver --registry nomploy","repo":"dbeaver/cloudbeaver","stars":5159,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"cloudbeaver\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The CloudBeaver container image. Pin a tag in production.","type":"string","kind":"string","default":"\"dbeaver/cloudbeaver:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the CloudBeaver web UI.","type":"number","kind":"number","default":"8978","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for the CloudBeaver workspace — connections, users, settings (/opt/cloudbeaver/workspace).","type":"string","kind":"string","default":"\"cloudbeaver_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8978"}],"volumes":["/opt/cloudbeaver/workspace"],"tasks":1,"image":"dbeaver/cloudbeaver:latest"},"related":[],"icon":{"kind":"brand","slug":"dbeaver","hex":"#382923","title":"DBeaver"}},{"id":"cloudflared","name":"cloudflared","description":"cloudflared — run a Cloudflare Tunnel to expose your Nomad services to the internet over an outbound-only connection, no open inbound ports or public IP required. Deployed as a stateless host-networked Nomad service driven by a tunnel token.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/cloudflared","appUrl":"https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/","category":"Networking","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run cloudflared --registry nomploy","repo":"cloudflare/cloudflared","stars":15876,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"cloudflared\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The cloudflared container image. Pin a tag in production.","type":"string","kind":"string","default":"\"cloudflare/cloudflared:latest\"","placeholder":false,"sensitive":false},{"name":"tunnel_token","description":"REQUIRED. The tunnel token from the Cloudflare Zero Trust dashboard (Networks → Tunnels → your tunnel → install token). Treat it as a secret. Configure which hostname maps to which local service (e.g. http://127.0.0.1:8080) in the dashboard.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"count","description":"Number of connector replicas (Cloudflare load-balances across them; 2+ gives HA).","type":"number","kind":"number","default":"1","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Host networking lets the connector reach services on 127.0.0.1. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[],"volumes":[],"tasks":1,"image":"cloudflare/cloudflared:latest"},"related":[],"icon":{"kind":"brand","slug":"cloudflare","hex":"#F38020","title":"Cloudflare"}},{"id":"cockroachdb","name":"cockroachdb","description":"CockroachDB — a distributed SQL database that speaks the PostgreSQL wire protocol, with strong consistency and horizontal scale. Deployed here as a single-node, insecure instance for dev/homelab, host-networked with a data volume and the built-in DB Console.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/cockroachdb","appUrl":"https://www.cockroachlabs.com/docs/","category":"Databases","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run cockroachdb --registry nomploy","repo":"cockroachdb/cockroach","stars":32484,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"cockroachdb\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The CockroachDB container image. Pin a tag in production.","type":"string","kind":"string","default":"\"cockroachdb/cockroach:latest\"","placeholder":false,"sensitive":false},{"name":"sql_port","description":"Host port for the SQL / PostgreSQL wire protocol.","type":"number","kind":"number","default":"26257","placeholder":false,"sensitive":false},{"name":"http_port","description":"Host port for the DB Console (web UI).","type":"number","kind":"number","default":"8085","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for the database store (/cockroach/cockroach-data).","type":"string","kind":"string","default":"\"cockroachdb_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 1024\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"sql","port":"26257"},{"name":"http","port":"8085"}],"volumes":["/cockroach/cockroach-data"],"tasks":1,"image":"cockroachdb/cockroach:latest"},"related":[],"icon":{"kind":"brand","slug":"cockroachlabs","hex":"#6933FF","title":"Cockroach Labs"}},{"id":"code-server","name":"code-server","description":"code-server — run VS Code in the browser, on a remote machine. Deployed as a host-networked Nomad service with a persistent Docker volume for its config, extensions, and workspace, protected by a password.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/code-server","appUrl":"https://coder.com/docs/code-server","category":"Dev tools","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run code-server --registry nomploy","repo":"coder/code-server","stars":79397,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"code-server\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The code-server container image. Pin a tag in production.","type":"string","kind":"string","default":"\"codercom/code-server:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the code-server web UI. Default 8093 to avoid common clashes.","type":"number","kind":"number","default":"8093","placeholder":false,"sensitive":false},{"name":"password","description":"Password for the web UI. CHANGE THIS — it is baked into the job env.","type":"string","kind":"string","default":"\"changeme\"","placeholder":true,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /home/coder (config, extensions, and your files). A prestart task chowns it to uid 1000 (the coder user) so code-server can write it. Back it up.","type":"string","kind":"string","default":"\"code_server_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 1024\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8093"}],"volumes":["/home/coder"],"tasks":2,"image":"codercom/code-server:latest"},"related":[],"icon":{"kind":"brand","slug":"coder","hex":"#000000","title":"Coder"}},{"id":"consul","name":"consul","description":"Consul — HashiCorp's service networking layer: a key/value store, service discovery, health checking, and DNS. Deployed here as a single-node server with the web UI, host-networked with a data volume. Handy alongside Nomad for app config and cross-service discovery.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/consul","appUrl":"https://www.consul.io","category":"Networking","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run consul --registry nomploy","repo":"hashicorp/consul","stars":30085,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"consul\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Consul container image. Pin a tag in production.","type":"string","kind":"string","default":"\"hashicorp/consul:latest\"","placeholder":false,"sensitive":false},{"name":"http_port","description":"Host port for the Consul HTTP API and web UI.","type":"number","kind":"number","default":"8500","placeholder":false,"sensitive":false},{"name":"dns_port","description":"Host port for the Consul DNS interface (TCP and UDP).","type":"number","kind":"number","default":"8600","placeholder":false,"sensitive":false},{"name":"uid","description":"UID Consul runs as. The data volume is chown'd to this at startup.","type":"number","kind":"number","default":"100","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for Consul's data — KV store, state (/consul/data).","type":"string","kind":"string","default":"\"consul_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8500"},{"name":"dns","port":"8600"}],"volumes":["/consul/data"],"tasks":2,"image":"hashicorp/consul:latest"},"related":[],"icon":{"kind":"brand","slug":"consul","hex":"#F24C53","title":"Consul"}},{"id":"couchdb","name":"couchdb","description":"Apache CouchDB — a document database with a JSON document model, an HTTP/REST API, and multi-master replication (great for offline-first / sync apps). Deployed as a host-networked Nomad service with a persistent volume and the Fauxton admin UI.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/couchdb","appUrl":"https://couchdb.apache.org","category":"Databases","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run couchdb --registry nomploy","repo":"apache/couchdb","stars":6959,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"couchdb\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Apache CouchDB container image. Pin a tag in production.","type":"string","kind":"string","default":"\"couchdb:3\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the CouchDB HTTP API (and Fauxton UI at /_utils).","type":"number","kind":"number","default":"5984","placeholder":false,"sensitive":false},{"name":"admin_user","description":"Admin username, created on first boot.","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":false},{"name":"admin_password","description":"Admin password, created on first boot. CHANGE THIS.","type":"string","kind":"string","default":"\"couchdb\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /opt/couchdb/data (the databases). A prestart task chowns it to uid 5984 (the couchdb user). Back it up.","type":"string","kind":"string","default":"\"couchdb_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"5984"}],"volumes":["/opt/couchdb/data"],"tasks":2,"image":"couchdb:3"},"related":[],"icon":{"kind":"brand","slug":"apachecouchdb","hex":"#E42528","title":"Apache CouchDB"}},{"id":"cyberchef","name":"cyberchef","description":"CyberChef — the \"cyber swiss-army knife\": a web app for encryption, encoding, compression, and data analysis with hundreds of composable operations. Deployed as a stateless host-networked Nomad service (runs client-side).","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/cyberchef","appUrl":"https://gchq.github.io/CyberChef/","category":"Dev tools","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run cyberchef --registry nomploy","repo":"gchq/CyberChef","stars":35923,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"cyberchef\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The CyberChef container image (nginx serving the built app). Pin a tag in production.","type":"string","kind":"string","default":"\"mpepping/cyberchef:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the web app. Default 8095 (the image serves on nginx internally; this pack rebinds it via a rendered nginx config).","type":"number","kind":"number","default":"8095","placeholder":false,"sensitive":false},{"name":"count","description":"Number of instances (stateless, so >1 is fine on distinct ports/nodes).","type":"number","kind":"number","default":"1","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8095"}],"volumes":[],"tasks":1,"image":"mpepping/cyberchef:latest"},"related":[],"icon":{"kind":"monogram","text":"C","color":"#609926"}},{"id":"directus","name":"directus","description":"Directus — an open-source headless CMS and data platform that wraps any SQL database with a REST/GraphQL API and a no-code admin app. Deployed all-in-one with PostgreSQL in a single host-networked Nomad job, with a persistent volume for uploads.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/directus","appUrl":"https://directus.io","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run directus --registry nomploy","repo":"directus/directus","stars":37949,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"directus\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Directus container image. Pin a tag in production.","type":"string","kind":"string","default":"\"directus/directus:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Directus app / API.","type":"number","kind":"number","default":"8055","placeholder":false,"sensitive":false},{"name":"key","description":"Unique KEY for this instance (any random string). CHANGE THIS and keep it stable.","type":"string","kind":"string","default":"\"CHANGE_ME_directus_key\"","placeholder":true,"sensitive":false},{"name":"secret","description":"SECRET used to sign tokens (any random string). CHANGE THIS and keep it stable.","type":"string","kind":"string","default":"\"CHANGE_ME_directus_secret\"","placeholder":true,"sensitive":true},{"name":"admin_email","description":"First admin email, created on first boot.","type":"string","kind":"string","default":"\"admin@example.com\"","placeholder":true,"sensitive":false},{"name":"admin_password","description":"First admin password, created on first boot. CHANGE THIS.","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":true},{"name":"public_url","description":"Public URL Directus is served at (PUBLIC_URL), e.g. https://cms.example.com. Empty = leave unset.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"uploads_volume","description":"Docker named volume for /directus/uploads (files/assets). A prestart task chowns it to uid 1000 (the node user). Back it up.","type":"string","kind":"string","default":"\"directus_uploads\"","placeholder":false,"sensitive":false},{"name":"directus_resources","description":"Resources for the Directus task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"postgres_image","description":"PostgreSQL image backing Directus.","type":"string","kind":"string","default":"\"postgres:16-alpine\"","placeholder":false,"sensitive":false},{"name":"db_port","description":"Host port PostgreSQL listens on. Directus connects on 127.0.0.1.","type":"number","kind":"number","default":"5432","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for the Directus Postgres user. CHANGE THIS. (DB name and user are both \"directus\".)","type":"string","kind":"string","default":"\"directus\"","placeholder":false,"sensitive":true},{"name":"db_data_volume","description":"Docker named volume for the Postgres data dir (collections, users, config). Back it up.","type":"string","kind":"string","default":"\"directus_db_data\"","placeholder":false,"sensitive":false},{"name":"postgres_resources","description":"Resources for the PostgreSQL task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin the job to one node so the local volumes stay put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8055"},{"name":"db","port":"5432"}],"volumes":["/directus/uploads","/var/lib/postgresql/data"],"tasks":3,"image":"directus/directus:latest"},"related":[{"id":"nocodb","name":"nocodb"}],"icon":{"kind":"brand","slug":"directus","hex":"#263238","title":"Directus"}},{"id":"docmost","name":"docmost","description":"Docmost — an open-source collaborative wiki and documentation platform (spaces, pages, real-time editing) — a self-hosted Confluence/Notion alternative. Deployed all-in-one with PostgreSQL and Redis in a single host-networked Nomad job.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/docmost","appUrl":"https://docmost.com","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run docmost --registry nomploy","repo":"docmost/docmost","stars":21763,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"docmost\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Docmost container image. Pin a tag in production.","type":"string","kind":"string","default":"\"docmost/docmost:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Docmost web app. Default 3007 to avoid other packs on 3000-3006.","type":"number","kind":"number","default":"3007","placeholder":false,"sensitive":false},{"name":"app_secret","description":"Secret key for sessions/tokens — at least 32 characters. CHANGE THIS (e.g. `openssl rand -hex 32`) and keep it stable.","type":"string","kind":"string","default":"\"CHANGE_ME_docmost_app_secret_min_32_characters_long\"","placeholder":true,"sensitive":true},{"name":"app_url","description":"Public URL Docmost is served at (e.g. https://docs.example.com), used for links/email. Empty = leave unset (uses request host).","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"docmost_resources","description":"Resources for the Docmost task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"postgres_image","description":"PostgreSQL image backing Docmost.","type":"string","kind":"string","default":"\"postgres:16-alpine\"","placeholder":false,"sensitive":false},{"name":"db_port","description":"Host port PostgreSQL listens on. Docmost connects on 127.0.0.1.","type":"number","kind":"number","default":"5432","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for the Docmost Postgres user. CHANGE THIS. (DB name and user are both \"docmost\".)","type":"string","kind":"string","default":"\"docmost\"","placeholder":false,"sensitive":true},{"name":"db_data_volume","description":"Docker named volume for the Postgres data dir (pages, spaces, users). Back it up.","type":"string","kind":"string","default":"\"docmost_db_data\"","placeholder":false,"sensitive":false},{"name":"redis_image","description":"Redis image (used for queues/websockets; ephemeral, no volume).","type":"string","kind":"string","default":"\"redis:7-alpine\"","placeholder":false,"sensitive":false},{"name":"redis_port","description":"Host port Redis listens on.","type":"number","kind":"number","default":"6379","placeholder":false,"sensitive":false},{"name":"storage_volume","description":"Docker named volume for /app/data/storage (uploaded attachments/images). A prestart task chowns it to uid 1000. Back it up.","type":"string","kind":"string","default":"\"docmost_storage\"","placeholder":false,"sensitive":false},{"name":"postgres_resources","description":"Resources for the PostgreSQL task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin the job to one node so the local volumes stay put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"3007"},{"name":"db","port":"5432"},{"name":"redis","port":"6379"}],"volumes":["/app/data/storage","/var/lib/postgresql/data"],"tasks":4,"image":"docmost/docmost:latest"},"related":[{"id":"hedgedoc","name":"hedgedoc"},{"id":"trilium","name":"trilium"},{"id":"wikijs","name":"wikijs"}],"icon":{"kind":"monogram","text":"D","color":"#0EA5E9"}},{"id":"dozzle","name":"dozzle","description":"Dozzle — a lightweight, real-time log viewer for Docker containers in your browser. Deployed as a host-networked Nomad service that reads the Docker socket; no database, no persistence.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/dozzle","appUrl":"https://dozzle.dev","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run dozzle --registry nomploy","repo":"amir20/dozzle","stars":14456,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"dozzle\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Dozzle container image. Pin a tag in production.","type":"string","kind":"string","default":"\"amir20/dozzle:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Dozzle web UI. Default 8091 to avoid common clashes.","type":"number","kind":"number","default":"8091","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Dozzle shows the containers on the node it runs on, so pin it where you want to view logs. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8091"}],"volumes":[],"tasks":1,"image":"amir20/dozzle:latest"},"related":[],"icon":{"kind":"monogram","text":"D","color":"#E6522C"}},{"id":"dragonfly","name":"dragonfly","description":"DragonflyDB — a modern, multi-threaded in-memory datastore that is drop-in compatible with the Redis and Memcached APIs, built for high throughput on a single node. Deployed as a host-networked Nomad service with snapshots on a persistent volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/dragonfly","appUrl":"https://www.dragonflydb.io","category":"Databases","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run dragonfly --registry nomploy","repo":"dragonflydb/dragonfly","stars":31666,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"dragonfly\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The DragonflyDB container image. Pin a tag in production.","type":"string","kind":"string","default":"\"docker.dragonflydb.io/dragonflydb/dragonfly:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port Dragonfly listens on (Redis/Memcached-compatible).","type":"number","kind":"number","default":"6379","placeholder":false,"sensitive":false},{"name":"password","description":"Optional password (--requirepass). Empty = no auth (fine on a trusted network).","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /data (snapshots). Dragonfly runs as root, so a fresh volume is writable. Back it up.","type":"string","kind":"string","default":"\"dragonfly_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources. Dragonfly is multi-threaded and memory-first — give it real memory (docs suggest 4GB+ to see its benefits).","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 1024\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"db","port":"6379"}],"volumes":["/data"],"tasks":1,"image":"docker.dragonflydb.io/dragonflydb/dragonfly:latest"},"related":[{"id":"redis-exporter","name":"redis-exporter"},{"id":"valkey","name":"valkey"}],"icon":{"kind":"monogram","text":"D","color":"#4169E1"}},{"id":"emqx","name":"emqx","description":"EMQX — a high-performance, scalable MQTT broker for IoT, with a web dashboard, MQTT over TCP/WebSocket, rules engine, and ACLs. Deployed as a single host-networked Nomad service with a persistent data volume. A feature-rich alternative to the mosquitto pack.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/emqx","appUrl":"https://www.emqx.io","category":"Messaging","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run emqx --registry nomploy","repo":"emqx/emqx","stars":16751,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"emqx\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The EMQX container image. Pin a tag in production.","type":"string","kind":"string","default":"\"emqx/emqx:5\"","placeholder":false,"sensitive":false},{"name":"mqtt_port","description":"Host port for MQTT over TCP.","type":"number","kind":"number","default":"1883","placeholder":false,"sensitive":false},{"name":"ws_port","description":"Host port for MQTT over WebSocket.","type":"number","kind":"number","default":"8083","placeholder":false,"sensitive":false},{"name":"dashboard_port","description":"Host port for the EMQX dashboard and REST API.","type":"number","kind":"number","default":"18083","placeholder":false,"sensitive":false},{"name":"dashboard_password","description":"Initial dashboard admin password (user \"admin\", EMQX_DASHBOARD__DEFAULT_PASSWORD). CHANGE THIS.","type":"string","kind":"string","default":"\"public\"","placeholder":false,"sensitive":true},{"name":"uid","description":"UID EMQX runs as. The data volume is chown'd to this at startup.","type":"number","kind":"number","default":"1000","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for EMQX data — retained messages, sessions, rules (/opt/emqx/data).","type":"string","kind":"string","default":"\"emqx_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"mqtt","port":"1883"},{"name":"ws","port":"8083"},{"name":"dashboard","port":"18083"}],"volumes":["/opt/emqx/data"],"tasks":2,"image":"emqx/emqx:5"},"related":[{"id":"mosquitto","name":"mosquitto"},{"id":"nats","name":"nats"}],"icon":{"kind":"monogram","text":"E","color":"#FF6600"}},{"id":"esphome","name":"esphome","description":"ESPHome — build and manage firmware for ESP32/ESP8266 devices from YAML, with a web dashboard, OTA updates, and native Home Assistant integration. Deployed host-networked (for mDNS device discovery) with a config volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/esphome","appUrl":"https://esphome.io","category":"Automation","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run esphome --registry nomploy","repo":"esphome/esphome","stars":11721,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"esphome\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The ESPHome container image. Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/esphome/esphome:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the ESPHome dashboard.","type":"number","kind":"number","default":"6052","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for your device YAML configs and build cache (/config).","type":"string","kind":"string","default":"\"esphome_config\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources (compiling firmware is CPU-heavy).","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 1024\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"6052"}],"volumes":["/config"],"tasks":1,"image":"ghcr.io/esphome/esphome:latest"},"related":[],"icon":{"kind":"brand","slug":"esphome","hex":"#000000","title":"ESPHome"}},{"id":"etcd","name":"etcd","description":"etcd — a distributed, strongly-consistent key/value store (the datastore behind Kubernetes), with a gRPC API and watch/lease primitives for config and coordination. Deployed here as a single node, host-networked with a data volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/etcd","appUrl":"https://etcd.io","category":"Databases","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run etcd --registry nomploy","repo":"etcd-io/etcd","stars":52307,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"etcd\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The etcd container image. Pin a tag in production.","type":"string","kind":"string","default":"\"quay.io/coreos/etcd:v3.5.16\"","placeholder":false,"sensitive":false},{"name":"client_port","description":"Host port for the client (gRPC/HTTP) API.","type":"number","kind":"number","default":"2379","placeholder":false,"sensitive":false},{"name":"peer_port","description":"Host port for peer communication.","type":"number","kind":"number","default":"2380","placeholder":false,"sensitive":false},{"name":"advertise_host","description":"Host/IP advertised to clients (advertise-client-urls). 127.0.0.1 works for co-located clients; set the node IP for remote clients.","type":"string","kind":"string","default":"\"127.0.0.1\"","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for the etcd data directory (/etcd-data).","type":"string","kind":"string","default":"\"etcd_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"client","port":"2379"},{"name":"peer","port":"2380"}],"volumes":["/etcd-data"],"tasks":1,"image":"quay.io/coreos/etcd:v3.5.16"},"related":[],"icon":{"kind":"brand","slug":"etcd","hex":"#419EDA","title":"etcd"}},{"id":"excalidraw","name":"excalidraw","description":"Excalidraw — a virtual hand-drawn-style whiteboard for sketching diagrams and wireframes. Deployed as a stateless host-networked Nomad service (the app runs client-side in the browser).","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/excalidraw","appUrl":"https://excalidraw.com","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run excalidraw --registry nomploy","repo":"excalidraw/excalidraw","stars":132706,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"excalidraw\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Excalidraw container image (nginx serving the built app). Pin a tag in production.","type":"string","kind":"string","default":"\"excalidraw/excalidraw:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the web app. Default 8094 (the image serves on 80 internally; this pack rebinds it via a rendered nginx config).","type":"number","kind":"number","default":"8094","placeholder":false,"sensitive":false},{"name":"count","description":"Number of instances (stateless, so >1 is fine on distinct ports/nodes).","type":"number","kind":"number","default":"1","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8094"}],"volumes":[],"tasks":1,"image":"excalidraw/excalidraw:latest"},"related":[],"icon":{"kind":"brand","slug":"excalidraw","hex":"#6965DB","title":"Excalidraw"}},{"id":"ferretdb","name":"ferretdb","description":"FerretDB — an open-source (Apache-2.0) MongoDB-compatible database built on PostgreSQL, a drop-in for apps using the MongoDB wire protocol without the SSPL licensing. Deployed all-in-one with its DocumentDB-enabled PostgreSQL in a single host-networked Nomad job.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/ferretdb","appUrl":"https://www.ferretdb.com","category":"Databases","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run ferretdb --registry nomploy","repo":"FerretDB/FerretDB","stars":11076,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"ferretdb\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The FerretDB image (v2). Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/ferretdb/ferretdb:2\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the MongoDB wire protocol — point your Mongo client/driver here.","type":"number","kind":"number","default":"27017","placeholder":false,"sensitive":false},{"name":"postgres_image","description":"The DocumentDB-enabled PostgreSQL image FerretDB v2 requires. Keep the major (17/16/15) matched to a tested FerretDB version; pin a full tag in production.","type":"string","kind":"string","default":"\"ghcr.io/ferretdb/postgres-documentdb:17\"","placeholder":false,"sensitive":false},{"name":"db_port","description":"Host port PostgreSQL listens on. FerretDB connects on 127.0.0.1.","type":"number","kind":"number","default":"5432","placeholder":false,"sensitive":false},{"name":"db_user","description":"PostgreSQL user FerretDB connects as — this is also the MongoDB username your clients use.","type":"string","kind":"string","default":"\"ferretdb\"","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for db_user (also the MongoDB password). CHANGE THIS.","type":"string","kind":"string","default":"\"ferretdb\"","placeholder":false,"sensitive":true},{"name":"db_data_volume","description":"Docker named volume for the Postgres data dir (all your documents). A fresh volume inherits the image's data-dir ownership. Back it up.","type":"string","kind":"string","default":"\"ferretdb_db_data\"","placeholder":false,"sensitive":false},{"name":"ferretdb_resources","description":"Resources for the FerretDB task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"postgres_resources","description":"Resources for the PostgreSQL (DocumentDB) task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 1024\n  }","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin the job to one node so the Postgres local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"mongo","port":"27017"},{"name":"db","port":"5432"}],"volumes":["/var/lib/postgresql/data"],"tasks":2,"image":"ghcr.io/ferretdb/ferretdb:2"},"related":[],"icon":{"kind":"brand","slug":"ferretdb","hex":"#042133","title":"FerretDB"}},{"id":"filebrowser","name":"filebrowser","description":"File Browser — a clean web file manager for a directory: browse, upload, download, edit, share, and manage files and users from the browser. Deployed as a single host-networked Nomad service with a files volume and a database volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/filebrowser","appUrl":"https://filebrowser.org","category":"Dev tools","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run filebrowser --registry nomploy","repo":"filebrowser/filebrowser","stars":35940,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"filebrowser\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The File Browser container image. Pin a tag in production.","type":"string","kind":"string","default":"\"filebrowser/filebrowser:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the File Browser web UI (FB_PORT).","type":"number","kind":"number","default":"8103","placeholder":false,"sensitive":false},{"name":"files_volume","description":"Named volume for the files being managed, mounted at /srv.","type":"string","kind":"string","default":"\"filebrowser_files\"","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for the File Browser database (/database/filebrowser.db lives here).","type":"string","kind":"string","default":"\"filebrowser_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8103"}],"volumes":["/srv","/database"],"tasks":1,"image":"filebrowser/filebrowser:latest"},"related":[{"id":"syncthing","name":"syncthing"}],"icon":{"kind":"monogram","text":"F","color":"#609926"}},{"id":"flame","name":"flame","description":"Flame — a self-hosted startpage / application dashboard you manage entirely from the browser: add apps and bookmarks, group them, pin favourites, and see live weather. Deployed as a single host-networked Nomad service on SQLite with a data volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/flame","appUrl":"https://github.com/pawelmalak/flame","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run flame --registry nomploy","repo":"pawelmalak/flame","stars":6550,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"flame\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Flame container image. Pin a tag in production.","type":"string","kind":"string","default":"\"pawelmalak/flame:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Flame dashboard.","type":"number","kind":"number","default":"5005","placeholder":false,"sensitive":false},{"name":"password","description":"Password for edit/admin mode (PASSWORD). Viewing is public; changes require this.","type":"string","kind":"string","default":"\"changeme-please\"","placeholder":true,"sensitive":true},{"name":"data_volume","description":"Named volume for the SQLite database and uploads (/app/data).","type":"string","kind":"string","default":"\"flame_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"5005"}],"volumes":["/app/data"],"tasks":1,"image":"pawelmalak/flame:latest"},"related":[],"icon":{"kind":"monogram","text":"F","color":"#0EA5E9"}},{"id":"fleet","name":"fleet","description":"Fleet — open-source device management (osquery-based) for laptops and servers. Deployed all-in-one: the Fleet server plus its required MySQL and Redis, in a single host-networked Nomad job, with DB migrations run automatically on start.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/fleet","appUrl":"https://fleetdm.com","category":"Device management","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run fleet --registry nomploy","repo":"fleetdm/fleet","stars":6903,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"fleet\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"fleet_image","description":"The Fleet server container image. Pin a tag in production — Fleet runs schema migrations on start, so an unexpected major upgrade migrates your DB irreversibly.","type":"string","kind":"string","default":"\"fleetdm/fleet:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for Fleet's UI/API (host networking). Fleet serves plain HTTP here (TLS off) — front it with Traefik/a load balancer for TLS. Pick a free port on the target node.","type":"number","kind":"number","default":"8080","placeholder":false,"sensitive":false},{"name":"server_tls","description":"Whether Fleet terminates TLS itself. Keep false and terminate TLS at your reverse proxy; set true only if you also supply cert/key files into the container.","type":"bool","kind":"bool","default":"false","placeholder":false,"sensitive":false},{"name":"server_private_key","description":"Optional 32-byte base64 key (openssl rand -base64 32) enabling MDM features and encrypted storage of secrets. Leave empty for basic osquery fleet management. If set, it is baked into the job env — treat it as a secret.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"fleet_resources","description":"Resources for the Fleet server task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"mysql_image","description":"MySQL image. Fleet requires MySQL 8.0.x (8.0.44+ recommended).","type":"string","kind":"string","default":"\"mysql:8\"","placeholder":false,"sensitive":false},{"name":"mysql_port","description":"Host port MySQL listens on. Fleet connects to it on 127.0.0.1 (same host network namespace).","type":"number","kind":"number","default":"3306","placeholder":false,"sensitive":false},{"name":"mysql_database","description":"Database name Fleet uses.","type":"string","kind":"string","default":"\"fleet\"","placeholder":false,"sensitive":false},{"name":"mysql_username","description":"Application DB user Fleet connects as.","type":"string","kind":"string","default":"\"fleet\"","placeholder":false,"sensitive":false},{"name":"mysql_password","description":"Password for the application DB user. CHANGE THIS.","type":"string","kind":"string","default":"\"fleet\"","placeholder":false,"sensitive":true},{"name":"mysql_root_password","description":"MySQL root password (used to bootstrap the instance). CHANGE THIS.","type":"string","kind":"string","default":"\"fleet\"","placeholder":false,"sensitive":true},{"name":"mysql_data_volume","description":"Docker named volume for /var/lib/mysql. A fresh volume inherits the image's data-dir ownership so MySQL can write it. This is the only truly critical state — back it up.","type":"string","kind":"string","default":"\"fleet_mysql_data\"","placeholder":false,"sensitive":false},{"name":"mysql_resources","description":"Resources for the MySQL task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 1024\n  }","placeholder":false,"sensitive":false},{"name":"redis_image","description":"Redis image. Fleet supports Redis 6/7.","type":"string","kind":"string","default":"\"redis:7\"","placeholder":false,"sensitive":false},{"name":"redis_port","description":"Host port Redis listens on. Fleet connects to it on 127.0.0.1 (same host network namespace).","type":"number","kind":"number","default":"6379","placeholder":false,"sensitive":false},{"name":"redis_data_volume","description":"Docker named volume for Redis /data (AOF). Redis holds only live/query state — losing it is not fatal, but persisting avoids a cold cache on reschedule.","type":"string","kind":"string","default":"\"fleet_redis_data\"","placeholder":false,"sensitive":false},{"name":"redis_resources","description":"Resources for the Redis task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 256\n  }","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin the job to one node so the MySQL/Redis local volumes stay put (this pack runs a single all-in-one alloc). On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8080"},{"name":"mysql","port":"3306"},{"name":"redis","port":"6379"}],"volumes":["/var/lib/mysql","/data"],"tasks":3,"image":""},"related":[],"icon":{"kind":"monogram","text":"F","color":"#0891B2"}},{"id":"flowise","name":"flowise","description":"Flowise — a low-code, drag-and-drop builder for LLM apps and agents: chains, RAG pipelines, tools, and chatbots you can embed or call via API. Deployed as a single host-networked Nomad service with a data volume and optional app login. Pairs with the ollama and qdrant/weaviate packs.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/flowise","appUrl":"https://flowiseai.com","category":"AI","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run flowise --registry nomploy","repo":"FlowiseAI/Flowise","stars":55478,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"flowise\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Flowise container image. Pin a tag in production.","type":"string","kind":"string","default":"\"flowiseai/flowise:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Flowise web UI / API (PORT).","type":"number","kind":"number","default":"3014","placeholder":false,"sensitive":false},{"name":"username","description":"App login username (FLOWISE_USERNAME). Empty for both = no login (open).","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":false},{"name":"password","description":"App login password (FLOWISE_PASSWORD). CHANGE THIS.","type":"string","kind":"string","default":"\"changeme-please\"","placeholder":true,"sensitive":true},{"name":"data_volume","description":"Named volume for the Flowise database, API keys, and stored files (/root/.flowise).","type":"string","kind":"string","default":"\"flowise_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 1024\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"3014"}],"volumes":["/root/.flowise"],"tasks":1,"image":"flowiseai/flowise:latest"},"related":[],"icon":{"kind":"monogram","text":"F","color":"#6366F1"}},{"id":"gatus","name":"gatus","description":"Gatus — an automated, developer-oriented health/uptime dashboard: define endpoints and conditions in YAML and get a status page plus alerting. Deployed as a stateless host-networked Nomad service with its config rendered from variables.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/gatus","appUrl":"https://gatus.io","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run gatus --registry nomploy","repo":"TwiN/gatus","stars":12135,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"gatus\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Gatus container image. Pin a tag in production.","type":"string","kind":"string","default":"\"twinproduction/gatus:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Gatus status page (its config web.port is set to this).","type":"number","kind":"number","default":"8101","placeholder":false,"sensitive":false},{"name":"endpoints","description":"The `endpoints:` section of the Gatus config (YAML). Replace the default sample with the services you want to monitor. See https://gatus.io for the full syntax (groups, conditions, alerts).","type":"string","kind":"string","default":"<<-EOT\n      - name: example\n        url: \"https://example.org\"\n        interval: 60s\n        conditions:\n          - \"[STATUS] == 200\"\n  EOT","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Gatus probes from the node it runs on. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8101"}],"volumes":[],"tasks":1,"image":"twinproduction/gatus:latest"},"related":[{"id":"ntfy","name":"ntfy"},{"id":"uptime-kuma","name":"uptime-kuma"}],"icon":{"kind":"monogram","text":"G","color":"#E6522C"}},{"id":"ghost","name":"ghost","description":"Ghost — a professional publishing platform for blogs, newsletters, and paid memberships. Deployed all-in-one with its MySQL 8 database in a single host-networked Nomad job, with a persistent volume for content (themes, images, data).","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/ghost","appUrl":"https://ghost.org","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run ghost --registry nomploy","repo":null,"stars":null,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"ghost\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Ghost container image. Pin a tag in production.","type":"string","kind":"string","default":"\"ghost:5-alpine\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for Ghost (site + /ghost admin).","type":"number","kind":"number","default":"2368","placeholder":false,"sensitive":false},{"name":"url","description":"Public URL Ghost is served at (e.g. https://blog.example.com). Ghost bakes this into links, so set it correctly. Empty = http://localhost:<port>.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"content_volume","description":"Docker named volume for /var/lib/ghost/content (themes, images, uploads). A prestart task chowns it to uid 1000 (the node user). Back it up.","type":"string","kind":"string","default":"\"ghost_content\"","placeholder":false,"sensitive":false},{"name":"ghost_resources","description":"Resources for the Ghost task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"mysql_image","description":"MySQL image. Ghost 5 requires MySQL 8 (MariaDB is not supported).","type":"string","kind":"string","default":"\"mysql:8\"","placeholder":false,"sensitive":false},{"name":"db_port","description":"Host port MySQL listens on. Ghost connects on 127.0.0.1.","type":"number","kind":"number","default":"3306","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for Ghost's MySQL user. CHANGE THIS. (DB name and user are both \"ghost\".)","type":"string","kind":"string","default":"\"ghost\"","placeholder":false,"sensitive":true},{"name":"db_root_password","description":"MySQL root password. CHANGE THIS.","type":"string","kind":"string","default":"\"ghost\"","placeholder":false,"sensitive":true},{"name":"db_data_volume","description":"Docker named volume for /var/lib/mysql (the database — posts, members, settings). Back it up.","type":"string","kind":"string","default":"\"ghost_db_data\"","placeholder":false,"sensitive":false},{"name":"mysql_resources","description":"Resources for the MySQL task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 1024\n  }","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin the job to one node so the local volumes stay put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"2368"},{"name":"db","port":"3306"}],"volumes":["/var/lib/ghost/content","/var/lib/mysql"],"tasks":3,"image":"ghost:5-alpine"},"related":[],"icon":{"kind":"brand","slug":"ghost","hex":"#15171A","title":"Ghost"}},{"id":"gitea","name":"gitea","description":"Gitea — a lightweight, self-hosted Git service (repos, issues, PRs, CI actions, and a built-in container/package registry). Deployed as a host-networked Nomad service with a persistent Docker volume; uses the bundled SQLite database for a zero-dependency single-node setup.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/gitea","appUrl":"https://about.gitea.com","category":"Dev tools","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run gitea --registry nomploy","repo":"go-gitea/gitea","stars":58125,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"gitea\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Gitea container image.","type":"string","kind":"string","default":"\"gitea/gitea:1\"","placeholder":false,"sensitive":false},{"name":"http_port","description":"Host port for the Gitea web UI / HTTP git. Default 3002 to avoid the nomploy panel (:3000) and grafana (:3001).","type":"number","kind":"number","default":"3002","placeholder":false,"sensitive":false},{"name":"ssh_port","description":"Host port for git-over-SSH. Gitea both listens on this and advertises it in SSH clone URLs. Avoid 22 (usually the host's own sshd).","type":"number","kind":"number","default":"2222","placeholder":false,"sensitive":false},{"name":"root_url","description":"Public base URL Gitea is served at (e.g. https://git.example.com/), used to build HTTP clone links and webhooks. Empty = Gitea derives it from the request host.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"ssh_domain","description":"Hostname advertised in SSH clone URLs (e.g. git.example.com). Empty = Gitea uses the request host.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Docker named volume for /data (repositories, SQLite DB, config, LFS). All of Gitea's state — back it up. Gitea's entrypoint fixes ownership on start, so a fresh volume works.","type":"string","kind":"string","default":"\"gitea_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"3002"},{"name":"ssh","port":"2222"}],"volumes":["/data"],"tasks":1,"image":"gitea/gitea:1"},"related":[{"id":"verdaccio","name":"verdaccio"},{"id":"zot","name":"zot"}],"icon":{"kind":"brand","slug":"gitea","hex":"#609926","title":"Gitea"}},{"id":"glance","name":"glance","description":"Glance — a self-hosted dashboard that puts your feeds, weather, markets, calendars, server stats, and service widgets on one fast, config-driven page. Deployed as a stateless host-networked Nomad service with its config rendered from variables.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/glance","appUrl":"https://github.com/glanceapp/glance","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run glance --registry nomploy","repo":"glanceapp/glance","stars":37170,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"glance\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Glance container image. Pin a tag in production.","type":"string","kind":"string","default":"\"glanceapp/glance:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Glance dashboard.","type":"number","kind":"number","default":"3009","placeholder":false,"sensitive":false},{"name":"pages","description":"The `pages:` section of the Glance config (YAML). Replace the default with your own pages/columns/widgets — see the Glance docs for the full widget set (RSS, weather, monitor, docker, etc.).","type":"string","kind":"string","default":"<<-EOT\n      - name: Home\n        columns:\n          - size: full\n            widgets:\n              - type: clock\n              - type: search\n  EOT","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"3009"}],"volumes":[],"tasks":1,"image":"glanceapp/glance:latest"},"related":[],"icon":{"kind":"monogram","text":"G","color":"#0EA5E9"}},{"id":"glances","name":"glances","description":"Glances — a cross-platform system monitor with a live web dashboard (CPU, memory, disk, network, processes, and Docker containers) and a REST API. Deployed as a stateless host-networked Nomad service. A lightweight at-a-glance view; pair with the monitoring pack for full Prometheus history.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/glances","appUrl":"https://nicolargo.github.io/glances/","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run glances --registry nomploy","repo":"nicolargo/glances","stars":33656,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"glances\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Glances container image (use a *-full tag for the web UI + all sensors). Pin a tag in production.","type":"string","kind":"string","default":"\"nicolargo/glances:latest-full\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Glances web dashboard / REST API.","type":"number","kind":"number","default":"61208","placeholder":false,"sensitive":false},{"name":"docker_socket","description":"Mount the Docker socket read-only so Glances shows per-container stats.","type":"bool","kind":"bool","default":"true","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"61208"}],"volumes":[],"tasks":1,"image":"nicolargo/glances:latest-full"},"related":[],"icon":{"kind":"monogram","text":"G","color":"#E6522C"}},{"id":"gotify","name":"gotify","description":"Gotify — a simple self-hosted server for sending and receiving push notifications, with a web UI, REST API, and Android app. Deployed as a host-networked Nomad service with a persistent Docker volume for its database and uploads.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/gotify","appUrl":"https://gotify.net","category":"Notifications","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run gotify --registry nomploy","repo":"gotify/server","stars":15952,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"gotify\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Gotify server container image. Pin a tag in production.","type":"string","kind":"string","default":"\"gotify/server:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Gotify web UI / API (GOTIFY_SERVER_PORT).","type":"number","kind":"number","default":"8099","placeholder":false,"sensitive":false},{"name":"admin_user","description":"Initial admin username, created on first boot.","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":false},{"name":"admin_password","description":"Initial admin password. CHANGE THIS. Only applied on first boot (empty data volume).","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /app/data (SQLite database, uploaded images, plugins). Gotify runs as root, so a fresh volume is writable. Back it up.","type":"string","kind":"string","default":"\"gotify_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8099"}],"volumes":["/app/data"],"tasks":1,"image":"gotify/server:latest"},"related":[{"id":"alertmanager","name":"alertmanager"},{"id":"ntfy","name":"ntfy"}],"icon":{"kind":"monogram","text":"G","color":"#EAB308"}},{"id":"grafana","name":"grafana","description":"Grafana — the open observability platform for dashboards and visualization, deployed as a host-networked Nomad service with a persistent Docker volume for its database and plugins.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/grafana","appUrl":"https://grafana.com","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run grafana --registry nomploy","repo":"grafana/grafana","stars":76869,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"grafana\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Grafana container image.","type":"string","kind":"string","default":"\"grafana/grafana:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port Grafana listens on (host networking). Default 3001 to avoid clashing with the nomploy panel on :3000. Pick a free port on the target node.","type":"number","kind":"number","default":"3001","placeholder":false,"sensitive":false},{"name":"count","description":"Number of instances (keep at 1 — the default SQLite DB is local-disk).","type":"number","kind":"number","default":"1","placeholder":false,"sensitive":false},{"name":"admin_user","description":"Initial admin username.","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":false},{"name":"admin_password","description":"Initial admin password. CHANGE THIS — it is baked into the job env.","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":true},{"name":"root_url","description":"Public URL Grafana believes it is served at (set when fronting it with a domain, e.g. https://grafana.example.com). Empty = use the host:port.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Docker named volume for /var/lib/grafana (SQLite DB, plugins). A fresh volume inherits the image's dir ownership (uid 472), so Grafana can write it.","type":"string","kind":"string","default":"\"grafana_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — e.g. pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"3001"}],"volumes":["/var/lib/grafana"],"tasks":1,"image":"grafana/grafana:latest"},"related":[{"id":"influxdb","name":"influxdb"},{"id":"loki","name":"loki"},{"id":"monitoring","name":"monitoring"},{"id":"victoriametrics","name":"victoriametrics"}],"icon":{"kind":"brand","slug":"grafana","hex":"#F46800","title":"Grafana"}},{"id":"grist","name":"grist","description":"Grist — a modern relational spreadsheet: the flexibility of a spreadsheet with the structure of a database, plus Python formulas, dashboards, and access rules. Deployed as a single host-networked Nomad service on SQLite with a persistent /persist volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/grist","appUrl":"https://www.getgrist.com","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run grist --registry nomploy","repo":"gristlabs/grist-core","stars":11849,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"grist\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Grist container image. Pin a tag in production.","type":"string","kind":"string","default":"\"gristlabs/grist:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Grist web UI (PORT).","type":"number","kind":"number","default":"8484","placeholder":false,"sensitive":false},{"name":"session_secret","description":"Secret used to sign session cookies (GRIST_SESSION_SECRET). Set a long random value.","type":"string","kind":"string","default":"\"change-me-to-a-long-random-session-secret\"","placeholder":true,"sensitive":true},{"name":"default_email","description":"Email of the initial admin/owner (GRIST_DEFAULT_EMAIL). Empty = not set.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"app_home_url","description":"Public base URL Grist is served at (APP_HOME_URL), e.g. http://<host>:8484. Empty = not set.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for Grist documents and its SQLite metadata (/persist).","type":"string","kind":"string","default":"\"grist_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8484"}],"volumes":["/persist"],"tasks":1,"image":"gristlabs/grist:latest"},"related":[{"id":"nocodb","name":"nocodb"}],"icon":{"kind":"monogram","text":"G","color":"#0EA5E9"}},{"id":"headscale","name":"headscale","description":"Headscale — an open-source, self-hosted implementation of the Tailscale control server. Run your own coordination server for a WireGuard-based mesh VPN, with no dependency on Tailscale's SaaS. Deployed as a host-networked Nomad service with a rendered config and a SQLite data volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/headscale","appUrl":"https://headscale.net","category":"Networking","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run headscale --registry nomploy","repo":"juanfont/headscale","stars":44054,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"headscale\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Headscale container image. Pin a tag in production (config schema is version-specific).","type":"string","kind":"string","default":"\"headscale/headscale:0.23.0\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Headscale HTTP/control endpoint.","type":"number","kind":"number","default":"8080","placeholder":false,"sensitive":false},{"name":"metrics_port","description":"Host port for the Prometheus metrics endpoint.","type":"number","kind":"number","default":"9099","placeholder":false,"sensitive":false},{"name":"server_url","description":"The public URL clients connect to (SERVER_URL). MUST be reachable by your devices, e.g. http://<node-ip>:8080 or https://vpn.example.com. Empty = http://localhost:<port> (dev only).","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"base_domain","description":"MagicDNS base domain for the tailnet.","type":"string","kind":"string","default":"\"headscale.internal\"","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for the SQLite database and generated keys (/var/lib/headscale).","type":"string","kind":"string","default":"\"headscale_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8080"},{"name":"metrics","port":"9099"}],"volumes":["/var/lib/headscale"],"tasks":1,"image":"headscale/headscale:0.23.0"},"related":[],"icon":{"kind":"monogram","text":"H","color":"#06B6D4"}},{"id":"hedgedoc","name":"hedgedoc","description":"HedgeDoc — real-time, collaborative Markdown notes in the browser (shared editing, presentation mode, diagrams). Deployed as an all-in-one host-networked Nomad job: a PostgreSQL sidecar plus the HedgeDoc app with a persistent uploads volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/hedgedoc","appUrl":"https://hedgedoc.org","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run hedgedoc --registry nomploy","repo":"hedgedoc/hedgedoc","stars":7441,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"hedgedoc\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The HedgeDoc container image. Pin a tag in production.","type":"string","kind":"string","default":"\"quay.io/hedgedoc/hedgedoc:1.10.3\"","placeholder":false,"sensitive":false},{"name":"postgres_image","description":"The PostgreSQL image for the bundled database.","type":"string","kind":"string","default":"\"postgres:16-alpine\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the HedgeDoc web UI (CMD_PORT).","type":"number","kind":"number","default":"3011","placeholder":false,"sensitive":false},{"name":"db_port","description":"Host port for the co-located PostgreSQL.","type":"number","kind":"number","default":"5432","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for the HedgeDoc PostgreSQL user.","type":"string","kind":"string","default":"\"hedgedoc\"","placeholder":false,"sensitive":true},{"name":"domain","description":"Domain (or host IP) HedgeDoc is reached at (CMD_DOMAIN), no protocol/port. Empty = localhost. Set this to the real host/domain so real-time sync and links work for remote clients.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"allow_anonymous","description":"Allow anonymous (no-login) note creation and editing (CMD_ALLOW_ANONYMOUS).","type":"bool","kind":"bool","default":"true","placeholder":false,"sensitive":false},{"name":"uid","description":"UID HedgeDoc runs as. The uploads volume is chown'd to this at startup.","type":"number","kind":"number","default":"10000","placeholder":false,"sensitive":false},{"name":"uploads_volume","description":"Named volume for uploaded images/files (/hedgedoc/public/uploads).","type":"string","kind":"string","default":"\"hedgedoc_uploads\"","placeholder":false,"sensitive":false},{"name":"db_data_volume","description":"Named volume for PostgreSQL data (/var/lib/postgresql/data). Holds all notes.","type":"string","kind":"string","default":"\"hedgedoc_db_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"Resources for the HedgeDoc app task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"postgres_resources","description":"Resources for the PostgreSQL task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"3011"},{"name":"db","port":"5432"}],"volumes":["/hedgedoc/public/uploads","/var/lib/postgresql/data"],"tasks":3,"image":"quay.io/hedgedoc/hedgedoc:1.10.3"},"related":[{"id":"docmost","name":"docmost"},{"id":"wikijs","name":"wikijs"}],"icon":{"kind":"monogram","text":"H","color":"#0EA5E9"}},{"id":"home-assistant","name":"home-assistant","description":"Home Assistant — the leading open-source home-automation platform: control lights, sensors, media, and thousands of integrations from one dashboard, with local control and privacy. Deployed host-networked (needed for device discovery/mDNS) with a config volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/home-assistant","appUrl":"https://www.home-assistant.io","category":"Automation","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run home-assistant --registry nomploy","repo":"home-assistant/core","stars":91107,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"home-assistant\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Home Assistant container image. Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/home-assistant/home-assistant:stable\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Home Assistant web UI. Home Assistant listens on 8123 by default; to change it, set http.server_port in configuration.yaml after first boot and update this to match.","type":"number","kind":"number","default":"8123","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for Home Assistant config, database, and integrations (/config).","type":"string","kind":"string","default":"\"home_assistant_config\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 1024\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8123"}],"volumes":["/config"],"tasks":1,"image":"ghcr.io/home-assistant/home-assistant:stable"},"related":[],"icon":{"kind":"brand","slug":"homeassistant","hex":"#18BCF2","title":"Home Assistant"}},{"id":"homebox","name":"homebox","description":"HomeBox — a simple, fast home inventory and organization system: track your belongings, locations, labels, warranties, and attachments, with QR labels and CSV import. Deployed as a single host-networked Nomad service on SQLite with a persistent data volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/homebox","appUrl":"https://homebox.software","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run homebox --registry nomploy","repo":"sysadminsmedia/homebox","stars":7365,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"homebox\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The HomeBox container image. Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/sysadminsmedia/homebox:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the HomeBox web UI (HBOX_WEB_PORT).","type":"number","kind":"number","default":"7745","placeholder":false,"sensitive":false},{"name":"allow_registration","description":"Allow new users to self-register (HBOX_OPTIONS_ALLOW_REGISTRATION).","type":"bool","kind":"bool","default":"true","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for the SQLite database and uploads (/data).","type":"string","kind":"string","default":"\"homebox_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"7745"}],"volumes":["/data"],"tasks":1,"image":"ghcr.io/sysadminsmedia/homebox:latest"},"related":[],"icon":{"kind":"monogram","text":"H","color":"#0EA5E9"}},{"id":"homepage","name":"homepage","description":"Homepage — a modern, fully static, highly customizable application dashboard with service/bookmark tiles and live widgets. Deployed as a host-networked Nomad service with a persistent Docker volume for its YAML config.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/homepage","appUrl":"https://gethomepage.dev","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run homepage --registry nomploy","repo":"gethomepage/homepage","stars":32814,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"homepage\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Homepage container image. Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/gethomepage/homepage:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the dashboard. Default 3006 to avoid the panel (3000), grafana (3001), gitea (3002), metabase (3003), umami (3005).","type":"number","kind":"number","default":"3006","placeholder":false,"sensitive":false},{"name":"allowed_hosts","description":"REQUIRED by recent Homepage for security: comma-separated Host header values it will serve (e.g. \"home.example.com\" or \"<node-ip>:3006\"). If wrong/unset you'll get a \"host validation\" error page.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Docker named volume for /app/config (settings.yaml, services.yaml, bookmarks.yaml, widgets.yaml). Homepage seeds defaults here on first run. Runs as root, so a fresh volume is writable.","type":"string","kind":"string","default":"\"homepage_config\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"3006"}],"volumes":["/app/config"],"tasks":1,"image":"ghcr.io/gethomepage/homepage:latest"},"related":[],"icon":{"kind":"brand","slug":"homepage","hex":"#009BD5","title":"Homepage"}},{"id":"influxdb","name":"influxdb","description":"InfluxDB 2 — a purpose-built time-series database with a built-in UI, dashboards, and the Flux/InfluxQL query languages. Great for metrics and IoT sensor data. Deployed as a host-networked Nomad service that initializes an admin/org/bucket on first boot, with a persistent volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/influxdb","appUrl":"https://www.influxdata.com","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run influxdb --registry nomploy","repo":"influxdata/influxdb","stars":31755,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"influxdb\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The InfluxDB 2 container image. Pin a tag in production.","type":"string","kind":"string","default":"\"influxdb:2\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the InfluxDB HTTP API + UI.","type":"number","kind":"number","default":"8086","placeholder":false,"sensitive":false},{"name":"admin_user","description":"Initial admin username (created on first boot in setup mode).","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":false},{"name":"admin_password","description":"Initial admin password (min 8 chars). CHANGE THIS.","type":"string","kind":"string","default":"\"changeme123\"","placeholder":true,"sensitive":true},{"name":"org","description":"Initial organization name.","type":"string","kind":"string","default":"\"nomploy\"","placeholder":false,"sensitive":false},{"name":"bucket","description":"Initial bucket name.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"admin_token","description":"Initial admin API token (clients authenticate with it). CHANGE THIS — treat it as a secret.","type":"string","kind":"string","default":"\"changeme-admin-token\"","placeholder":true,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /var/lib/influxdb2 (time-series data + config). InfluxDB runs as root, so a fresh volume is writable. Back it up.","type":"string","kind":"string","default":"\"influxdb_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8086"}],"volumes":["/var/lib/influxdb2"],"tasks":1,"image":"influxdb:2"},"related":[{"id":"grafana","name":"grafana"}],"icon":{"kind":"brand","slug":"influxdb","hex":"#22ADF6","title":"InfluxDB"}},{"id":"it-tools","name":"it-tools","description":"IT Tools — a handy collection of offline developer/ops utilities in one web app (encoders, converters, generators, formatters, network helpers, and more). Deployed as a stateless host-networked Nomad service.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/it-tools","appUrl":"https://it-tools.tech","category":"Dev tools","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run it-tools --registry nomploy","repo":"CorentinTh/it-tools","stars":40670,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"it-tools\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The IT Tools container image (nginx serving the built app). Pin a tag in production.","type":"string","kind":"string","default":"\"corentinth/it-tools:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the web app. Default 8092 to avoid common clashes (the image serves on 80 internally; this pack rebinds it via a rendered nginx config).","type":"number","kind":"number","default":"8092","placeholder":false,"sensitive":false},{"name":"count","description":"Number of instances (stateless, so >1 is fine on distinct ports/nodes).","type":"number","kind":"number","default":"1","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8092"}],"volumes":[],"tasks":1,"image":"corentinth/it-tools:latest"},"related":[],"icon":{"kind":"monogram","text":"I","color":"#609926"}},{"id":"jaeger","name":"jaeger","description":"Jaeger — open-source distributed tracing: collect, store, and visualize traces to debug latency and dependencies across services. Deployed as the all-in-one image (in-memory storage) as a stateless host-networked Nomad service with an OTLP collector and the query UI.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/jaeger","appUrl":"https://www.jaegertracing.io","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run jaeger --registry nomploy","repo":"jaegertracing/jaeger","stars":23232,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"jaeger\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Jaeger all-in-one container image. Pin a tag in production.","type":"string","kind":"string","default":"\"jaegertracing/all-in-one:latest\"","placeholder":false,"sensitive":false},{"name":"ui_port","description":"Host port for the Jaeger query web UI.","type":"number","kind":"number","default":"16686","placeholder":false,"sensitive":false},{"name":"otlp_grpc_port","description":"Host port for the OTLP gRPC receiver — point your OpenTelemetry SDK/collector exporter here.","type":"number","kind":"number","default":"4317","placeholder":false,"sensitive":false},{"name":"otlp_http_port","description":"Host port for the OTLP HTTP receiver.","type":"number","kind":"number","default":"4318","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources. In-memory traces use RAM — raise memory to keep more.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"ui","port":"16686"},{"name":"otlp_grpc","port":"4317"},{"name":"otlp_http","port":"4318"}],"volumes":[],"tasks":1,"image":"jaegertracing/all-in-one:latest"},"related":[],"icon":{"kind":"brand","slug":"jaeger","hex":"#66CFE3","title":"Jaeger"}},{"id":"jellyfin","name":"jellyfin","description":"Jellyfin — the free software media system: stream your own movies, TV, music, and photos to any device with no tracking and no fees. Deployed as a single host-networked Nomad service with config and cache volumes and a read-only media volume you fill with your library.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/jellyfin","appUrl":"https://jellyfin.org","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run jellyfin --registry nomploy","repo":"jellyfin/jellyfin","stars":57423,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"jellyfin\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The official Jellyfin container image. Pin a tag in production.","type":"string","kind":"string","default":"\"jellyfin/jellyfin:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Jellyfin web UI (Jellyfin's default HTTP port; to use another you must also change it in Dashboard -> Networking after first run).","type":"number","kind":"number","default":"8096","placeholder":false,"sensitive":false},{"name":"config_volume","description":"Named volume for Jellyfin config, metadata, and its database (/config).","type":"string","kind":"string","default":"\"jellyfin_config\"","placeholder":false,"sensitive":false},{"name":"cache_volume","description":"Named volume for transcoding/cache data (/cache).","type":"string","kind":"string","default":"\"jellyfin_cache\"","placeholder":false,"sensitive":false},{"name":"media_volume","description":"Named volume mounted read-only at /media — fill it with your library.","type":"string","kind":"string","default":"\"jellyfin_media\"","placeholder":false,"sensitive":false},{"name":"published_server_url","description":"Optional public URL clients should use (JELLYFIN_PublishedServerUrl). Empty = auto.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources (raise cpu for software transcoding).","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 2000\n    memory = 1024\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8096"}],"volumes":["/config","/cache","/media"],"tasks":1,"image":"jellyfin/jellyfin:latest"},"related":[{"id":"navidrome","name":"navidrome"},{"id":"photoprism","name":"photoprism"}],"icon":{"kind":"brand","slug":"jellyfin","hex":"#00A4DC","title":"Jellyfin"}},{"id":"jellyseerr","name":"jellyseerr","description":"Jellyseerr — a request-management and media-discovery app for Jellyfin/Plex/Emby: users browse and request movies and TV, and it integrates with Sonarr/Radarr to fulfil them. Deployed as a single host-networked Nomad service with a config volume. Pairs with the jellyfin pack.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/jellyseerr","appUrl":"https://docs.jellyseerr.dev","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run jellyseerr --registry nomploy","repo":"fallenbagel/jellyseerr","stars":12664,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"jellyseerr\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Jellyseerr container image. Pin a tag in production.","type":"string","kind":"string","default":"\"fallenbagel/jellyseerr:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Jellyseerr web UI (PORT).","type":"number","kind":"number","default":"5055","placeholder":false,"sensitive":false},{"name":"log_level","description":"Log verbosity (LOG_LEVEL): debug, info, warn, error.","type":"string","kind":"string","default":"\"info\"","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for Jellyseerr config and its SQLite database (/app/config).","type":"string","kind":"string","default":"\"jellyseerr_config\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"5055"}],"volumes":["/app/config"],"tasks":1,"image":"fallenbagel/jellyseerr:latest"},"related":[],"icon":{"kind":"monogram","text":"J","color":"#0EA5E9"}},{"id":"keycloak","name":"keycloak","description":"Keycloak — open-source identity and access management (SSO, OIDC, SAML, social login, user federation). Deployed all-in-one with its PostgreSQL database in a single host-networked Nomad job; Keycloak runs DB migrations automatically on start.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/keycloak","appUrl":"https://www.keycloak.org","category":"Identity","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run keycloak --registry nomploy","repo":"keycloak/keycloak","stars":36954,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"keycloak\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Keycloak container image (26.x). Pin a tag in production.","type":"string","kind":"string","default":"\"quay.io/keycloak/keycloak:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for Keycloak's HTTP listener. Serves plain HTTP — front it with a reverse proxy (Traefik) for TLS.","type":"number","kind":"number","default":"8080","placeholder":false,"sensitive":false},{"name":"hostname","description":"Public hostname/URL Keycloak is served at (e.g. https://auth.example.com), set when fronting it with a domain. Empty = hostname-strict is off and Keycloak infers it from the request (fine for IP access / testing).","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"admin_user","description":"Bootstrap admin username, created on first start with an empty database.","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":false},{"name":"admin_password","description":"Bootstrap admin password. CHANGE THIS. Only applied on first start (empty DB); rotate it in the console afterwards.","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":true},{"name":"keycloak_resources","description":"Resources for the Keycloak (JVM) task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 1024\n  }","placeholder":false,"sensitive":false},{"name":"postgres_image","description":"PostgreSQL image backing Keycloak.","type":"string","kind":"string","default":"\"postgres:16-alpine\"","placeholder":false,"sensitive":false},{"name":"db_port","description":"Host port PostgreSQL listens on. Keycloak connects on 127.0.0.1 (same host network namespace).","type":"number","kind":"number","default":"5432","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for the Keycloak database user. CHANGE THIS. (DB name and user are both \"keycloak\".)","type":"string","kind":"string","default":"\"keycloak\"","placeholder":false,"sensitive":true},{"name":"db_data_volume","description":"Docker named volume for the Postgres data dir. This is the critical state (realms, users, clients) — back it up. A fresh volume inherits the image's data-dir ownership so Postgres can write it.","type":"string","kind":"string","default":"\"keycloak_db_data\"","placeholder":false,"sensitive":false},{"name":"postgres_resources","description":"Resources for the PostgreSQL task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin the job to one node so the Postgres local volume stays put (single all-in-one alloc). On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8080"},{"name":"db","port":"5432"}],"volumes":["/var/lib/postgresql/data"],"tasks":2,"image":"quay.io/keycloak/keycloak:latest"},"related":[{"id":"authentik","name":"authentik"}],"icon":{"kind":"brand","slug":"keycloak","hex":"#4D4D4D","title":"Keycloak"}},{"id":"linkwarden","name":"linkwarden","description":"Linkwarden — a self-hosted bookmark manager that also archives a full copy of each link (screenshot, PDF, readable text) so pages survive link rot. Organize with collections, tags, and sharing. Deployed as an all-in-one host-networked Nomad job: a PostgreSQL sidecar plus the Linkwarden app.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/linkwarden","appUrl":"https://linkwarden.app","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run linkwarden --registry nomploy","repo":"linkwarden/linkwarden","stars":19826,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"linkwarden\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Linkwarden container image. Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/linkwarden/linkwarden:latest\"","placeholder":false,"sensitive":false},{"name":"postgres_image","description":"The PostgreSQL image for the bundled database.","type":"string","kind":"string","default":"\"postgres:16-alpine\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Linkwarden web UI (PORT).","type":"number","kind":"number","default":"3012","placeholder":false,"sensitive":false},{"name":"db_port","description":"Host port for the co-located PostgreSQL.","type":"number","kind":"number","default":"5432","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for the Linkwarden PostgreSQL user.","type":"string","kind":"string","default":"\"linkwarden\"","placeholder":false,"sensitive":true},{"name":"base_url","description":"Public base URL Linkwarden is served at (used for NEXTAUTH_URL). Empty = http://localhost:<port>. Set this to the real host/domain.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"nextauth_secret","description":"Secret used to sign auth sessions (NEXTAUTH_SECRET). Generate a long random value (openssl rand -base64 32).","type":"string","kind":"string","default":"\"change-me-to-a-long-random-secret\"","placeholder":true,"sensitive":true},{"name":"data_volume","description":"Named volume for archived link snapshots — screenshots, PDFs (/data/data).","type":"string","kind":"string","default":"\"linkwarden_data\"","placeholder":false,"sensitive":false},{"name":"db_data_volume","description":"Named volume for PostgreSQL data (/var/lib/postgresql/data). Holds all bookmarks.","type":"string","kind":"string","default":"\"linkwarden_db_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"Resources for the Linkwarden app task (link archiving runs a headless browser).","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 1024\n  }","placeholder":false,"sensitive":false},{"name":"postgres_resources","description":"Resources for the PostgreSQL task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"3012"},{"name":"db","port":"5432"}],"volumes":["/var/lib/postgresql/data","/data/data"],"tasks":2,"image":"ghcr.io/linkwarden/linkwarden:latest"},"related":[],"icon":{"kind":"monogram","text":"L","color":"#0EA5E9"}},{"id":"lobe-chat","name":"lobe-chat","description":"Lobe Chat — a polished, open-source AI chat UI supporting many providers (OpenAI, Anthropic, Ollama, and more), with plugins, vision, and text-to-image. Deployed as a stateless host-networked Nomad service; point it at the ollama pack or any API. Chats are stored in the browser.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/lobe-chat","appUrl":"https://lobehub.com","category":"AI","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run lobe-chat --registry nomploy","repo":"lobehub/lobe-chat","stars":82774,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"lobe-chat\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Lobe Chat container image. Pin a tag in production.","type":"string","kind":"string","default":"\"lobehub/lobe-chat:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Lobe Chat web UI (PORT).","type":"number","kind":"number","default":"3210","placeholder":false,"sensitive":false},{"name":"ollama_proxy_url","description":"OpenAI-compatible Ollama endpoint (OLLAMA_PROXY_URL). Defaults to the co-located ollama pack. Empty to disable.","type":"string","kind":"string","default":"\"http://127.0.0.1:11434/v1\"","placeholder":false,"sensitive":false},{"name":"openai_api_key","description":"Optional OpenAI API key (OPENAI_API_KEY).","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"access_code","description":"Optional password gate for the app (ACCESS_CODE). Empty = no gate.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"3210"}],"volumes":[],"tasks":1,"image":"lobehub/lobe-chat:latest"},"related":[],"icon":{"kind":"monogram","text":"L","color":"#6366F1"}},{"id":"loki","name":"loki","description":"Grafana Loki — log aggregation — deployed all-in-one with a Grafana Alloy shipper that tails this node's Docker container logs and pushes them to Loki. Single host-networked Nomad job, filesystem storage on a persistent volume. Pairs with the monitoring pack.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/loki","appUrl":"https://grafana.com/oss/loki/","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run loki --registry nomploy","repo":"grafana/loki","stars":28935,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"loki\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"loki_image","description":"Loki image. Loki's config schema is version-sensitive — pin a 3.x tag in production (this pack's config targets Loki 3.x: tsdb + schema v13).","type":"string","kind":"string","default":"\"grafana/loki:latest\"","placeholder":false,"sensitive":false},{"name":"alloy_image","description":"Grafana Alloy image (the log shipper; the modern replacement for the now-EOL Promtail).","type":"string","kind":"string","default":"\"grafana/alloy:latest\"","placeholder":false,"sensitive":false},{"name":"loki_port","description":"Host port for Loki's HTTP API (push + query). Add this as a Grafana datasource.","type":"number","kind":"number","default":"3100","placeholder":false,"sensitive":false},{"name":"alloy_port","description":"Host port for Alloy's HTTP UI/debug endpoint.","type":"number","kind":"number","default":"12345","placeholder":false,"sensitive":false},{"name":"enable_alloy","description":"Run the bundled Alloy shipper that tails this node's Docker container logs into Loki. Set false to run Loki alone and push from your own agents.","type":"bool","kind":"bool","default":"true","placeholder":false,"sensitive":false},{"name":"retention","description":"How long Loki keeps logs, as a Go duration in HOURS (e.g. 168h = 7d, 336h = 14d, 720h = 30d). The compactor enforces it.","type":"string","kind":"string","default":"\"336h\"","placeholder":false,"sensitive":false},{"name":"loki_data_volume","description":"Docker named volume for /loki (chunks + index). Loki runs as uid 10001; a prestart task chowns the volume so it can write.","type":"string","kind":"string","default":"\"loki_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin the job to one node so the local volume stays put and Alloy tails that node's containers. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"loki_resources","description":"Resources for the Loki task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"alloy_resources","description":"Resources for the Alloy shipper task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"loki","port":"3100"},{"name":"alloy","port":"12345"}],"volumes":["/loki"],"tasks":3,"image":""},"related":[{"id":"grafana","name":"grafana"},{"id":"monitoring","name":"monitoring"},{"id":"seaweedfs","name":"seaweedfs"},{"id":"victoria-logs","name":"victoria-logs"}],"icon":{"kind":"monogram","text":"L","color":"#E6522C"}},{"id":"mailpit","name":"mailpit","description":"Mailpit — a developer SMTP server that captures outgoing email into a web UI instead of delivering it, so you can test transactional mail safely. Deployed as a stateless host-networked Nomad service (messages held in memory).","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/mailpit","appUrl":"https://mailpit.axllent.org","category":"Dev tools","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run mailpit --registry nomploy","repo":"axllent/mailpit","stars":10417,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"mailpit\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Mailpit container image. Pin a tag in production.","type":"string","kind":"string","default":"\"axllent/mailpit:latest\"","placeholder":false,"sensitive":false},{"name":"ui_port","description":"Host port for the Mailpit web UI / API.","type":"number","kind":"number","default":"8025","placeholder":false,"sensitive":false},{"name":"smtp_port","description":"Host port for the SMTP listener — point your app's SMTP client here.","type":"number","kind":"number","default":"1025","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"ui","port":"8025"},{"name":"smtp","port":"1025"}],"volumes":[],"tasks":1,"image":"axllent/mailpit:latest"},"related":[],"icon":{"kind":"monogram","text":"M","color":"#609926"}},{"id":"mariadb","name":"mariadb","description":"MariaDB — the community-developed, fully open-source MySQL-compatible database — deployed as a host-networked Nomad service with a persistent Docker volume for its data directory.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/mariadb","appUrl":"https://mariadb.org","category":"Databases","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run mariadb --registry nomploy","repo":"MariaDB/server","stars":8262,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"mariadb\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The MariaDB container image.","type":"string","kind":"string","default":"\"mariadb:11\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port MariaDB listens on (host networking, so it's reachable at <node-ip>:<port>). Pick a free port on the target node.","type":"number","kind":"number","default":"3306","placeholder":false,"sensitive":false},{"name":"count","description":"Number of instances (keep at 1 — local-disk storage, no built-in replication).","type":"number","kind":"number","default":"1","placeholder":false,"sensitive":false},{"name":"db_name","description":"Initial database created on first boot.","type":"string","kind":"string","default":"\"app\"","placeholder":false,"sensitive":false},{"name":"db_user","description":"Application user created on first boot (granted rights on db_name).","type":"string","kind":"string","default":"\"app\"","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for db_user. CHANGE THIS — it is baked into the job env. Consider a Nomad variable / Vault instead of a default.","type":"string","kind":"string","default":"\"mariadb\"","placeholder":false,"sensitive":true},{"name":"root_password","description":"Password for the MariaDB root user. CHANGE THIS.","type":"string","kind":"string","default":"\"mariadb\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /var/lib/mysql, so the database survives restarts and reschedules. A fresh volume inherits the image's data-dir ownership (uid 999), so MariaDB can write it.","type":"string","kind":"string","default":"\"mariadb_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — e.g. pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"db","port":"3306"}],"volumes":["/var/lib/mysql"],"tasks":1,"image":"mariadb:11"},"related":[{"id":"adminer","name":"adminer"},{"id":"backup","name":"backup"},{"id":"mysqld-exporter","name":"mysqld-exporter"}],"icon":{"kind":"brand","slug":"mariadb","hex":"#003545","title":"MariaDB"}},{"id":"mattermost","name":"mattermost","description":"Mattermost — a self-hosted team chat and collaboration platform (a Slack alternative) with channels, threads, file sharing, and integrations. Deployed as an all-in-one host-networked Nomad job: a PostgreSQL sidecar plus the Mattermost Team Edition server with config/data/plugins volumes.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/mattermost","appUrl":"https://mattermost.com","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run mattermost --registry nomploy","repo":"mattermost/mattermost","stars":39157,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"mattermost\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Mattermost Team Edition container image. Pin a tag in production.","type":"string","kind":"string","default":"\"mattermost/mattermost-team-edition:latest\"","placeholder":false,"sensitive":false},{"name":"postgres_image","description":"The PostgreSQL image for the bundled database.","type":"string","kind":"string","default":"\"postgres:16-alpine\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Mattermost web UI / API.","type":"number","kind":"number","default":"8065","placeholder":false,"sensitive":false},{"name":"db_port","description":"Host port for the co-located PostgreSQL.","type":"number","kind":"number","default":"5432","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for the Mattermost PostgreSQL user.","type":"string","kind":"string","default":"\"mattermost\"","placeholder":false,"sensitive":true},{"name":"site_url","description":"Public URL Mattermost is served at (MM_SERVICESETTINGS_SITEURL). Empty = http://localhost:<port>. Set this to the real host/domain.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"uid","description":"UID Mattermost runs as. The mounted dirs are chown'd to this at startup.","type":"number","kind":"number","default":"2000","placeholder":false,"sensitive":false},{"name":"config_volume","description":"Named volume for Mattermost config (/mattermost/config).","type":"string","kind":"string","default":"\"mattermost_config\"","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for uploaded files (/mattermost/data).","type":"string","kind":"string","default":"\"mattermost_data\"","placeholder":false,"sensitive":false},{"name":"plugins_volume","description":"Named volume for plugins (/mattermost/plugins).","type":"string","kind":"string","default":"\"mattermost_plugins\"","placeholder":false,"sensitive":false},{"name":"client_plugins_volume","description":"Named volume for client plugin bundles (/mattermost/client/plugins).","type":"string","kind":"string","default":"\"mattermost_client_plugins\"","placeholder":false,"sensitive":false},{"name":"db_data_volume","description":"Named volume for PostgreSQL data (/var/lib/postgresql/data). Holds all messages.","type":"string","kind":"string","default":"\"mattermost_db_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"Resources for the Mattermost app task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 1024\n  }","placeholder":false,"sensitive":false},{"name":"postgres_resources","description":"Resources for the PostgreSQL task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8065"},{"name":"db","port":"5432"}],"volumes":["/mattermost/config","/mattermost/data","/mattermost/plugins","/mattermost/client/plugins","/var/lib/postgresql/data"],"tasks":3,"image":"mattermost/mattermost-team-edition:latest"},"related":[],"icon":{"kind":"brand","slug":"mattermost","hex":"#0058CC","title":"Mattermost"}},{"id":"meilisearch","name":"meilisearch","description":"Meilisearch — a fast, typo-tolerant open-source search engine with instant full-text search and a simple REST API. Deployed as a host-networked Nomad service with a persistent Docker volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/meilisearch","appUrl":"https://www.meilisearch.com","category":"Search","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run meilisearch --registry nomploy","repo":"meilisearch/meilisearch","stars":59377,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"meilisearch\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Meilisearch container image. Pin a tag in production.","type":"string","kind":"string","default":"\"getmeili/meilisearch:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Meilisearch HTTP API.","type":"number","kind":"number","default":"7700","placeholder":false,"sensitive":false},{"name":"master_key","description":"Master API key. Set it (>= 16 bytes) to run in production mode with authentication. Leave empty to run in development mode — OPEN, no auth (fine only on a trusted network). Baked into the job env; treat it as a secret.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /meili_data (the search database). Meilisearch runs as root, so a fresh volume is writable. Back it up.","type":"string","kind":"string","default":"\"meilisearch_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources. Raise memory for large indexes.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"7700"}],"volumes":["/meili_data"],"tasks":1,"image":"getmeili/meilisearch:latest"},"related":[{"id":"typesense","name":"typesense"}],"icon":{"kind":"brand","slug":"meilisearch","hex":"#FF5CAA","title":"Meilisearch"}},{"id":"memcached","name":"memcached","description":"Memcached — a high-performance, in-memory key/value cache for speeding up dynamic web apps by alleviating database load. Deployed as a host-networked Nomad service; purely in-memory, no persistence.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/memcached","appUrl":"https://memcached.org","category":"Databases","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run memcached --registry nomploy","repo":"memcached/memcached","stars":14286,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"memcached\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Memcached container image.","type":"string","kind":"string","default":"\"memcached:alpine\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port Memcached listens on.","type":"number","kind":"number","default":"11211","placeholder":false,"sensitive":false},{"name":"memory_limit","description":"Max memory for the cache, in MB (memcached -m). Items are evicted (LRU) when full.","type":"number","kind":"number","default":"256","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources. Give memory headroom above memory_limit.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 320\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"cache","port":"11211"}],"volumes":[],"tasks":1,"image":"memcached:alpine"},"related":[],"icon":{"kind":"monogram","text":"M","color":"#4169E1"}},{"id":"memos","name":"memos","description":"Memos — a lightweight, privacy-first note-taking / knowledge base for quick memos with Markdown, tags, and a public/private sharing model. Deployed as a single host-networked Nomad service on SQLite with a persistent data volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/memos","appUrl":"https://www.usememos.com","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run memos --registry nomploy","repo":"usememos/memos","stars":63268,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"memos\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Memos container image. Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/usememos/memos:stable\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Memos web UI (MEMOS_PORT).","type":"number","kind":"number","default":"5230","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for the SQLite database and uploads (/var/opt/memos).","type":"string","kind":"string","default":"\"memos_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"5230"}],"volumes":["/var/opt/memos"],"tasks":1,"image":"ghcr.io/usememos/memos:stable"},"related":[],"icon":{"kind":"monogram","text":"M","color":"#0EA5E9"}},{"id":"metabase","name":"metabase","description":"Metabase — open-source business intelligence: dashboards, questions, and SQL over your databases. Deployed all-in-one with its application PostgreSQL in a single host-networked Nomad job (rather than the unsafe embedded H2). Point it at your data sources — e.g. the postgres/mariadb/clickhouse packs.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/metabase","appUrl":"https://www.metabase.com","category":"Analytics","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run metabase --registry nomploy","repo":"metabase/metabase","stars":49383,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"metabase\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Metabase container image. Pin a tag in production.","type":"string","kind":"string","default":"\"metabase/metabase:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Metabase web UI. Default 3003 to avoid the nomploy panel (:3000), grafana (:3001) and gitea (:3002).","type":"number","kind":"number","default":"3003","placeholder":false,"sensitive":false},{"name":"site_url","description":"Public URL Metabase is served at (e.g. https://bi.example.com), set when fronting it with a domain. Empty = leave unset.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"encryption_key","description":"Optional key used to encrypt stored data-source credentials at rest (MB_ENCRYPTION_SECRET_KEY). Recommended for production; treat it as a secret and keep it stable (changing it orphans encrypted secrets). Empty = unset.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"metabase_resources","description":"Resources for the Metabase (JVM) task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 2048\n  }","placeholder":false,"sensitive":false},{"name":"postgres_image","description":"PostgreSQL image backing Metabase's application data.","type":"string","kind":"string","default":"\"postgres:16-alpine\"","placeholder":false,"sensitive":false},{"name":"db_port","description":"Host port PostgreSQL listens on. Metabase connects on 127.0.0.1 (same host network namespace).","type":"number","kind":"number","default":"5432","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for the Metabase application DB user. CHANGE THIS. (DB name and user are both \"metabase\".)","type":"string","kind":"string","default":"\"metabase\"","placeholder":false,"sensitive":true},{"name":"db_data_volume","description":"Docker named volume for the Postgres data dir. This is Metabase's state (dashboards, questions, users, data-source configs) — back it up. A fresh volume inherits the image's data-dir ownership.","type":"string","kind":"string","default":"\"metabase_db_data\"","placeholder":false,"sensitive":false},{"name":"postgres_resources","description":"Resources for the PostgreSQL task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin the job to one node so the Postgres local volume stays put (single all-in-one alloc). On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"3003"},{"name":"db","port":"5432"}],"volumes":["/var/lib/postgresql/data"],"tasks":2,"image":"metabase/metabase:latest"},"related":[],"icon":{"kind":"brand","slug":"metabase","hex":"#509EE3","title":"Metabase"}},{"id":"miniflux","name":"miniflux","description":"Miniflux — a minimalist, fast, opinionated self-hosted RSS/Atom feed reader with a clean UI and REST API. Deployed all-in-one with its PostgreSQL database in a single host-networked Nomad job; runs migrations and creates the admin on first start.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/miniflux","appUrl":"https://miniflux.app","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run miniflux --registry nomploy","repo":"miniflux/v2","stars":9724,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"miniflux\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Miniflux container image. Pin a tag in production.","type":"string","kind":"string","default":"\"miniflux/miniflux:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Miniflux web UI / API.","type":"number","kind":"number","default":"8100","placeholder":false,"sensitive":false},{"name":"admin_user","description":"Admin username, created on first boot.","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":false},{"name":"admin_password","description":"Admin password, created on first boot. CHANGE THIS (Miniflux requires at least 6 characters).","type":"string","kind":"string","default":"\"changeme\"","placeholder":true,"sensitive":true},{"name":"base_url","description":"Public base URL Miniflux is served at (e.g. https://reader.example.com/). Empty = leave unset.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"postgres_image","description":"PostgreSQL image backing Miniflux.","type":"string","kind":"string","default":"\"postgres:16-alpine\"","placeholder":false,"sensitive":false},{"name":"db_port","description":"Host port PostgreSQL listens on. Miniflux connects on 127.0.0.1.","type":"number","kind":"number","default":"5432","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for the Miniflux Postgres user. CHANGE THIS. (DB name and user are both \"miniflux\".)","type":"string","kind":"string","default":"\"miniflux\"","placeholder":false,"sensitive":true},{"name":"db_data_volume","description":"Docker named volume for the Postgres data dir (feeds, entries, users). Back it up.","type":"string","kind":"string","default":"\"miniflux_db_data\"","placeholder":false,"sensitive":false},{"name":"miniflux_resources","description":"Resources for the Miniflux task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false},{"name":"postgres_resources","description":"Resources for the PostgreSQL task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin the job to one node so the Postgres local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8100"},{"name":"db","port":"5432"}],"volumes":["/var/lib/postgresql/data"],"tasks":2,"image":"miniflux/miniflux:latest"},"related":[],"icon":{"kind":"monogram","text":"M","color":"#0EA5E9"}},{"id":"monitoring","name":"monitoring","description":"One-click observability stack: Prometheus + node-exporter + cAdvisor + Grafana in a single host-networked Nomad job. Gives you host and per-container metrics (filling the cgroup-v2 per-alloc gap), with Grafana pre-wired to Prometheus.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/monitoring","appUrl":"https://prometheus.io","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run monitoring --registry nomploy","repo":"prometheus/prometheus","stars":66188,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"monitoring\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"prometheus_image","description":"Prometheus image. Pin a tag in production.","type":"string","kind":"string","default":"\"prom/prometheus:latest\"","placeholder":false,"sensitive":false},{"name":"grafana_image","description":"Grafana image.","type":"string","kind":"string","default":"\"grafana/grafana:latest\"","placeholder":false,"sensitive":false},{"name":"node_exporter_image","description":"Prometheus node-exporter image (host-level metrics).","type":"string","kind":"string","default":"\"prom/node-exporter:latest\"","placeholder":false,"sensitive":false},{"name":"cadvisor_image","description":"cAdvisor image (per-container metrics).","type":"string","kind":"string","default":"\"gcr.io/cadvisor/cadvisor:latest\"","placeholder":false,"sensitive":false},{"name":"prometheus_port","description":"Host port for the Prometheus UI/API.","type":"number","kind":"number","default":"9090","placeholder":false,"sensitive":false},{"name":"grafana_port","description":"Host port for Grafana. Default 3001 to avoid clashing with the nomploy panel on :3000.","type":"number","kind":"number","default":"3001","placeholder":false,"sensitive":false},{"name":"node_exporter_port","description":"Host port node-exporter listens on.","type":"number","kind":"number","default":"9100","placeholder":false,"sensitive":false},{"name":"cadvisor_port","description":"Host port cAdvisor listens on. Default 8082 to avoid the common 8080 clash.","type":"number","kind":"number","default":"8082","placeholder":false,"sensitive":false},{"name":"scrape_interval","description":"Global Prometheus scrape interval.","type":"string","kind":"string","default":"\"15s\"","placeholder":false,"sensitive":false},{"name":"retention","description":"Prometheus TSDB retention (e.g. 15d, 30d, 90d).","type":"string","kind":"string","default":"\"15d\"","placeholder":false,"sensitive":false},{"name":"nomad_metrics_url","description":"Optional extra scrape target for Nomad's own metrics, as host:port (e.g. \"127.0.0.1:4646\"). Requires Nomad telemetry with prometheus_metrics enabled. Empty = don't scrape Nomad.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"prometheus_data_volume","description":"Docker named volume for Prometheus TSDB (/prometheus). A fresh volume inherits the image's dir ownership (uid 65534) so Prometheus can write it.","type":"string","kind":"string","default":"\"monitoring_prometheus_data\"","placeholder":false,"sensitive":false},{"name":"enable_cadvisor","description":"Run cAdvisor for per-container metrics. Set false if you only want host metrics, or if cAdvisor won't start on your kernel — Prometheus + node-exporter + Grafana still come up.","type":"bool","kind":"bool","default":"true","placeholder":false,"sensitive":false},{"name":"grafana_admin_user","description":"Initial Grafana admin username.","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":false},{"name":"grafana_admin_password","description":"Initial Grafana admin password. CHANGE THIS.","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":true},{"name":"grafana_root_url","description":"Public URL Grafana is served at (set when fronting it with a domain). Empty = use host:port.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"grafana_data_volume","description":"Docker named volume for /var/lib/grafana (SQLite DB, plugins; uid 472).","type":"string","kind":"string","default":"\"monitoring_grafana_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin the job to one node so the Prometheus/Grafana local volumes stay put (single all-in-one alloc). Note: metrics reflect the node the alloc lands on. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"prometheus_resources","description":"Resources for the Prometheus task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"grafana_resources","description":"Resources for the Grafana task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"exporter_resources","description":"Resources for each exporter task (node-exporter, cAdvisor).","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 100\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"prometheus","port":"9090"},{"name":"grafana","port":"3001"},{"name":"node_exporter","port":"9100"},{"name":"cadvisor","port":"8082"}],"volumes":["/prometheus","/var/lib/grafana"],"tasks":4,"image":""},"related":[{"id":"alertmanager","name":"alertmanager"},{"id":"blackbox-exporter","name":"blackbox-exporter"},{"id":"grafana","name":"grafana"},{"id":"loki","name":"loki"},{"id":"mysqld-exporter","name":"mysqld-exporter"},{"id":"postgres-exporter","name":"postgres-exporter"},{"id":"pushgateway","name":"pushgateway"},{"id":"redis-exporter","name":"redis-exporter"}],"icon":{"kind":"brand","slug":"prometheus","hex":"#E6522C","title":"Prometheus"}},{"id":"mosquitto","name":"mosquitto","description":"Eclipse Mosquitto — a lightweight open-source MQTT broker for IoT and pub/sub messaging (MQTT 3.1/3.1.1/5.0). Deployed as a host-networked Nomad service with a rendered config and a persistent volume for retained messages.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/mosquitto","appUrl":"https://mosquitto.org","category":"Messaging","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run mosquitto --registry nomploy","repo":"eclipse/mosquitto","stars":11218,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"mosquitto\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Eclipse Mosquitto container image. Pin a tag in production.","type":"string","kind":"string","default":"\"eclipse-mosquitto:2\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the MQTT listener (TCP).","type":"number","kind":"number","default":"1883","placeholder":false,"sensitive":false},{"name":"allow_anonymous","description":"Allow clients to connect without credentials. Fine on a trusted network; set false and manage a password file for real use.","type":"bool","kind":"bool","default":"true","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Docker named volume for /mosquitto/data (retained messages / persistence DB). A prestart task chowns it to uid 1883 (the mosquitto user).","type":"string","kind":"string","default":"\"mosquitto_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"mqtt","port":"1883"}],"volumes":["/mosquitto/data"],"tasks":2,"image":"eclipse-mosquitto:2"},"related":[{"id":"emqx","name":"emqx"},{"id":"node-red","name":"node-red"}],"icon":{"kind":"brand","slug":"eclipsemosquitto","hex":"#3C5280","title":"Eclipse Mosquitto"}},{"id":"mysqld-exporter","name":"mysqld-exporter","description":"Prometheus MySQLd Exporter — scrapes a MySQL or MariaDB server and exposes connection, query, InnoDB, and replication metrics for Prometheus. Deployed as a stateless host-networked Nomad service; point it at any reachable server. Pairs with the mariadb and monitoring packs.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/mysqld-exporter","appUrl":"https://github.com/prometheus/mysqld_exporter","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run mysqld-exporter --registry nomploy","repo":"prometheus/mysqld_exporter","stars":2463,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"mysqld-exporter\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Prometheus MySQLd Exporter image. Pin a tag in production.","type":"string","kind":"string","default":"\"prom/mysqld-exporter:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the exporter (/metrics).","type":"number","kind":"number","default":"9104","placeholder":false,"sensitive":false},{"name":"mysql_address","description":"host:port of the MySQL/MariaDB server to scrape (--mysqld.address). With host networking a co-located mariadb pack is reachable on 127.0.0.1:3306.","type":"string","kind":"string","default":"\"127.0.0.1:3306\"","placeholder":false,"sensitive":false},{"name":"mysql_user","description":"MySQL user for the exporter (--mysqld.username). Use a dedicated least-privilege monitoring user in production.","type":"string","kind":"string","default":"\"exporter\"","placeholder":false,"sensitive":false},{"name":"mysql_password","description":"Password for the exporter user (MYSQLD_EXPORTER_PASSWORD).","type":"string","kind":"string","default":"\"exporter\"","placeholder":false,"sensitive":true},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 64\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"9104"}],"volumes":[],"tasks":1,"image":"prom/mysqld-exporter:latest"},"related":[{"id":"mariadb","name":"mariadb"},{"id":"monitoring","name":"monitoring"}],"icon":{"kind":"brand","slug":"prometheus","hex":"#E6522C","title":"Prometheus"}},{"id":"n8n","name":"n8n","description":"n8n — a fair-code workflow automation tool (400+ integrations, visual editor, webhooks, scheduling). Deployed as a host-networked Nomad service with a persistent Docker volume; uses the bundled SQLite database for a zero-dependency single-node setup.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/n8n","appUrl":"https://n8n.io","category":"Automation","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run n8n --registry nomploy","repo":"n8n-io/n8n","stars":205749,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"n8n\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The n8n container image.","type":"string","kind":"string","default":"\"n8nio/n8n:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the n8n editor / webhook listener.","type":"number","kind":"number","default":"5678","placeholder":false,"sensitive":false},{"name":"host","description":"Public hostname n8n is served at (e.g. n8n.example.com), used in generated URLs. Empty = derive from the request.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"webhook_url","description":"Public base URL for webhooks (e.g. https://n8n.example.com/). Set this when fronting n8n with a domain, or externally-triggered webhooks won't route. Empty = use host:port.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"encryption_key","description":"Key used to encrypt stored credentials. Leave empty and n8n generates one and persists it in the data volume (fine for single-node). Set it explicitly if you need to restore credentials onto a fresh volume — and treat it as a secret.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"timezone","description":"Default timezone for schedules (e.g. Europe/Bratislava).","type":"string","kind":"string","default":"\"UTC\"","placeholder":false,"sensitive":false},{"name":"secure_cookie","description":"Require the n8n session cookie to be HTTPS-only. Keep false to log in over plain http://<ip>:<port>; set true when serving n8n over HTTPS (e.g. behind a TLS proxy).","type":"bool","kind":"bool","default":"false","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Docker named volume for /home/node/.n8n (SQLite DB, encryption key, config). A prestart task chowns it to uid 1000 (the `node` user) so n8n can write it.","type":"string","kind":"string","default":"\"n8n_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"5678"}],"volumes":["/home/node/.n8n"],"tasks":2,"image":"n8nio/n8n:latest"},"related":[{"id":"node-red","name":"node-red"}],"icon":{"kind":"brand","slug":"n8n","hex":"#EA4B71","title":"n8n"}},{"id":"nats","name":"nats","description":"NATS — a lightweight, high-performance messaging system (pub/sub, request-reply, queues) with JetStream persistence enabled. Deployed as a host-networked Nomad service with a persistent Docker volume for the JetStream store and the HTTP monitoring endpoint on.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/nats","appUrl":"https://nats.io","category":"Messaging","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run nats --registry nomploy","repo":"nats-io/nats-server","stars":20757,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"nats\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The NATS server container image.","type":"string","kind":"string","default":"\"nats:2\"","placeholder":false,"sensitive":false},{"name":"client_port","description":"Host port for client connections (nats:// protocol).","type":"number","kind":"number","default":"4222","placeholder":false,"sensitive":false},{"name":"monitoring_port","description":"Host port for the HTTP monitoring endpoint (/varz, /healthz, etc.).","type":"number","kind":"number","default":"8222","placeholder":false,"sensitive":false},{"name":"jetstream","description":"Enable JetStream (persistence: streams, KV, object store). When true, the data volume is mounted at /data as the store dir.","type":"bool","kind":"bool","default":"true","placeholder":false,"sensitive":false},{"name":"auth_token","description":"Optional connection token. Empty = no auth (open on the trusted network). Set it and clients connect as nats://<token>@host:port.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for the JetStream store (/data). NATS runs as root, so a fresh volume is writable. Ignored when jetstream = false.","type":"string","kind":"string","default":"\"nats_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the JetStream local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"client","port":"4222"},{"name":"monitoring","port":"8222"}],"volumes":["/data"],"tasks":1,"image":"nats:2"},"related":[{"id":"emqx","name":"emqx"}],"icon":{"kind":"brand","slug":"natsdotio","hex":"#27AAE1","title":"NATS.io"}},{"id":"navidrome","name":"navidrome","description":"Navidrome — a self-hosted music streaming server and Subsonic/OpenSubsonic API (web player + mobile apps). Deployed as a single host-networked Nomad service with a data volume for its database and a music volume you fill with your library.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/navidrome","appUrl":"https://www.navidrome.org","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run navidrome --registry nomploy","repo":"navidrome/navidrome","stars":23749,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"navidrome\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Navidrome container image. Pin a tag in production.","type":"string","kind":"string","default":"\"deluan/navidrome:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Navidrome web UI / Subsonic API.","type":"number","kind":"number","default":"4533","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for Navidrome's database, cache, and cover art (/data).","type":"string","kind":"string","default":"\"navidrome_data\"","placeholder":false,"sensitive":false},{"name":"music_volume","description":"Named volume mounted read-only at /music — fill it with your library (e.g. via the syncthing pack or a host copy).","type":"string","kind":"string","default":"\"navidrome_music\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"4533"}],"volumes":["/data","/music"],"tasks":1,"image":"deluan/navidrome:latest"},"related":[{"id":"jellyfin","name":"jellyfin"},{"id":"syncthing","name":"syncthing"}],"icon":{"kind":"monogram","text":"N","color":"#0EA5E9"}},{"id":"neo4j","name":"neo4j","description":"Neo4j — the popular open-source graph database, with the Cypher query language and the Neo4j Browser UI. Deployed as a host-networked Nomad service with a persistent volume for the graph store.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/neo4j","appUrl":"https://neo4j.com","category":"Databases","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run neo4j --registry nomploy","repo":"neo4j/neo4j","stars":17257,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"neo4j\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Neo4j container image. Pin a tag in production.","type":"string","kind":"string","default":"\"neo4j:5\"","placeholder":false,"sensitive":false},{"name":"http_port","description":"Host port for the Neo4j Browser / HTTP API.","type":"number","kind":"number","default":"7474","placeholder":false,"sensitive":false},{"name":"bolt_port","description":"Host port for the Bolt protocol (drivers connect here).","type":"number","kind":"number","default":"7687","placeholder":false,"sensitive":false},{"name":"password","description":"Initial password for the built-in `neo4j` user (min 8 chars; must NOT be \"neo4j\"). CHANGE THIS.","type":"string","kind":"string","default":"\"changeme123\"","placeholder":true,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /data (the graph store). A prestart task chowns it to uid 7474 (the neo4j user). Back it up.","type":"string","kind":"string","default":"\"neo4j_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources. Neo4j (JVM) likes memory — raise for larger graphs.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 1024\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"7474"},{"name":"bolt","port":"7687"}],"volumes":["/data"],"tasks":2,"image":"neo4j:5"},"related":[],"icon":{"kind":"brand","slug":"neo4j","hex":"#4581C3","title":"Neo4j"}},{"id":"nginx","name":"nginx","description":"nginx — a high-performance web server serving a static site, deployed as a host-networked Nomad service. The site content and config are rendered from pack variables (no host files).","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/nginx","appUrl":"https://nginx.org","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run nginx --registry nomploy","repo":null,"stars":null,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"nginx\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The nginx container image.","type":"string","kind":"string","default":"\"nginx:alpine\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port nginx listens on (host networking). Default 8080 to avoid clashing with Traefik on :80. Pick a free port on the target node.","type":"number","kind":"number","default":"8080","placeholder":false,"sensitive":false},{"name":"count","description":"Number of instances. Static content is stateless, so this can safely be > 1 (each replica needs its own node in host-network mode).","type":"number","kind":"number","default":"1","placeholder":false,"sensitive":false},{"name":"index_html","description":"Contents of index.html, rendered into the alloc and served at /. Replace with your own static page.","type":"string","kind":"string","default":"\"<!doctype html><html><head><title>nginx on Nomad</title></head><body style=\\\"font-family:system-ui;max-width:40rem;margin:4rem auto;padding:0 1rem\\\"><h1>It works</h1><p>Served by nginx, deployed as a Nomad Pack. Edit the <code>index_html</code> variable to replace this page.</p></body></html>\"","placeholder":true,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8080"}],"volumes":[],"tasks":1,"image":"nginx:alpine"},"related":[],"icon":{"kind":"brand","slug":"nginx","hex":"#009639","title":"NGINX"}},{"id":"nginx-proxy-manager","name":"nginx-proxy-manager","description":"Nginx Proxy Manager — a friendly web UI for running Nginx as a reverse proxy with free, automatic Let's Encrypt TLS: add proxy hosts, redirects, and access lists without touching config files. Deployed host-networked (SQLite) with data and certificate volumes.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/nginx-proxy-manager","appUrl":"https://nginxproxymanager.com","category":"Networking","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run nginx-proxy-manager --registry nomploy","repo":"NginxProxyManager/nginx-proxy-manager","stars":34206,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"nginx-proxy-manager\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Nginx Proxy Manager container image. Pin a tag in production.","type":"string","kind":"string","default":"\"jc21/nginx-proxy-manager:latest\"","placeholder":false,"sensitive":false},{"name":"http_port","description":"Host port for proxied HTTP traffic.","type":"number","kind":"number","default":"80","placeholder":false,"sensitive":false},{"name":"https_port","description":"Host port for proxied HTTPS traffic.","type":"number","kind":"number","default":"443","placeholder":false,"sensitive":false},{"name":"admin_port","description":"Host port for the admin web UI.","type":"number","kind":"number","default":"81","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for NPM config and its SQLite database (/data).","type":"string","kind":"string","default":"\"npm_data\"","placeholder":false,"sensitive":false},{"name":"letsencrypt_volume","description":"Named volume for issued TLS certificates (/etc/letsencrypt).","type":"string","kind":"string","default":"\"npm_letsencrypt\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"80"},{"name":"https","port":"443"},{"name":"admin","port":"81"}],"volumes":["/data","/etc/letsencrypt"],"tasks":1,"image":"jc21/nginx-proxy-manager:latest"},"related":[],"icon":{"kind":"brand","slug":"nginxproxymanager","hex":"#F15833","title":"Nginx Proxy Manager"}},{"id":"nocodb","name":"nocodb","description":"NocoDB — an open-source Airtable alternative that turns any database into a smart spreadsheet with grid/kanban/gallery views, forms, and a REST API. Deployed all-in-one with its PostgreSQL database in a single host-networked Nomad job.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/nocodb","appUrl":"https://nocodb.com","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run nocodb --registry nomploy","repo":null,"stars":null,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"nocodb\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The NocoDB container image. Pin a tag in production.","type":"string","kind":"string","default":"\"nocodb/nocodb:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the NocoDB web UI / API.","type":"number","kind":"number","default":"8098","placeholder":false,"sensitive":false},{"name":"public_url","description":"Public URL NocoDB is served at (NC_PUBLIC_URL), used in emails/links. Empty = leave unset.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"jwt_secret","description":"Secret used to sign auth tokens (NC_AUTH_JWT_SECRET). Set a random string and keep it stable. Empty = NocoDB generates one.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /usr/app/data (uploads/attachments). NocoDB runs as root, so a fresh volume is writable. Back it up.","type":"string","kind":"string","default":"\"nocodb_data\"","placeholder":false,"sensitive":false},{"name":"nocodb_resources","description":"Resources for the NocoDB task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"postgres_image","description":"PostgreSQL image backing NocoDB's metadata.","type":"string","kind":"string","default":"\"postgres:16-alpine\"","placeholder":false,"sensitive":false},{"name":"db_port","description":"Host port PostgreSQL listens on. NocoDB connects on 127.0.0.1.","type":"number","kind":"number","default":"5432","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for NocoDB's Postgres user. CHANGE THIS. (DB name and user are both \"nocodb\".)","type":"string","kind":"string","default":"\"nocodb\"","placeholder":false,"sensitive":true},{"name":"db_data_volume","description":"Docker named volume for the Postgres data dir (bases, views, users). Back it up.","type":"string","kind":"string","default":"\"nocodb_db_data\"","placeholder":false,"sensitive":false},{"name":"postgres_resources","description":"Resources for the PostgreSQL task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin the job to one node so the local volumes stay put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8098"},{"name":"db","port":"5432"}],"volumes":["/var/lib/postgresql/data","/usr/app/data"],"tasks":2,"image":"nocodb/nocodb:latest"},"related":[{"id":"directus","name":"directus"},{"id":"grist","name":"grist"}],"icon":{"kind":"monogram","text":"N","color":"#0EA5E9"}},{"id":"node-red","name":"node-red","description":"Node-RED — a low-code, flow-based programming tool for wiring together APIs, devices, and online services; popular for IoT and automation. Deployed as a host-networked Nomad service with a persistent volume for flows. Pairs with the mosquitto pack for MQTT.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/node-red","appUrl":"https://nodered.org","category":"Automation","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run node-red --registry nomploy","repo":"node-red/node-red","stars":23680,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"node-red\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Node-RED container image. Pin a tag in production.","type":"string","kind":"string","default":"\"nodered/node-red:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Node-RED editor / dashboard (PORT env).","type":"number","kind":"number","default":"1880","placeholder":false,"sensitive":false},{"name":"timezone","description":"Container timezone (TZ), e.g. Europe/Bratislava.","type":"string","kind":"string","default":"\"UTC\"","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Docker named volume for /data (flows, credentials, installed nodes, settings). A prestart task chowns it to uid 1000 (the node-red user). Back it up.","type":"string","kind":"string","default":"\"node_red_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 400\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"1880"}],"volumes":["/data"],"tasks":2,"image":"nodered/node-red:latest"},"related":[{"id":"mosquitto","name":"mosquitto"},{"id":"n8n","name":"n8n"}],"icon":{"kind":"brand","slug":"nodered","hex":"#8F0000","title":"Node-RED"}},{"id":"ntfy","name":"ntfy","description":"ntfy — a simple pub/sub notification service: send push notifications to your phone or desktop from any script via a plain HTTP PUT/POST. Deployed as a host-networked Nomad service with a persistent Docker volume for its message cache and users.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/ntfy","appUrl":"https://ntfy.sh","category":"Notifications","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run ntfy --registry nomploy","repo":"binwiederhier/ntfy","stars":34382,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"ntfy\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The ntfy container image. Pin a tag in production.","type":"string","kind":"string","default":"\"binwiederhier/ntfy:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the ntfy HTTP server (web app + API).","type":"number","kind":"number","default":"8090","placeholder":false,"sensitive":false},{"name":"base_url","description":"Public base URL ntfy is served at (e.g. https://ntfy.example.com). Recommended — the web app and mobile clients use it. Empty = leave unset.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"behind_proxy","description":"Set true when running behind a reverse proxy (enables correct client IP handling for rate limits).","type":"bool","kind":"bool","default":"false","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Docker named volume for /var/lib/ntfy (message cache, user/auth database, attachments). ntfy runs as root, so a fresh volume is writable.","type":"string","kind":"string","default":"\"ntfy_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8090"}],"volumes":["/var/lib/ntfy"],"tasks":1,"image":"binwiederhier/ntfy:latest"},"related":[{"id":"alertmanager","name":"alertmanager"},{"id":"gatus","name":"gatus"},{"id":"gotify","name":"gotify"},{"id":"uptime-kuma","name":"uptime-kuma"}],"icon":{"kind":"brand","slug":"ntfy","hex":"#317F6F","title":"ntfy"}},{"id":"ollama","name":"ollama","description":"Ollama — run open large language models (Llama, Mistral, Gemma, Qwen, and more) locally behind a simple REST API. Deployed as a host-networked Nomad service with a persistent Docker volume for downloaded models.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/ollama","appUrl":"https://ollama.com","category":"AI","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run ollama --registry nomploy","repo":"ollama/ollama","stars":181505,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"ollama\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Ollama container image. Pin a tag in production.","type":"string","kind":"string","default":"\"ollama/ollama:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Ollama REST API.","type":"number","kind":"number","default":"11434","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Docker named volume for /root/.ollama (downloaded models — these can be many GB). Ollama runs as root, so a fresh volume is writable. Back it up (or just re-pull models).","type":"string","kind":"string","default":"\"ollama_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local model volume stays put (and so you land on a node with enough RAM/CPU or a GPU). On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources. LLMs are hungry — raise cpu/memory substantially for real models (7B+ needs several GB of RAM on CPU).","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 2000\n    memory = 4096\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"11434"}],"volumes":["/root/.ollama"],"tasks":1,"image":"ollama/ollama:latest"},"related":[{"id":"open-webui","name":"open-webui"},{"id":"qdrant","name":"qdrant"},{"id":"weaviate","name":"weaviate"}],"icon":{"kind":"brand","slug":"ollama","hex":"#000000","title":"Ollama"}},{"id":"open-webui","name":"open-webui","description":"Open WebUI — a feature-rich, self-hosted ChatGPT-style web interface for local LLMs (Ollama) and OpenAI-compatible APIs, with chats, RAG, and user management. Deployed as a host-networked Nomad service with a persistent volume; pairs with the ollama pack.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/open-webui","appUrl":"https://openwebui.com","category":"AI","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run open-webui --registry nomploy","repo":"open-webui/open-webui","stars":152879,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"open-webui\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Open WebUI container image. Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/open-webui/open-webui:main\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Open WebUI web app. Default 3008 to avoid other packs on 3000-3007.","type":"number","kind":"number","default":"3008","placeholder":false,"sensitive":false},{"name":"ollama_base_url","description":"URL of the Ollama server to use. Defaults to the ollama pack on the same node (host networking).","type":"string","kind":"string","default":"\"http://127.0.0.1:11434\"","placeholder":false,"sensitive":false},{"name":"secret_key","description":"Secret key for signing sessions (WEBUI_SECRET_KEY). Set a stable random value in production. Empty = Open WebUI generates one and persists it in the data volume.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /app/backend/data (SQLite DB, chats, users, settings). Open WebUI runs as root, so a fresh volume is writable. Back it up.","type":"string","kind":"string","default":"\"open_webui_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put (ideally the node running ollama). On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"3008"}],"volumes":["/app/backend/data"],"tasks":1,"image":"ghcr.io/open-webui/open-webui:main"},"related":[{"id":"ollama","name":"ollama"},{"id":"qdrant","name":"qdrant"}],"icon":{"kind":"monogram","text":"O","color":"#6366F1"}},{"id":"openbao","name":"openbao","description":"OpenBao — an open-source (MPL-2.0) secrets manager forked from HashiCorp Vault: store, access, and distribute secrets, tokens, and certificates. Deployed as a host-networked Nomad service with file storage on a persistent volume. Requires a one-time initialize + unseal after first deploy.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/openbao","appUrl":"https://openbao.org","category":"Secrets","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run openbao --registry nomploy","repo":"openbao/openbao","stars":7464,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"openbao\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The OpenBao container image. Pin a tag in production.","type":"string","kind":"string","default":"\"openbao/openbao:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the OpenBao API / UI.","type":"number","kind":"number","default":"8200","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Docker named volume for OpenBao's file storage (/openbao/file) — encrypted secrets live here. A prestart task chowns it to the openbao user (uid 100). Back it up (and store your unseal keys separately).","type":"string","kind":"string","default":"\"openbao_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local storage volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8200"}],"volumes":["/openbao/file"],"tasks":2,"image":"openbao/openbao:latest"},"related":[{"id":"vaultwarden","name":"vaultwarden"}],"icon":{"kind":"monogram","text":"O","color":"#9333EA"}},{"id":"opengist","name":"opengist","description":"Opengist — a self-hosted pastebin powered by Git, an open-source alternative to GitHub Gist: share snippets with syntax highlighting, revisions, visibility controls, and embeds. Deployed as a single host-networked Nomad service on SQLite with a data volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/opengist","appUrl":"https://opengist.io","category":"Dev tools","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run opengist --registry nomploy","repo":"thomiceli/opengist","stars":3350,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"opengist\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Opengist container image. Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/thomiceli/opengist:1\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Opengist web UI (OG_HTTP_PORT).","type":"number","kind":"number","default":"6157","placeholder":false,"sensitive":false},{"name":"uid","description":"UID Opengist runs as. The data volume is chown'd to this at startup.","type":"number","kind":"number","default":"1000","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for the SQLite database and Git repositories (/opengist).","type":"string","kind":"string","default":"\"opengist_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"6157"}],"volumes":["/opengist"],"tasks":2,"image":"ghcr.io/thomiceli/opengist:1"},"related":[],"icon":{"kind":"monogram","text":"O","color":"#609926"}},{"id":"paperless-ngx","name":"paperless-ngx","description":"Paperless-ngx — scan, index, OCR, and archive your physical documents into a searchable digital library with tags, correspondents, and full-text search. Deployed as an all-in-one host-networked Nomad job: a Redis broker sidecar plus the Paperless app on SQLite, with data/media/consume volumes.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/paperless-ngx","appUrl":"https://docs.paperless-ngx.com","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run paperless-ngx --registry nomploy","repo":"paperless-ngx/paperless-ngx","stars":45923,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"paperless-ngx\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Paperless-ngx container image. Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/paperless-ngx/paperless-ngx:latest\"","placeholder":false,"sensitive":false},{"name":"redis_image","description":"The Redis broker image.","type":"string","kind":"string","default":"\"redis:7-alpine\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Paperless web UI (PAPERLESS_PORT).","type":"number","kind":"number","default":"8000","placeholder":false,"sensitive":false},{"name":"redis_port","description":"Host port for the co-located Redis broker.","type":"number","kind":"number","default":"6379","placeholder":false,"sensitive":false},{"name":"admin_user","description":"Superuser created on first start (PAPERLESS_ADMIN_USER).","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":false},{"name":"admin_password","description":"Superuser password (PAPERLESS_ADMIN_PASSWORD). CHANGE THIS.","type":"string","kind":"string","default":"\"changeme-please\"","placeholder":true,"sensitive":true},{"name":"secret_key","description":"Django secret key (PAPERLESS_SECRET_KEY). Generate a long random value for production.","type":"string","kind":"string","default":"\"change-me-to-a-long-random-secret-key\"","placeholder":true,"sensitive":true},{"name":"timezone","description":"Time zone (PAPERLESS_TIME_ZONE).","type":"string","kind":"string","default":"\"Etc/UTC\"","placeholder":false,"sensitive":false},{"name":"ocr_language","description":"Tesseract OCR language (PAPERLESS_OCR_LANGUAGE), e.g. \"eng\", \"deu\", \"eng+deu\".","type":"string","kind":"string","default":"\"eng\"","placeholder":false,"sensitive":false},{"name":"url","description":"Public URL Paperless is served at (PAPERLESS_URL). Empty = not set. Required if exposed on a domain.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for the SQLite database and index (/usr/src/paperless/data).","type":"string","kind":"string","default":"\"paperless_data\"","placeholder":false,"sensitive":false},{"name":"media_volume","description":"Named volume for archived documents (/usr/src/paperless/media). Critical — back it up.","type":"string","kind":"string","default":"\"paperless_media\"","placeholder":false,"sensitive":false},{"name":"consume_volume","description":"Named volume watched for new documents to import (/usr/src/paperless/consume).","type":"string","kind":"string","default":"\"paperless_consume\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"Resources for the Paperless app task (OCR is CPU-heavy).","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 2000\n    memory = 1024\n  }","placeholder":false,"sensitive":false},{"name":"redis_resources","description":"Resources for the Redis broker task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8000"},{"name":"redis","port":"6379"}],"volumes":["/usr/src/paperless/data","/usr/src/paperless/media","/usr/src/paperless/consume"],"tasks":2,"image":"ghcr.io/paperless-ngx/paperless-ngx:latest"},"related":[],"icon":{"kind":"brand","slug":"paperlessngx","hex":"#17541F","title":"Paperless-ngx"}},{"id":"pgadmin","name":"pgadmin","description":"pgAdmin 4 — the popular web-based administration and development tool for PostgreSQL. Deployed as a host-networked Nomad service with a persistent Docker volume for its saved servers and settings. Pairs with the postgres pack.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/pgadmin","appUrl":"https://www.pgadmin.org","category":"Dev tools","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run pgadmin --registry nomploy","repo":"pgadmin-org/pgadmin4","stars":3818,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"pgadmin\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The pgAdmin 4 container image. Pin a tag in production.","type":"string","kind":"string","default":"\"dpage/pgadmin4:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the pgAdmin web UI (PGADMIN_LISTEN_PORT).","type":"number","kind":"number","default":"5050","placeholder":false,"sensitive":false},{"name":"email","description":"Initial login email (must be a valid email format). Created on first boot.","type":"string","kind":"string","default":"\"admin@example.com\"","placeholder":true,"sensitive":false},{"name":"password","description":"Initial login password. CHANGE THIS.","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /var/lib/pgadmin (saved server connections, preferences). A prestart task chowns it to uid 5050 (the pgadmin user).","type":"string","kind":"string","default":"\"pgadmin_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"5050"}],"volumes":["/var/lib/pgadmin"],"tasks":2,"image":"dpage/pgadmin4:latest"},"related":[{"id":"postgres","name":"postgres"}],"icon":{"kind":"monogram","text":"P","color":"#609926"}},{"id":"pgweb","name":"pgweb","description":"pgweb — a fast, lightweight, browser-based PostgreSQL client: browse tables, run queries, inspect schemas, and export results. Deployed as a stateless host-networked Nomad service in sessions mode, so each user enters their own connection in the UI. Pairs with the postgres pack.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/pgweb","appUrl":"https://sosedoff.github.io/pgweb/","category":"Dev tools","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run pgweb --registry nomploy","repo":"sosedoff/pgweb","stars":9511,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"pgweb\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The pgweb container image. Pin a tag in production.","type":"string","kind":"string","default":"\"sosedoff/pgweb:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the pgweb web UI.","type":"number","kind":"number","default":"8081","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8081"}],"volumes":[],"tasks":1,"image":"sosedoff/pgweb:latest"},"related":[],"icon":{"kind":"monogram","text":"P","color":"#609926"}},{"id":"photoprism","name":"photoprism","description":"PhotoPrism — a privacy-first, AI-powered photo app for browsing, organizing, and sharing your photo and video library, with automatic tagging and face recognition running fully on your own hardware. Deployed as a single host-networked Nomad service using SQLite, with storage and originals volumes.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/photoprism","appUrl":"https://www.photoprism.app","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run photoprism --registry nomploy","repo":"photoprism/photoprism","stars":40228,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"photoprism\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The PhotoPrism container image. Pin a tag in production.","type":"string","kind":"string","default":"\"photoprism/photoprism:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the PhotoPrism web UI.","type":"number","kind":"number","default":"2342","placeholder":false,"sensitive":false},{"name":"admin_user","description":"Initial admin username (PHOTOPRISM_ADMIN_USER).","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":false},{"name":"admin_password","description":"Initial admin password (PHOTOPRISM_ADMIN_PASSWORD, min 8 chars). CHANGE THIS.","type":"string","kind":"string","default":"\"changeme-please\"","placeholder":true,"sensitive":true},{"name":"site_url","description":"Public site URL (PHOTOPRISM_SITE_URL). Empty = derive from the request.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"storage_volume","description":"Named volume for the SQLite database, config, cache, and thumbnails (/photoprism/storage). Critical — back it up.","type":"string","kind":"string","default":"\"photoprism_storage\"","placeholder":false,"sensitive":false},{"name":"originals_volume","description":"Named volume for your original photos and videos (/photoprism/originals).","type":"string","kind":"string","default":"\"photoprism_originals\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources. Indexing/face recognition is memory-hungry; 4GB+ recommended.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 2000\n    memory = 3072\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"2342"}],"volumes":["/photoprism/storage","/photoprism/originals"],"tasks":1,"image":"photoprism/photoprism:latest"},"related":[{"id":"jellyfin","name":"jellyfin"},{"id":"syncthing","name":"syncthing"}],"icon":{"kind":"monogram","text":"P","color":"#0EA5E9"}},{"id":"planka","name":"planka","description":"Planka — an open-source kanban board (a self-hosted Trello alternative) with cards, labels, due dates, attachments, and real-time collaboration. Deployed as an all-in-one host-networked Nomad job: a PostgreSQL sidecar plus the Planka app with persistent volumes.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/planka","appUrl":"https://planka.app","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run planka --registry nomploy","repo":"plankanban/planka","stars":12576,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"planka\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Planka container image. Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/plankanban/planka:latest\"","placeholder":false,"sensitive":false},{"name":"postgres_image","description":"The PostgreSQL image for the bundled database.","type":"string","kind":"string","default":"\"postgres:16-alpine\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Planka web UI.","type":"number","kind":"number","default":"1337","placeholder":false,"sensitive":false},{"name":"db_port","description":"Host port for the co-located PostgreSQL.","type":"number","kind":"number","default":"5432","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for the Planka PostgreSQL user.","type":"string","kind":"string","default":"\"planka\"","placeholder":false,"sensitive":true},{"name":"base_url","description":"Public base URL Planka is served at (BASE_URL). Empty = http://localhost:<port>. Set this to the real host/domain.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"secret_key","description":"Secret used to sign sessions (SECRET_KEY). Generate a long random value (openssl rand -hex 64).","type":"string","kind":"string","default":"\"change-me-to-a-long-random-secret-key\"","placeholder":true,"sensitive":true},{"name":"admin_email","description":"Initial admin email (DEFAULT_ADMIN_EMAIL).","type":"string","kind":"string","default":"\"admin@nomploy.local\"","placeholder":false,"sensitive":false},{"name":"admin_username","description":"Initial admin username (DEFAULT_ADMIN_USERNAME).","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":false},{"name":"admin_password","description":"Initial admin password (DEFAULT_ADMIN_PASSWORD). CHANGE THIS. Note: it is re-applied on every boot — remove it after first login to let UI changes stick.","type":"string","kind":"string","default":"\"changeme-please\"","placeholder":true,"sensitive":true},{"name":"admin_name","description":"Initial admin display name (DEFAULT_ADMIN_NAME).","type":"string","kind":"string","default":"\"Admin\"","placeholder":false,"sensitive":false},{"name":"avatars_volume","description":"Named volume for user avatars (/app/public/user-avatars).","type":"string","kind":"string","default":"\"planka_avatars\"","placeholder":false,"sensitive":false},{"name":"backgrounds_volume","description":"Named volume for project backgrounds (/app/public/project-background-images).","type":"string","kind":"string","default":"\"planka_backgrounds\"","placeholder":false,"sensitive":false},{"name":"attachments_volume","description":"Named volume for attachments (/app/private/attachments).","type":"string","kind":"string","default":"\"planka_attachments\"","placeholder":false,"sensitive":false},{"name":"db_data_volume","description":"Named volume for PostgreSQL data (/var/lib/postgresql/data). Holds all boards.","type":"string","kind":"string","default":"\"planka_db_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"Resources for the Planka app task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"postgres_resources","description":"Resources for the PostgreSQL task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"1337"},{"name":"db","port":"5432"}],"volumes":["/var/lib/postgresql/data","/app/public/user-avatars","/app/public/project-background-images","/app/private/attachments"],"tasks":2,"image":"ghcr.io/plankanban/planka:latest"},"related":[],"icon":{"kind":"monogram","text":"P","color":"#0EA5E9"}},{"id":"plausible","name":"plausible","description":"Plausible Community Edition — privacy-friendly, cookie-free web analytics. Deployed all-in-one with its PostgreSQL and ClickHouse databases in a single host-networked Nomad job; creates and migrates the databases on start.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/plausible","appUrl":"https://plausible.io","category":"Analytics","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run plausible --registry nomploy","repo":"plausible/analytics","stars":29191,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"plausible\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Plausible Community Edition image. Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/plausible/community-edition:v3.0.1\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Plausible web UI (HTTP_PORT).","type":"number","kind":"number","default":"8000","placeholder":false,"sensitive":false},{"name":"base_url","description":"Public URL Plausible is served at (e.g. https://analytics.example.com). Used in links and the tracking snippet. Empty = http://localhost:<port>.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"secret_key_base","description":"Secret used to sign sessions — MUST be at least 64 characters. CHANGE THIS (e.g. `openssl rand -base64 64`) and keep it stable.","type":"string","kind":"string","default":"\"CHANGE_ME_generate_with_openssl_rand_base64_64_at_least_64_chars_long!!\"","placeholder":true,"sensitive":true},{"name":"disable_registration","description":"Registration policy: \"false\" (open — create the first/admin account, then lock down), \"true\" (no new accounts), or \"invite_only\".","type":"string","kind":"string","default":"\"false\"","placeholder":false,"sensitive":false},{"name":"plausible_resources","description":"Resources for the Plausible task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"postgres_image","description":"PostgreSQL image for Plausible's app database.","type":"string","kind":"string","default":"\"postgres:16-alpine\"","placeholder":false,"sensitive":false},{"name":"db_port","description":"Host port PostgreSQL listens on.","type":"number","kind":"number","default":"5432","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for the Plausible Postgres user. CHANGE THIS. (DB name and user are both \"plausible\".)","type":"string","kind":"string","default":"\"plausible\"","placeholder":false,"sensitive":true},{"name":"db_data_volume","description":"Docker named volume for the Postgres data dir (users, sites, settings). Back it up.","type":"string","kind":"string","default":"\"plausible_db_data\"","placeholder":false,"sensitive":false},{"name":"postgres_resources","description":"Resources for the PostgreSQL task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"clickhouse_image","description":"ClickHouse image for Plausible's event store. Pin to a version Plausible supports.","type":"string","kind":"string","default":"\"clickhouse/clickhouse-server:24.12-alpine\"","placeholder":false,"sensitive":false},{"name":"clickhouse_port","description":"Host port for ClickHouse's HTTP interface (Plausible connects here on 127.0.0.1).","type":"number","kind":"number","default":"8123","placeholder":false,"sensitive":false},{"name":"clickhouse_data_volume","description":"Docker named volume for /var/lib/clickhouse (the event data — the bulk of analytics). Back it up.","type":"string","kind":"string","default":"\"plausible_ch_data\"","placeholder":false,"sensitive":false},{"name":"clickhouse_resources","description":"Resources for the ClickHouse task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 1024\n  }","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin the job to one node so the local volumes stay put (single all-in-one alloc). On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8000"},{"name":"db","port":"5432"},{"name":"clickhouse","port":"8123"}],"volumes":["/var/lib/postgresql/data","/var/lib/clickhouse"],"tasks":3,"image":"ghcr.io/plausible/community-edition:v3.0.1"},"related":[],"icon":{"kind":"brand","slug":"plausibleanalytics","hex":"#5850EC","title":"Plausible Analytics"}},{"id":"pocket-id","name":"pocket-id","description":"Pocket ID — a simple, passkey-first OpenID Connect (OIDC) provider: sign in to your self-hosted apps with WebAuthn passkeys, no passwords. Deployed as a single host-networked Nomad service on SQLite with a data volume. A lightweight alternative to keycloak/authentik for SSO.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/pocket-id","appUrl":"https://pocket-id.org","category":"Identity","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run pocket-id --registry nomploy","repo":"pocket-id/pocket-id","stars":9259,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"pocket-id\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Pocket ID container image. Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/pocket-id/pocket-id:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Pocket ID web UI / OIDC endpoints (PORT).","type":"number","kind":"number","default":"1411","placeholder":false,"sensitive":false},{"name":"app_url","description":"Public URL Pocket ID is served at (APP_URL). REQUIRED for passkeys — WebAuthn is origin-bound, so this must be the exact scheme+host+port your browser uses. Empty = http://localhost:<port> (dev only).","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"trust_proxy","description":"Trust reverse-proxy headers for the real client IP (TRUST_PROXY).","type":"bool","kind":"bool","default":"false","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for the SQLite database and keys (/app/data).","type":"string","kind":"string","default":"\"pocket_id_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"1411"}],"volumes":["/app/data"],"tasks":1,"image":"ghcr.io/pocket-id/pocket-id:latest"},"related":[],"icon":{"kind":"monogram","text":"P","color":"#7C3AED"}},{"id":"pocketbase","name":"pocketbase","description":"PocketBase — an open-source backend in a single file: an embedded SQLite database with realtime subscriptions, built-in auth, file storage, and an admin dashboard, exposed over a REST-ish API. Deployed as a host-networked Nomad service with a persistent volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/pocketbase","appUrl":"https://pocketbase.io","category":"Dev tools","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run pocketbase --registry nomploy","repo":"pocketbase/pocketbase","stars":61128,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"pocketbase\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The PocketBase container image. PocketBase has no official image; this is the widely-used community build. Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/muchobien/pocketbase:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for PocketBase (admin UI at /_/ and the REST/realtime API).","type":"number","kind":"number","default":"8090","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Docker named volume for /pb_data (SQLite database, uploaded files, settings). All of PocketBase's state. Back it up.","type":"string","kind":"string","default":"\"pocketbase_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8090"}],"volumes":["/pb_data"],"tasks":1,"image":"ghcr.io/muchobien/pocketbase:latest"},"related":[],"icon":{"kind":"brand","slug":"pocketbase","hex":"#B8DBE4","title":"PocketBase"}},{"id":"postgres","name":"postgres","description":"PostgreSQL — the world's most advanced open-source relational database, deployed as a host-networked Nomad service with a persistent Docker volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/postgres","appUrl":"https://www.postgresql.org","category":"Databases","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run postgres --registry nomploy","repo":null,"stars":null,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"postgres\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The PostgreSQL container image.","type":"string","kind":"string","default":"\"postgres:16-alpine\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port Postgres listens on (host networking, so it's reachable at <node-ip>:<port>). Pick a free port on the target node.","type":"number","kind":"number","default":"5432","placeholder":false,"sensitive":false},{"name":"count","description":"Number of instances (keep at 1 — local-disk storage, no built-in replication).","type":"number","kind":"number","default":"1","placeholder":false,"sensitive":false},{"name":"db_name","description":"Initial database created on first boot.","type":"string","kind":"string","default":"\"app\"","placeholder":false,"sensitive":false},{"name":"db_user","description":"Superuser role created on first boot.","type":"string","kind":"string","default":"\"app\"","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for db_user. CHANGE THIS — it is baked into the job env. Consider a Nomad variable / Vault instead of a default.","type":"string","kind":"string","default":"\"postgres\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for the data dir, so the database survives restarts and reschedules (persistent, unlike an alloc-relative bind). A fresh volume inherits the image's data-dir ownership, so Postgres can write it.","type":"string","kind":"string","default":"\"postgres_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — e.g. pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"db","port":"5432"}],"volumes":["/var/lib/postgresql/data"],"tasks":1,"image":"postgres:16-alpine"},"related":[{"id":"adminer","name":"adminer"},{"id":"backup","name":"backup"},{"id":"pgadmin","name":"pgadmin"},{"id":"postgres-exporter","name":"postgres-exporter"}],"icon":{"kind":"brand","slug":"postgresql","hex":"#4169E1","title":"PostgreSQL"}},{"id":"postgres-exporter","name":"postgres-exporter","description":"Prometheus Postgres Exporter — scrapes a PostgreSQL server and exposes database, table, and replication metrics for Prometheus. Deployed as a stateless host-networked Nomad service; point it at any reachable Postgres via a DSN. Pairs with the postgres and monitoring packs.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/postgres-exporter","appUrl":"https://github.com/prometheus-community/postgres_exporter","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run postgres-exporter --registry nomploy","repo":"prometheus-community/postgres_exporter","stars":3620,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"postgres-exporter\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Prometheus Postgres Exporter image. Pin a tag in production.","type":"string","kind":"string","default":"\"quay.io/prometheuscommunity/postgres-exporter:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the exporter (/metrics).","type":"number","kind":"number","default":"9187","placeholder":false,"sensitive":false},{"name":"data_source_name","description":"Postgres DSN the exporter connects to (DATA_SOURCE_NAME). Use a read-only monitoring role in production. With host networking a co-located postgres pack is reachable on 127.0.0.1.","type":"string","kind":"string","default":"\"postgresql://postgres:postgres@127.0.0.1:5432/postgres?sslmode=disable\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 64\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"9187"}],"volumes":[],"tasks":1,"image":"quay.io/prometheuscommunity/postgres-exporter:latest"},"related":[{"id":"monitoring","name":"monitoring"},{"id":"postgres","name":"postgres"}],"icon":{"kind":"brand","slug":"prometheus","hex":"#E6522C","title":"Prometheus"}},{"id":"pushgateway","name":"pushgateway","description":"Prometheus Pushgateway — lets short-lived and batch jobs push their metrics to an intermediary that Prometheus then scrapes. Deployed as a stateless host-networked Nomad service. Pairs with the monitoring pack.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/pushgateway","appUrl":"https://github.com/prometheus/pushgateway","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run pushgateway --registry nomploy","repo":"prometheus/pushgateway","stars":3369,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"pushgateway\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Pushgateway container image. Pin a tag in production.","type":"string","kind":"string","default":"\"prom/pushgateway:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Pushgateway (push API + /metrics for Prometheus to scrape).","type":"number","kind":"number","default":"9091","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 100\n    memory = 64\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"9091"}],"volumes":[],"tasks":1,"image":"prom/pushgateway:latest"},"related":[{"id":"monitoring","name":"monitoring"}],"icon":{"kind":"monogram","text":"P","color":"#E6522C"}},{"id":"qdrant","name":"qdrant","description":"Qdrant — an open-source vector database and similarity-search engine for embeddings, powering semantic search and RAG. Deployed as a host-networked Nomad service with a persistent volume; pairs with the ollama pack for a self-hosted AI stack.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/qdrant","appUrl":"https://qdrant.tech","category":"AI","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run qdrant --registry nomploy","repo":"qdrant/qdrant","stars":34760,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"qdrant\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Qdrant container image. Pin a tag in production.","type":"string","kind":"string","default":"\"qdrant/qdrant:latest\"","placeholder":false,"sensitive":false},{"name":"http_port","description":"Host port for the REST API + web dashboard (/dashboard).","type":"number","kind":"number","default":"6333","placeholder":false,"sensitive":false},{"name":"grpc_port","description":"Host port for the gRPC API.","type":"number","kind":"number","default":"6334","placeholder":false,"sensitive":false},{"name":"api_key","description":"Optional API key. Empty = open (no auth). Set it to require an api-key header on all requests.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /qdrant/storage (collections + vectors). Qdrant runs as root, so a fresh volume is writable. Back it up.","type":"string","kind":"string","default":"\"qdrant_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources. Raise memory for large collections (vectors are held in RAM by default).","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"6333"},{"name":"grpc","port":"6334"}],"volumes":["/qdrant/storage"],"tasks":1,"image":"qdrant/qdrant:latest"},"related":[{"id":"ollama","name":"ollama"},{"id":"open-webui","name":"open-webui"},{"id":"weaviate","name":"weaviate"}],"icon":{"kind":"monogram","text":"Q","color":"#6366F1"}},{"id":"questdb","name":"questdb","description":"QuestDB — a high-performance time-series database with SQL, a fast InfluxDB Line Protocol ingestion endpoint, and the PostgreSQL wire protocol, plus a built-in web console. Deployed as a single host-networked Nomad service with a persistent data volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/questdb","appUrl":"https://questdb.io","category":"Databases","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run questdb --registry nomploy","repo":"questdb/questdb","stars":17341,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"questdb\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The QuestDB container image. Pin a tag in production.","type":"string","kind":"string","default":"\"questdb/questdb:latest\"","placeholder":false,"sensitive":false},{"name":"http_port","description":"Host port for the web console + REST API.","type":"number","kind":"number","default":"9000","placeholder":false,"sensitive":false},{"name":"pg_port","description":"Host port for the PostgreSQL wire protocol.","type":"number","kind":"number","default":"8812","placeholder":false,"sensitive":false},{"name":"ilp_port","description":"Host port for InfluxDB Line Protocol ingestion (TCP).","type":"number","kind":"number","default":"9009","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for the QuestDB database (/var/lib/questdb).","type":"string","kind":"string","default":"\"questdb_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 1024\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"9000"},{"name":"pg","port":"8812"},{"name":"ilp","port":"9009"}],"volumes":["/var/lib/questdb"],"tasks":1,"image":"questdb/questdb:latest"},"related":[],"icon":{"kind":"monogram","text":"Q","color":"#4169E1"}},{"id":"rabbitmq","name":"rabbitmq","description":"RabbitMQ — a battle-tested message broker (AMQP 0-9-1, plus MQTT/STOMP) with the management UI enabled. Deployed as a host-networked Nomad service with a persistent Docker volume and a stable node name so its data survives reschedules.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/rabbitmq","appUrl":"https://www.rabbitmq.com","category":"Messaging","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run rabbitmq --registry nomploy","repo":"rabbitmq/rabbitmq-server","stars":13870,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"rabbitmq\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The RabbitMQ container image — use a `-management` tag so the web UI is included.","type":"string","kind":"string","default":"\"rabbitmq:4-management\"","placeholder":false,"sensitive":false},{"name":"amqp_port","description":"Host port for AMQP (client connections).","type":"number","kind":"number","default":"5672","placeholder":false,"sensitive":false},{"name":"management_port","description":"Host port for the management web UI / HTTP API.","type":"number","kind":"number","default":"15672","placeholder":false,"sensitive":false},{"name":"default_user","description":"Admin user created on first boot. (The built-in `guest` user only works from localhost, so remote clients need this.)","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":false},{"name":"default_password","description":"Password for default_user. CHANGE THIS. Only applied on first boot (empty data volume).","type":"string","kind":"string","default":"\"rabbitmq\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /var/lib/rabbitmq (Mnesia DB: queues, exchanges, users, messages). A fresh volume inherits the image's dir ownership (uid 999). Back it up.","type":"string","kind":"string","default":"\"rabbitmq_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"amqp","port":"5672"},{"name":"management","port":"15672"}],"volumes":["/var/lib/rabbitmq"],"tasks":1,"image":"rabbitmq:4-management"},"related":[],"icon":{"kind":"brand","slug":"rabbitmq","hex":"#FF6600","title":"RabbitMQ"}},{"id":"radicale","name":"radicale","description":"Radicale — a lightweight CalDAV and CardDAV server: self-host your calendars and contacts and sync them across phones and desktops. Deployed as a single host-networked Nomad service with a rendered config, htpasswd auth, and a data volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/radicale","appUrl":"https://radicale.org","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run radicale --registry nomploy","repo":"Kozea/Radicale","stars":5037,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"radicale\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Radicale container image. Pin a tag in production.","type":"string","kind":"string","default":"\"rockstorm/radicale:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Radicale CalDAV/CardDAV server.","type":"number","kind":"number","default":"5232","placeholder":false,"sensitive":false},{"name":"username","description":"The user allowed to sync (htpasswd).","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":false},{"name":"password","description":"Password for the user (stored plaintext in the users file — switch to bcrypt for production). CHANGE THIS.","type":"string","kind":"string","default":"\"changeme-please\"","placeholder":true,"sensitive":true},{"name":"uid","description":"UID Radicale runs as. The data volume is chown'd to this at startup.","type":"number","kind":"number","default":"2999","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for stored calendars and contacts (/var/lib/radicale/collections).","type":"string","kind":"string","default":"\"radicale_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"5232"}],"volumes":["/var/lib/radicale/collections"],"tasks":2,"image":"rockstorm/radicale:latest"},"related":[],"icon":{"kind":"monogram","text":"R","color":"#0EA5E9"}},{"id":"redis","name":"redis","description":"Redis — an in-memory data store used as a database, cache, and message broker, deployed as a host-networked Nomad service with AOF persistence on a Docker volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/redis","appUrl":"https://redis.io","category":"Databases","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run redis --registry nomploy","repo":"redis/redis","stars":76448,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"redis\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Redis container image.","type":"string","kind":"string","default":"\"redis:7-alpine\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port Redis listens on (host networking). Pick a free port on the target node.","type":"number","kind":"number","default":"6379","placeholder":false,"sensitive":false},{"name":"count","description":"Number of instances (keep at 1 — local-disk AOF, no built-in clustering here).","type":"number","kind":"number","default":"1","placeholder":false,"sensitive":false},{"name":"password","description":"Optional requirepass password. Empty = no auth (only safe on a private/overlay network).","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /data, so the AOF/RDB survives restarts and reschedules.","type":"string","kind":"string","default":"\"redis_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — e.g. pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"redis","port":"6379"}],"volumes":["/data"],"tasks":1,"image":"redis:7-alpine"},"related":[{"id":"redis-exporter","name":"redis-exporter"},{"id":"redisinsight","name":"redisinsight"},{"id":"valkey","name":"valkey"}],"icon":{"kind":"brand","slug":"redis","hex":"#FF4438","title":"Redis"}},{"id":"redis-exporter","name":"redis-exporter","description":"Prometheus Redis Exporter — scrapes a Redis, Valkey, or Dragonfly server and exposes memory, keyspace, clients, and command metrics for Prometheus. Deployed as a stateless host-networked Nomad service; point it at any reachable instance. Pairs with the redis/valkey and monitoring packs.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/redis-exporter","appUrl":"https://github.com/oliver006/redis_exporter","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run redis-exporter --registry nomploy","repo":"oliver006/redis_exporter","stars":3696,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"redis-exporter\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The oliver006/redis_exporter image. Pin a tag in production.","type":"string","kind":"string","default":"\"oliver006/redis_exporter:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the exporter (/metrics).","type":"number","kind":"number","default":"9121","placeholder":false,"sensitive":false},{"name":"redis_addr","description":"Address of the Redis/Valkey/Dragonfly server to scrape (REDIS_ADDR). With host networking a co-located redis pack is reachable on 127.0.0.1.","type":"string","kind":"string","default":"\"redis://127.0.0.1:6379\"","placeholder":false,"sensitive":false},{"name":"redis_password","description":"Password for the target server (REDIS_PASSWORD). Leave empty if auth is disabled.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 200\n    memory = 64\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"9121"}],"volumes":[],"tasks":1,"image":"oliver006/redis_exporter:latest"},"related":[{"id":"dragonfly","name":"dragonfly"},{"id":"monitoring","name":"monitoring"},{"id":"redis","name":"redis"},{"id":"valkey","name":"valkey"}],"icon":{"kind":"brand","slug":"prometheus","hex":"#E6522C","title":"Prometheus"}},{"id":"redisinsight","name":"redisinsight","description":"RedisInsight — the official Redis GUI: browse keys, run commands in a workbench, profile, and visualize data. Deployed as a host-networked Nomad service with a persistent volume for saved connections. Pairs with the redis pack.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/redisinsight","appUrl":"https://redis.io/insight/","category":"Dev tools","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run redisinsight --registry nomploy","repo":"RedisInsight/RedisInsight","stars":8859,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"redisinsight\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The RedisInsight container image. Pin a tag in production.","type":"string","kind":"string","default":"\"redis/redisinsight:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the RedisInsight web UI (RI_APP_PORT).","type":"number","kind":"number","default":"5540","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Docker named volume for /data (saved connections, workbench history — stores DB passwords). A prestart task chowns it to uid 1000 (the app user).","type":"string","kind":"string","default":"\"redisinsight_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"5540"}],"volumes":["/data"],"tasks":2,"image":"redis/redisinsight:latest"},"related":[{"id":"redis","name":"redis"},{"id":"valkey","name":"valkey"}],"icon":{"kind":"monogram","text":"R","color":"#609926"}},{"id":"redpanda","name":"redpanda","description":"Redpanda — a Kafka-compatible streaming data platform in a single binary (no ZooKeeper/JVM), with a Kafka API, HTTP proxy, and schema registry. Deployed here as a single-node dev-container instance, host-networked with a data volume. A lighter drop-in for Apache Kafka.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/redpanda","appUrl":"https://redpanda.com","category":"Messaging","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run redpanda --registry nomploy","repo":"redpanda-data/redpanda","stars":12563,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"redpanda\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Redpanda container image. Pin a tag in production.","type":"string","kind":"string","default":"\"redpandadata/redpanda:latest\"","placeholder":false,"sensitive":false},{"name":"kafka_port","description":"Host port for the Kafka API.","type":"number","kind":"number","default":"9092","placeholder":false,"sensitive":false},{"name":"admin_port","description":"Host port for the Redpanda Admin API.","type":"number","kind":"number","default":"9644","placeholder":false,"sensitive":false},{"name":"proxy_port","description":"Host port for the HTTP (Panda) Proxy.","type":"number","kind":"number","default":"8082","placeholder":false,"sensitive":false},{"name":"schema_port","description":"Host port for the Schema Registry.","type":"number","kind":"number","default":"8081","placeholder":false,"sensitive":false},{"name":"advertise_host","description":"Host/IP advertised to Kafka clients. 127.0.0.1 works for co-located clients; set this to the node's IP for remote consumers/producers.","type":"string","kind":"string","default":"\"127.0.0.1\"","placeholder":false,"sensitive":false},{"name":"uid","description":"UID Redpanda runs as. The data volume is chown'd to this at startup.","type":"number","kind":"number","default":"101","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for Redpanda's data (/var/lib/redpanda/data).","type":"string","kind":"string","default":"\"redpanda_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 1024\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"kafka","port":"9092"},{"name":"admin","port":"9644"},{"name":"proxy","port":"8082"},{"name":"schema","port":"8081"}],"volumes":["/var/lib/redpanda/data"],"tasks":2,"image":"redpandadata/redpanda:latest"},"related":[],"icon":{"kind":"monogram","text":"R","color":"#FF6600"}},{"id":"rest-server","name":"rest-server","description":"Restic REST Server — a high-performance HTTP backend for restic backups, faster than restic's SFTP/S3 backends and able to run append-only so clients can't delete history. Deployed as a single host-networked Nomad service with a data volume for repositories. Pairs with the backup pack as its restic target.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/rest-server","appUrl":"https://github.com/restic/rest-server","category":"Backup","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run rest-server --registry nomploy","repo":"restic/rest-server","stars":1495,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"rest-server\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The restic REST server image. Pin a tag in production.","type":"string","kind":"string","default":"\"restic/rest-server:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the REST API (restic repository endpoint).","type":"number","kind":"number","default":"8000","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for restic repositories and the .htpasswd file (/data).","type":"string","kind":"string","default":"\"rest_server_data\"","placeholder":false,"sensitive":false},{"name":"disable_auth","description":"Disable HTTP basic auth (no .htpasswd needed). Fine on a trusted internal network; keep it false and create users for anything reachable.","type":"bool","kind":"bool","default":"true","placeholder":false,"sensitive":false},{"name":"append_only","description":"Run append-only: clients can create and read snapshots but cannot delete them (ransomware-resistant). Prune from the server side instead.","type":"bool","kind":"bool","default":"true","placeholder":false,"sensitive":false},{"name":"extra_options","description":"Extra flags appended to the server OPTIONS (e.g. \"--private-repos\", \"--prometheus\").","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8000"}],"volumes":["/data"],"tasks":1,"image":"restic/rest-server:latest"},"related":[{"id":"backup","name":"backup"}],"icon":{"kind":"monogram","text":"R","color":"#D97706"}},{"id":"rustdesk","name":"rustdesk","description":"RustDesk Server — self-hosted infrastructure for the RustDesk remote-desktop client: the ID/rendezvous server (hbbs) and relay server (hbbr) in one supervised container. Run your own remote-support backend with no third-party servers. Host-networked, with a volume for the server keys.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/rustdesk","appUrl":"https://rustdesk.com","category":"Networking","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run rustdesk --registry nomploy","repo":"rustdesk/rustdesk-server","stars":10447,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"rustdesk\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The RustDesk server (s6, hbbs+hbbr) image. Pin a tag in production.","type":"string","kind":"string","default":"\"rustdesk/rustdesk-server-s6:latest\"","placeholder":false,"sensitive":false},{"name":"relay_host","description":"Public IP or hostname clients use to reach the relay (RELAY). Empty = not set (clients fall back to the ID server's address).","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"encrypted_only","description":"Reject unencrypted connections (ENCRYPTED_ONLY: 1 = require encryption).","type":"number","kind":"number","default":"0","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for the server keys (id_ed25519) and database (/data).","type":"string","kind":"string","default":"\"rustdesk_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 128\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"reg","port":"21115"},{"name":"main","port":"21116"},{"name":"relay","port":"21117"},{"name":"ws","port":"21118"},{"name":"relayws","port":"21119"}],"volumes":["/data"],"tasks":1,"image":"rustdesk/rustdesk-server-s6:latest"},"related":[],"icon":{"kind":"brand","slug":"rustdesk","hex":"#024EFF","title":"RustDesk"}},{"id":"seaweedfs","name":"seaweedfs","description":"SeaweedFS — a fast, Apache-2.0 distributed object store with an S3-compatible API. Deployed single-node all-in-one (master + volume + filer + S3 gateway in one process) as a host-networked Nomad service with a persistent Docker volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/seaweedfs","appUrl":"https://seaweedfs.com","category":"Object storage","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run seaweedfs --registry nomploy","repo":"seaweedfs/seaweedfs","stars":34910,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"seaweedfs\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The SeaweedFS container image. Pin a tag in production.","type":"string","kind":"string","default":"\"chrislusf/seaweedfs:latest\"","placeholder":false,"sensitive":false},{"name":"s3_port","description":"Host port for the S3-compatible API — the endpoint your S3 clients use.","type":"number","kind":"number","default":"8333","placeholder":false,"sensitive":false},{"name":"master_port","description":"Host port for the master server + its web UI. SeaweedFS also binds the gRPC port master_port+10000 on the host.","type":"number","kind":"number","default":"9333","placeholder":false,"sensitive":false},{"name":"volume_port","description":"Host port for the volume server (+10000 for its gRPC port). Default 8080 — change it if another host service already uses 8080.","type":"number","kind":"number","default":"8080","placeholder":false,"sensitive":false},{"name":"filer_port","description":"Host port for the filer + its web UI (+10000 for its gRPC port).","type":"number","kind":"number","default":"8888","placeholder":false,"sensitive":false},{"name":"access_key","description":"S3 access key for the admin identity. Leave BOTH access_key and secret_key empty to run open (Allow-All mode, anonymous access). Set both to require authentication for all S3 requests.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"secret_key","description":"S3 secret key for the admin identity. Baked into the job as a rendered config — treat it as a secret.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /data (object data + master + filer metadata). This is all of SeaweedFS's state — back it up. SeaweedFS runs as root, so a fresh volume is writable.","type":"string","kind":"string","default":"\"seaweedfs_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put (this pack runs a single all-in-one alloc). On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources. Raise memory for large datasets — the volume server keeps needle indexes in memory.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"s3","port":"8333"},{"name":"master","port":"9333"},{"name":"volume","port":"8080"},{"name":"filer","port":"8888"}],"volumes":["/data"],"tasks":1,"image":"chrislusf/seaweedfs:latest"},"related":[{"id":"backup","name":"backup"},{"id":"loki","name":"loki"}],"icon":{"kind":"monogram","text":"S","color":"#16A34A"}},{"id":"soketi","name":"soketi","description":"soketi — a fast, open-source WebSocket server that is protocol-compatible with Pusher Channels, for real-time features (live updates, notifications, presence) in your apps. Deployed as a stateless host-networked Nomad service with a default app credential set. A self-hosted drop-in for Pusher.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/soketi","appUrl":"https://soketi.app","category":"Messaging","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run soketi --registry nomploy","repo":"soketi/soketi","stars":5635,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"soketi\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The soketi container image. Pin a tag in production.","type":"string","kind":"string","default":"\"quay.io/soketi/soketi:latest-16-alpine\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the WebSocket server (SOKETI_PORT).","type":"number","kind":"number","default":"6001","placeholder":false,"sensitive":false},{"name":"metrics_port","description":"Host port for the Prometheus metrics endpoint.","type":"number","kind":"number","default":"9601","placeholder":false,"sensitive":false},{"name":"app_id","description":"Default app id (SOKETI_DEFAULT_APP_ID).","type":"string","kind":"string","default":"\"app-id\"","placeholder":false,"sensitive":false},{"name":"app_key","description":"Default app key (SOKETI_DEFAULT_APP_KEY). CHANGE THIS.","type":"string","kind":"string","default":"\"app-key\"","placeholder":false,"sensitive":true},{"name":"app_secret","description":"Default app secret (SOKETI_DEFAULT_APP_SECRET). CHANGE THIS.","type":"string","kind":"string","default":"\"app-secret\"","placeholder":false,"sensitive":true},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"ws","port":"6001"},{"name":"metrics","port":"9601"}],"volumes":[],"tasks":1,"image":"quay.io/soketi/soketi:latest-16-alpine"},"related":[],"icon":{"kind":"monogram","text":"S","color":"#FF6600"}},{"id":"statping","name":"statping","description":"Statping-ng — a status page for monitoring your websites and services, with uptime history, response-time graphs, incident tracking, and notifications. Deployed as a single host-networked Nomad service on SQLite with a persistent data volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/statping","appUrl":"https://github.com/statping-ng/statping-ng","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run statping --registry nomploy","repo":"statping-ng/statping-ng","stars":1992,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"statping\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Statping-ng container image. Pin a tag in production.","type":"string","kind":"string","default":"\"adamboutcher/statping-ng:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Statping-ng web UI (PORT).","type":"number","kind":"number","default":"8104","placeholder":false,"sensitive":false},{"name":"admin_user","description":"Initial admin username (ADMIN_USER).","type":"string","kind":"string","default":"\"admin\"","placeholder":false,"sensitive":false},{"name":"admin_password","description":"Initial admin password (ADMIN_PASSWORD). CHANGE THIS.","type":"string","kind":"string","default":"\"changeme-please\"","placeholder":true,"sensitive":true},{"name":"data_volume","description":"Named volume for config, SQLite database, and assets (/app).","type":"string","kind":"string","default":"\"statping_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8104"}],"volumes":["/app"],"tasks":1,"image":"adamboutcher/statping-ng:latest"},"related":[],"icon":{"kind":"monogram","text":"S","color":"#E6522C"}},{"id":"stirling-pdf","name":"stirling-pdf","description":"Stirling-PDF — a locally hosted web app with 50+ tools to manipulate PDFs: merge, split, convert, OCR, sign, compress, and more. Everything runs on your server; nothing is sent out. Deployed as a host-networked Nomad service.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/stirling-pdf","appUrl":"https://www.stirlingpdf.com","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run stirling-pdf --registry nomploy","repo":"Stirling-Tools/Stirling-PDF","stars":92851,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"stirling-pdf\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Stirling-PDF container image. Use a `-fat` tag if you need OCR/extra features. Pin a tag in production.","type":"string","kind":"string","default":"\"stirlingtools/stirling-pdf:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the web UI. Default 8096 (the app listens on 8080 by default; set via SERVER_PORT).","type":"number","kind":"number","default":"8096","placeholder":false,"sensitive":false},{"name":"enable_login","description":"Enable Stirling-PDF's built-in login/user management. When true, set an initial admin via env in the rendered job or the first-run flow. Default false = open (keep it internal).","type":"bool","kind":"bool","default":"false","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources. Raise memory for OCR / large PDFs.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 1024\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8096"}],"volumes":[],"tasks":1,"image":"stirlingtools/stirling-pdf:latest"},"related":[],"icon":{"kind":"monogram","text":"S","color":"#0EA5E9"}},{"id":"surrealdb","name":"surrealdb","description":"SurrealDB — a scalable, multi-model database (document, graph, relational, and more) with a SQL-like query language, queryable over HTTP and WebSocket. Deployed as a host-networked Nomad service with RocksDB storage on a persistent volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/surrealdb","appUrl":"https://surrealdb.com","category":"Databases","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run surrealdb --registry nomploy","repo":"surrealdb/surrealdb","stars":33057,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"surrealdb\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The SurrealDB container image. Pin a tag in production.","type":"string","kind":"string","default":"\"surrealdb/surrealdb:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the SurrealDB HTTP/WebSocket API.","type":"number","kind":"number","default":"8000","placeholder":false,"sensitive":false},{"name":"root_user","description":"Initial root username (created on first start, then persisted in storage).","type":"string","kind":"string","default":"\"root\"","placeholder":false,"sensitive":false},{"name":"root_password","description":"Initial root password. CHANGE THIS.","type":"string","kind":"string","default":"\"root\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /data (the RocksDB storage). SurrealDB runs as root, so a fresh volume is writable. Back it up.","type":"string","kind":"string","default":"\"surrealdb_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8000"}],"volumes":["/data"],"tasks":1,"image":"surrealdb/surrealdb:latest"},"related":[],"icon":{"kind":"brand","slug":"surrealdb","hex":"#FF00A0","title":"SurrealDB"}},{"id":"syncthing","name":"syncthing","description":"Syncthing — continuous, peer-to-peer file synchronization between your devices, with no central server and end-to-end TLS. Deployed as a single host-networked Nomad service with a persistent config/data volume and its web GUI bound on all interfaces.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/syncthing","appUrl":"https://syncthing.net","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run syncthing --registry nomploy","repo":"syncthing/syncthing","stars":88863,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"syncthing\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The official Syncthing container image. Pin a tag in production.","type":"string","kind":"string","default":"\"syncthing/syncthing:latest\"","placeholder":false,"sensitive":false},{"name":"gui_port","description":"Host port for the Syncthing web GUI.","type":"number","kind":"number","default":"8384","placeholder":false,"sensitive":false},{"name":"sync_port","description":"Host port for device-to-device sync traffic (TCP and QUIC/UDP).","type":"number","kind":"number","default":"22000","placeholder":false,"sensitive":false},{"name":"uid","description":"UID Syncthing runs as (PUID). The data volume is chown'd to this at startup.","type":"number","kind":"number","default":"1000","placeholder":false,"sensitive":false},{"name":"gid","description":"GID Syncthing runs as (PGID).","type":"number","kind":"number","default":"1000","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for Syncthing's config, keys, and default sync folder (/var/syncthing).","type":"string","kind":"string","default":"\"syncthing_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"gui","port":"8384"},{"name":"sync","port":"22000"}],"volumes":["/var/syncthing"],"tasks":2,"image":"syncthing/syncthing:latest"},"related":[{"id":"filebrowser","name":"filebrowser"},{"id":"navidrome","name":"navidrome"},{"id":"photoprism","name":"photoprism"}],"icon":{"kind":"brand","slug":"syncthing","hex":"#0891D1","title":"Syncthing"}},{"id":"timescaledb","name":"timescaledb","description":"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.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/timescaledb","appUrl":"https://www.timescale.com","category":"Databases","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run timescaledb --registry nomploy","repo":"timescale/timescaledb","stars":23567,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"timescaledb\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The TimescaleDB container image (PostgreSQL + TimescaleDB extension). Pin a tag in production.","type":"string","kind":"string","default":"\"timescale/timescaledb:latest-pg16\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port the database listens on (host networking). Pick a free port on the target node.","type":"number","kind":"number","default":"5432","placeholder":false,"sensitive":false},{"name":"db_name","description":"Initial database created on first boot (the timescaledb extension is available in it).","type":"string","kind":"string","default":"\"app\"","placeholder":false,"sensitive":false},{"name":"db_user","description":"Superuser role created on first boot.","type":"string","kind":"string","default":"\"app\"","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for db_user. CHANGE THIS — it is baked into the job env.","type":"string","kind":"string","default":"\"timescale\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"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.","type":"string","kind":"string","default":"\"timescaledb_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"db","port":"5432"}],"volumes":["/var/lib/postgresql/data"],"tasks":1,"image":"timescale/timescaledb:latest-pg16"},"related":[],"icon":{"kind":"brand","slug":"timescale","hex":"#FDB515","title":"Timescale"}},{"id":"trilium","name":"trilium","description":"Trilium Notes (TriliumNext) — a hierarchical note-taking and personal knowledge-base app with rich text, code notes, scripting, and full-text search. Deployed as a single host-networked Nomad service with a persistent data volume (SQLite).","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/trilium","appUrl":"https://github.com/TriliumNext/Trilium","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run trilium --registry nomploy","repo":"TriliumNext/Trilium","stars":37946,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"trilium\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The TriliumNext container image. Pin a tag in production.","type":"string","kind":"string","default":"\"triliumnext/trilium:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Trilium web UI (TRILIUM_PORT).","type":"number","kind":"number","default":"8102","placeholder":false,"sensitive":false},{"name":"uid","description":"UID Trilium runs as (USER_UID). The data volume is chown'd to this at startup.","type":"number","kind":"number","default":"1000","placeholder":false,"sensitive":false},{"name":"gid","description":"GID Trilium runs as (USER_GID).","type":"number","kind":"number","default":"1000","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Named volume for Trilium's data (document.db + config + attachments), at /home/node/trilium-data.","type":"string","kind":"string","default":"\"trilium_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8102"}],"volumes":["/home/node/trilium-data"],"tasks":2,"image":"triliumnext/trilium:latest"},"related":[{"id":"docmost","name":"docmost"}],"icon":{"kind":"brand","slug":"trilium","hex":"#000000","title":"Trilium"}},{"id":"typesense","name":"typesense","description":"Typesense — a fast, typo-tolerant open-source search engine (an open alternative to Algolia/Elasticsearch) with a simple API and instant search. Deployed as a host-networked Nomad service with a persistent volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/typesense","appUrl":"https://typesense.org","category":"Search","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run typesense --registry nomploy","repo":"typesense/typesense","stars":26581,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"typesense\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Typesense container image. Pin a tag in production.","type":"string","kind":"string","default":"\"typesense/typesense:27.1\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Typesense HTTP API.","type":"number","kind":"number","default":"8108","placeholder":false,"sensitive":false},{"name":"api_key","description":"Admin API key — required. CHANGE THIS; clients send it in the X-TYPESENSE-API-KEY header.","type":"string","kind":"string","default":"\"changeme\"","placeholder":true,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /data (the search index). Typesense runs as root, so a fresh volume is writable. Back it up (or re-index).","type":"string","kind":"string","default":"\"typesense_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources. Typesense keeps indexes in memory — raise for large datasets.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8108"}],"volumes":["/data"],"tasks":1,"image":"typesense/typesense:27.1"},"related":[{"id":"meilisearch","name":"meilisearch"}],"icon":{"kind":"monogram","text":"T","color":"#14B8A6"}},{"id":"umami","name":"umami","description":"Umami — simple, privacy-friendly, open-source web analytics (a cookie-free Google Analytics alternative). Deployed all-in-one with its PostgreSQL database in a single host-networked Nomad job; runs schema migrations on start.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/umami","appUrl":"https://umami.is","category":"Analytics","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run umami --registry nomploy","repo":"umami-software/umami","stars":38961,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"umami\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Umami container image (PostgreSQL build). Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/umami-software/umami:postgresql-latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Umami web UI / tracking endpoint. Default 3005 to avoid the panel (:3000), grafana (:3001), gitea (:3002), metabase (:3003).","type":"number","kind":"number","default":"3005","placeholder":false,"sensitive":false},{"name":"app_secret","description":"Secret used to sign auth tokens. Set a random string in production (keep it stable). Empty = Umami derives one.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"postgres_image","description":"PostgreSQL image backing Umami.","type":"string","kind":"string","default":"\"postgres:16-alpine\"","placeholder":false,"sensitive":false},{"name":"db_port","description":"Host port PostgreSQL listens on. Umami connects on 127.0.0.1.","type":"number","kind":"number","default":"5432","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for the Umami database user. CHANGE THIS. (DB name and user are both \"umami\".)","type":"string","kind":"string","default":"\"umami\"","placeholder":false,"sensitive":true},{"name":"db_data_volume","description":"Docker named volume for the Postgres data dir — all analytics data. Back it up. A fresh volume inherits the image's data-dir ownership.","type":"string","kind":"string","default":"\"umami_db_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin the job to one node so the Postgres local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"umami_resources","description":"Resources for the Umami task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"postgres_resources","description":"Resources for the PostgreSQL task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"3005"},{"name":"db","port":"5432"}],"volumes":["/var/lib/postgresql/data"],"tasks":2,"image":"ghcr.io/umami-software/umami:postgresql-latest"},"related":[],"icon":{"kind":"brand","slug":"umami","hex":"#000000","title":"Umami"}},{"id":"uptime-kuma","name":"uptime-kuma","description":"Uptime Kuma — a self-hosted uptime/status monitoring tool (HTTP, TCP, ping, DNS, and more) with a slick dashboard and alerting. Deployed as a host-networked Nomad service with a persistent Docker volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/uptime-kuma","appUrl":"https://uptime.kuma.pet","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run uptime-kuma --registry nomploy","repo":"louislam/uptime-kuma","stars":91710,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"uptime-kuma\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Uptime Kuma container image.","type":"string","kind":"string","default":"\"louislam/uptime-kuma:1\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Uptime Kuma web UI. Default 3001 is Uptime Kuma's own default — change it if it clashes with the grafana/monitoring packs on the same node.","type":"number","kind":"number","default":"3001","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Docker named volume for /app/data (SQLite DB, config, uploaded icons). All of Uptime Kuma's state.","type":"string","kind":"string","default":"\"uptime_kuma_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"3001"}],"volumes":["/app/data"],"tasks":1,"image":"louislam/uptime-kuma:1"},"related":[{"id":"gatus","name":"gatus"},{"id":"ntfy","name":"ntfy"}],"icon":{"kind":"brand","slug":"uptimekuma","hex":"#5CDD8B","title":"Uptime Kuma"}},{"id":"valkey","name":"valkey","description":"Valkey — an open-source (BSD), high-performance key/value datastore that is a drop-in replacement for Redis (the community fork after Redis's license change). Deployed as a host-networked Nomad service with AOF persistence on a volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/valkey","appUrl":"https://valkey.io","category":"Databases","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run valkey --registry nomploy","repo":"valkey-io/valkey","stars":27279,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"valkey\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Valkey container image. Pin a tag in production.","type":"string","kind":"string","default":"\"valkey/valkey:8-alpine\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port Valkey listens on.","type":"number","kind":"number","default":"6379","placeholder":false,"sensitive":false},{"name":"password","description":"Optional password (requirepass). Empty = no auth (fine on a trusted network).","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /data (AOF persistence). A fresh volume inherits the image's dir ownership (uid 999), so Valkey can write it.","type":"string","kind":"string","default":"\"valkey_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"valkey","port":"6379"}],"volumes":["/data"],"tasks":1,"image":"valkey/valkey:8-alpine"},"related":[{"id":"dragonfly","name":"dragonfly"},{"id":"redis","name":"redis"},{"id":"redis-exporter","name":"redis-exporter"},{"id":"redisinsight","name":"redisinsight"}],"icon":{"kind":"monogram","text":"V","color":"#4169E1"}},{"id":"vaultwarden","name":"vaultwarden","description":"Vaultwarden — a lightweight, Rust-based server implementing the Bitwarden API (password manager) for self-hosting. Deployed as a host-networked Nomad service with a persistent Docker volume; uses the bundled SQLite database.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/vaultwarden","appUrl":"https://github.com/dani-garcia/vaultwarden","category":"Identity","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run vaultwarden --registry nomploy","repo":"dani-garcia/vaultwarden","stars":68037,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"vaultwarden\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Vaultwarden container image.","type":"string","kind":"string","default":"\"vaultwarden/server:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Vaultwarden web vault / API. Default 8280 (avoids 8222 used by the nats pack's monitoring).","type":"number","kind":"number","default":"8280","placeholder":false,"sensitive":false},{"name":"domain","description":"Public URL Vaultwarden is served at (e.g. https://vault.example.com). STRONGLY recommended — WebAuthn/U2F, some clients, and the admin page need it correct. Empty = leave unset (works for basic LAN use over the IP).","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"signups_allowed","description":"Allow open user registration. Set false once your users have signed up (or use invitations from the admin page).","type":"bool","kind":"bool","default":"true","placeholder":false,"sensitive":false},{"name":"admin_token","description":"Argon2/plain token guarding the /admin page. Empty = admin page DISABLED (recommended unless you need it). If set, treat it as a secret.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /data (SQLite DB, RSA keys, attachments, icon cache). All of Vaultwarden's state — BACK IT UP. Vaultwarden runs as root, so a fresh volume is writable.","type":"string","kind":"string","default":"\"vaultwarden_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8280"}],"volumes":["/data"],"tasks":1,"image":"vaultwarden/server:latest"},"related":[{"id":"openbao","name":"openbao"}],"icon":{"kind":"brand","slug":"vaultwarden","hex":"#000000","title":"Vaultwarden"}},{"id":"verdaccio","name":"verdaccio","description":"Verdaccio — a lightweight private npm registry and proxy: publish private packages, cache and proxy npmjs, and control access with users and scopes. Deployed as a single host-networked Nomad service with a storage volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/verdaccio","appUrl":"https://verdaccio.org","category":"Dev tools","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run verdaccio --registry nomploy","repo":"verdaccio/verdaccio","stars":17897,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"verdaccio\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Verdaccio container image. Pin a tag in production.","type":"string","kind":"string","default":"\"verdaccio/verdaccio:6\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Verdaccio registry / web UI (VERDACCIO_PORT).","type":"number","kind":"number","default":"4873","placeholder":false,"sensitive":false},{"name":"uid","description":"UID Verdaccio runs as (VERDACCIO_USER_UID). The storage volume is chown'd to this at startup.","type":"number","kind":"number","default":"10001","placeholder":false,"sensitive":false},{"name":"gid","description":"GID for the storage volume (Verdaccio's default group).","type":"number","kind":"number","default":"65533","placeholder":false,"sensitive":false},{"name":"storage_volume","description":"Named volume for published packages and htpasswd (/verdaccio/storage).","type":"string","kind":"string","default":"\"verdaccio_storage\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"4873"}],"volumes":["/verdaccio/storage"],"tasks":2,"image":"verdaccio/verdaccio:6"},"related":[{"id":"gitea","name":"gitea"}],"icon":{"kind":"brand","slug":"verdaccio","hex":"#4B5E40","title":"Verdaccio"}},{"id":"victoria-logs","name":"victoria-logs","description":"VictoriaLogs — a fast, resource-efficient open-source log database from the VictoriaMetrics team, with its own LogsQL query language and a built-in UI. A lightweight alternative to Loki/Elasticsearch. Deployed as a single host-networked Nomad service with a persistent volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/victoria-logs","appUrl":"https://docs.victoriametrics.com/victorialogs/","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run victoria-logs --registry nomploy","repo":"VictoriaMetrics/VictoriaLogs","stars":2306,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"victoria-logs\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The VictoriaLogs container image. Pin a tag in production.","type":"string","kind":"string","default":"\"victoriametrics/victoria-logs:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the HTTP API + UI (ingestion, LogsQL queries; UI at /select/vmui).","type":"number","kind":"number","default":"9428","placeholder":false,"sensitive":false},{"name":"retention","description":"How long to keep logs (-retentionPeriod), e.g. \"7d\", \"30d\", \"1y\".","type":"string","kind":"string","default":"\"30d\"","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Docker named volume for /victoria-logs-data (the log storage). VictoriaLogs runs as root, so a fresh volume is writable. Back it up.","type":"string","kind":"string","default":"\"victoria_logs_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local storage volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources. Raise for high log ingestion / long retention.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"9428"}],"volumes":["/victoria-logs-data"],"tasks":1,"image":"victoriametrics/victoria-logs:latest"},"related":[{"id":"loki","name":"loki"},{"id":"victoriametrics","name":"victoriametrics"}],"icon":{"kind":"brand","slug":"victoriametrics","hex":"#621773","title":"VictoriaMetrics"}},{"id":"victoriametrics","name":"victoriametrics","description":"VictoriaMetrics — a fast, cost-efficient, open-source time-series database and monitoring solution, Prometheus-compatible (remote-write target + PromQL/MetricsQL). Deployed as a single host-networked Nomad service with a persistent Docker volume.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/victoriametrics","appUrl":"https://victoriametrics.com","category":"Observability","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run victoriametrics --registry nomploy","repo":"VictoriaMetrics/VictoriaMetrics","stars":17756,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"victoriametrics\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The VictoriaMetrics single-node image. Pin a tag in production.","type":"string","kind":"string","default":"\"victoriametrics/victoria-metrics:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the HTTP API (ingestion, PromQL/MetricsQL queries, vmui at /vmui).","type":"number","kind":"number","default":"8428","placeholder":false,"sensitive":false},{"name":"retention","description":"How long to keep data (VictoriaMetrics -retentionPeriod). Number = months (e.g. \"3\"), or use a suffix like \"30d\", \"1y\".","type":"string","kind":"string","default":"\"3\"","placeholder":false,"sensitive":false},{"name":"data_volume","description":"Docker named volume for /victoria-metrics-data (the time-series storage). VictoriaMetrics runs as root, so a fresh volume is writable. Back it up.","type":"string","kind":"string","default":"\"victoriametrics_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local storage volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources. Raise for high ingestion / long retention.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8428"}],"volumes":["/victoria-metrics-data"],"tasks":1,"image":"victoriametrics/victoria-metrics:latest"},"related":[{"id":"grafana","name":"grafana"},{"id":"victoria-logs","name":"victoria-logs"}],"icon":{"kind":"brand","slug":"victoriametrics","hex":"#621773","title":"VictoriaMetrics"}},{"id":"vikunja","name":"vikunja","description":"Vikunja — an open-source, self-hosted to-do and project management app (lists, kanban, gantt, reminders). Deployed as a single host-networked Nomad service using the bundled SQLite database, with a persistent volume for data and file uploads.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/vikunja","appUrl":"https://vikunja.io","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run vikunja --registry nomploy","repo":"go-vikunja/vikunja","stars":5483,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"vikunja\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Vikunja (unified frontend+API) container image. Pin a tag in production.","type":"string","kind":"string","default":"\"vikunja/vikunja:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for Vikunja (web UI + API).","type":"number","kind":"number","default":"3456","placeholder":false,"sensitive":false},{"name":"public_url","description":"Public URL Vikunja is served at, e.g. https://tasks.example.com/ (trailing slash). Needed so the frontend can reach the API when behind a domain/proxy. Empty = same-origin (works for direct http://<node-ip>:<port> access).","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"service_secret","description":"Secret used to sign JWT sessions. Set a random string and keep it stable (changing it logs everyone out). Empty = Vikunja generates a new one each start.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Docker named volume for /db (SQLite database + file uploads under /db/files). A prestart task chowns it to uid 1000 (Vikunja's user) so it can write. Back it up.","type":"string","kind":"string","default":"\"vikunja_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — pin to one node so the local volume stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"3456"}],"volumes":["/db"],"tasks":2,"image":"vikunja/vikunja:latest"},"related":[],"icon":{"kind":"monogram","text":"V","color":"#0EA5E9"}},{"id":"weaviate","name":"weaviate","description":"Weaviate — an open-source vector database for semantic search and AI/RAG apps, with REST + GraphQL + gRPC APIs and pluggable vectorizer modules. Deployed as a single host-networked Nomad service with a persistent data volume. Pairs with the ollama and open-webui packs.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/weaviate","appUrl":"https://weaviate.io","category":"AI","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run weaviate --registry nomploy","repo":"weaviate/weaviate","stars":16839,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"weaviate\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Weaviate container image. Pin a tag in production.","type":"string","kind":"string","default":"\"cr.weaviate.io/semitechnologies/weaviate:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Weaviate REST + GraphQL API.","type":"number","kind":"number","default":"8087","placeholder":false,"sensitive":false},{"name":"grpc_port","description":"Host port for the Weaviate gRPC API (used by the v4 clients).","type":"number","kind":"number","default":"50051","placeholder":false,"sensitive":false},{"name":"anonymous_access","description":"Allow unauthenticated access. Ignored when api_key is set.","type":"bool","kind":"bool","default":"true","placeholder":false,"sensitive":false},{"name":"api_key","description":"If set, enables API-key auth with this key (and disables anonymous access).","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"data_volume","description":"Named volume for Weaviate's data (/var/lib/weaviate).","type":"string","kind":"string","default":"\"weaviate_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 1000\n    memory = 1024\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8087"},{"name":"grpc","port":"50051"}],"volumes":["/var/lib/weaviate"],"tasks":1,"image":"cr.weaviate.io/semitechnologies/weaviate:latest"},"related":[{"id":"ollama","name":"ollama"},{"id":"qdrant","name":"qdrant"}],"icon":{"kind":"monogram","text":"W","color":"#6366F1"}},{"id":"whoami","name":"whoami","description":"whoami — a tiny HTTP service that echoes back the request (headers, client IP, hostname). Handy for testing ingress/routing, load balancing, and service discovery. Deployed as a stateless host-networked Nomad service.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/whoami","appUrl":"https://github.com/traefik/whoami","category":"Networking","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run whoami --registry nomploy","repo":"traefik/whoami","stars":1420,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"whoami\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The whoami container image.","type":"string","kind":"string","default":"\"traefik/whoami:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port whoami listens on.","type":"number","kind":"number","default":"8097","placeholder":false,"sensitive":false},{"name":"count","description":"Number of instances (stateless — >1 is useful for testing load balancing across replicas).","type":"number","kind":"number","default":"1","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 100\n    memory = 32\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"8097"}],"volumes":[],"tasks":1,"image":"traefik/whoami:latest"},"related":[],"icon":{"kind":"brand","slug":"traefikproxy","hex":"#24A1C1","title":"Traefik Proxy"}},{"id":"whoogle","name":"whoogle","description":"Whoogle Search — a self-hosted, ad-free, privacy-respecting metasearch engine that proxies Google results with no tracking, no cookies, and no JavaScript required. Deployed as a stateless host-networked Nomad service; use it as a browser search engine.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/whoogle","appUrl":"https://github.com/benbusby/whoogle-search","category":"Search","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run whoogle --registry nomploy","repo":"benbusby/whoogle-search","stars":11570,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"whoogle\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Whoogle Search container image. Pin a tag in production.","type":"string","kind":"string","default":"\"benbusby/whoogle-search:latest\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Whoogle web UI (EXPOSE_PORT).","type":"number","kind":"number","default":"5010","placeholder":false,"sensitive":false},{"name":"username","description":"Optional HTTP basic-auth username (WHOOGLE_USER). Empty for both = no auth.","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":false},{"name":"password","description":"Optional HTTP basic-auth password (WHOOGLE_PASS).","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"constraints","description":"Placement constraints. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"The task resources.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"5010"}],"volumes":[],"tasks":1,"image":"benbusby/whoogle-search:latest"},"related":[],"icon":{"kind":"monogram","text":"W","color":"#14B8A6"}},{"id":"wikijs","name":"wikijs","description":"Wiki.js — a modern, powerful wiki with a Markdown/WYSIWYG editor, full-text search, access control, and Git/storage sync. Deployed as an all-in-one host-networked Nomad job: a PostgreSQL sidecar plus the Wiki.js app (content is stored in Postgres, so only the database needs a volume).","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/wikijs","appUrl":"https://js.wiki","category":"Apps","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run wikijs --registry nomploy","repo":"requarks/wiki","stars":28953,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"wikijs\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The Wiki.js container image. Pin a tag in production.","type":"string","kind":"string","default":"\"ghcr.io/requarks/wiki:2\"","placeholder":false,"sensitive":false},{"name":"postgres_image","description":"The PostgreSQL image for the bundled database.","type":"string","kind":"string","default":"\"postgres:16-alpine\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port for the Wiki.js web UI (PORT).","type":"number","kind":"number","default":"3010","placeholder":false,"sensitive":false},{"name":"db_port","description":"Host port for the co-located PostgreSQL.","type":"number","kind":"number","default":"5432","placeholder":false,"sensitive":false},{"name":"db_password","description":"Password for the Wiki.js PostgreSQL user.","type":"string","kind":"string","default":"\"wikijs\"","placeholder":false,"sensitive":true},{"name":"db_data_volume","description":"Named volume for PostgreSQL data (/var/lib/postgresql/data). Holds all wiki content.","type":"string","kind":"string","default":"\"wikijs_db_data\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"resources","description":"Resources for the Wiki.js app task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false},{"name":"postgres_resources","description":"Resources for the PostgreSQL task.","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 300\n    memory = 256\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[{"name":"http","port":"3010"},{"name":"db","port":"5432"}],"volumes":["/var/lib/postgresql/data"],"tasks":2,"image":"ghcr.io/requarks/wiki:2"},"related":[{"id":"docmost","name":"docmost"},{"id":"hedgedoc","name":"hedgedoc"}],"icon":{"kind":"brand","slug":"wikidotjs","hex":"#1976D2","title":"Wiki.js"}},{"id":"zot","name":"zot","description":"zot — a lightweight, OCI-native container image registry, deployed as a Nomad service. Anonymous pull by default (overlay-internal), optional authenticated push.","version":"0.1.0","sourceUrl":"https://github.com/Nomploy/nomad-packs/tree/main/packs/zot","appUrl":"https://zotregistry.dev","category":"Dev tools","registry":"github.com/Nomploy/nomad-packs","runCommand":"nomad-pack run zot --registry nomploy","repo":"project-zot/zot","stars":2797,"variables":[{"name":"job_name","description":"The name of the Nomad job.","type":"string","kind":"string","default":"\"zot\"","placeholder":false,"sensitive":false},{"name":"namespace","description":"The Nomad namespace to deploy into.","type":"string","kind":"string","default":"\"default\"","placeholder":false,"sensitive":false},{"name":"datacenters","description":"The datacenters to deploy to.","type":"list(string)","kind":"list","default":"[\"*\"]","placeholder":false,"sensitive":false},{"name":"image","description":"The zot container image. zot publishes per-arch images — use zot-linux-amd64 or zot-linux-arm64 to match the target node.","type":"string","kind":"string","default":"\"ghcr.io/project-zot/zot-linux-amd64:v2.1.5\"","placeholder":false,"sensitive":false},{"name":"port","description":"Host port the registry listens on (the job uses host networking, so it's reachable at <node-ip>:<port>).","type":"number","kind":"number","default":"5000","placeholder":false,"sensitive":false},{"name":"count","description":"Number of instances (keep at 1 for local-disk storage).","type":"number","kind":"number","default":"1","placeholder":false,"sensitive":false},{"name":"data_dir","description":"Host directory bind-mounted for the blob store, so images survive restarts. Pin the job (see constraints) to keep this stable.","type":"string","kind":"string","default":"\"/opt/zot\"","placeholder":false,"sensitive":false},{"name":"constraints","description":"Placement constraints — e.g. pin to a control-plane node so data_dir stays put. On a nomploy cluster: attribute = \"$${meta.nomploy_control_plane}\", operator = \"=\", value = \"true\".","type":"list(object({ attribute = string operator = string value = string }))","kind":"list","default":"[]","placeholder":false,"sensitive":false},{"name":"anonymous_pull","description":"Allow anonymous (unauthenticated) pulls. Recommended true for a registry that only listens on a private/overlay network. Only takes effect when htpasswd is set (otherwise the registry is fully open).","type":"bool","kind":"bool","default":"true","placeholder":false,"sensitive":false},{"name":"htpasswd","description":"htpasswd line(s) enabling authenticated push (user:bcrypthash). Generate with: htpasswd -bnBC10 <user> <pass>. Leave empty for a fully open registry (no auth at all).","type":"string","kind":"string","default":"\"\"","placeholder":false,"sensitive":true},{"name":"resources","description":"The task resources. Raise memory if you enable CVE scanning (Trivy).","type":"object({ cpu = number memory = number })","kind":"object","default":"{\n    cpu    = 500\n    memory = 512\n  }","placeholder":false,"sensitive":false}],"facts":{"ports":[],"volumes":[],"tasks":1,"image":"ghcr.io/project-zot/zot-linux-amd64:v2.1.5"},"related":[{"id":"gitea","name":"gitea"}],"icon":{"kind":"monogram","text":"Z","color":"#609926"}}]}