Nomploy Nomad Packs

← All packs

searxng v0.1.0

Search

SearXNG — a privacy-respecting, hackable metasearch engine that aggregates results from 70+ search engines without profiling or tracking you. Deployed as a host-networked Nomad service with a persistent settings/config volume.

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

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

1 task http 8080 1 volume image searxng/searxng:latest tracks :latest image bumped today
Variables 10
values.hcl

Save as values.hcl, edit, then run:

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

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

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

# The SearXNG container image. Pin a tag in production.
image = "searxng/searxng:latest"

# Host port for the SearXNG web UI. The container listens on 8080; keep this at 8080 unless you also change server.port in the settings volume.
port = 8080

# Public base URL SearXNG is served at (SEARXNG_BASE_URL), e.g. https://search.example.com/. Empty = http://localhost:<port>/.
base_url = ""

# Secret used to sign the search UI (SEARXNG_SECRET). CHANGE THIS — generate with: openssl rand -hex 32.
secret_key = "change-me-to-a-random-secret"

# Named volume for SearXNG settings and config (/etc/searxng, holds settings.yml).
data_volume = "searxng_data"

# Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []

# Resources for the SearXNG task.
resources = {
    cpu    = 500
    memory = 256
  }
NameTypeDefaultDescription
job_name string
"searxng"
The name of the Nomad job.
namespace string
"default"
The Nomad namespace to deploy into.
datacenters list
["*"]
The datacenters to deploy to.
image string
"searxng/searxng:latest"
The SearXNG container image. Pin a tag in production.
port number
8080
Host port for the SearXNG web UI. The container listens on 8080; keep this at 8080 unless you also change server.port in the settings volume.
base_url string
""
Public base URL SearXNG is served at (SEARXNG_BASE_URL), e.g. https://search.example.com/. Empty = http://localhost:<port>/.
secret_key set me string
"change-me-to-a-random-secret"
Secret used to sign the search UI (SEARXNG_SECRET). CHANGE THIS — generate with: openssl rand -hex 32.
data_volume string
"searxng_data"
Named volume for SearXNG settings and config (/etc/searxng, holds settings.yml).
constraints list
[]
Placement constraints. Pin to the node holding the volume. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
resources object
{
    cpu    = 500
    memory = 256
  }
Resources for the SearXNG task.
Back up this pack

This pack stores data in one Docker named volume: searxng_data

restic

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

rclone (sync to S3/R2)

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

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

Readme

searxng

SearXNG — a privacy-respecting, hackable metasearch engine. It queries 70+ search engines and aggregates the results, without profiling you, storing your searches, or serving ads. A great private front-end for the web, and a popular search backend for self-hosted LLM tools.

Single host-networked Nomad service with a persistent settings volume (/etc/searxng).

Deploy

nomad-pack registry add nomploy https://github.com/Nomploy/nomad-packs
nomad-pack run searxng --registry=nomploy

Configure

Variable Default Description
port 8080 Web UI port. The container listens on 8080 — keep this unless you also change server.port in the settings volume.
base_url ""http://localhost:<port>/ SEARXNG_BASE_URL — set to your public URL.
secret_key change-me-… SEARXNG_SECRETchange it (openssl rand -hex 32).
data_volume searxng_data /etc/searxng — holds settings.yml.
image searxng/searxng:latest Container image. Pin a tag in production.
resources { cpu = 500, memory = 256 } Task resources.

On first boot SearXNG writes a default settings.yml into the volume. Edit it to tune engines, change server.port, or enable the JSON format under search.formats (required if you point Open WebUI or an LLM agent at SearXNG). Serves plain HTTP — front it with a reverse proxy for TLS. Pin the job to the node holding the volume with constraints.