Nomploy Nomad Packs

← All packs

sillytavern v0.1.0

AI

SillyTavern — a powerful local frontend for text-generation and roleplay with LLMs, supporting many backends (OpenAI, Anthropic, Ollama, KoboldAI and more), characters, group chats and extensions. Deployed as a single host-networked Nomad service.

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

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

1 task http 8000 4 volumes image ghcr.io/sillytavern/sillytavern:latest tracks :latest image bumped today
Variables 14
values.hcl

Save as values.hcl, edit, then run:

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

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

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

# The SillyTavern container image. Pin a tag in production.
image = "ghcr.io/sillytavern/sillytavern:latest"

# Host port for the SillyTavern web UI.
port = 8000

# Enable HTTP basic authentication (true/false). Strongly recommended if exposed.
basic_auth = "false"

# Basic-auth username (used when basic_auth is true).
basic_auth_user = "user"

# Basic-auth password (used when basic_auth is true). CHANGE THIS.
basic_auth_password = "sillytavern_change_me"

# Named volume for SillyTavern config (/home/node/app/config).
config_volume = "sillytavern_config"

# Named volume for user data: chats, characters, settings (/home/node/app/data).
data_volume = "sillytavern_data"

# Named volume for server plugins (/home/node/app/plugins).
plugins_volume = "sillytavern_plugins"

# Named volume for third-party UI extensions.
extensions_volume = "sillytavern_extensions"

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

# The task resources.
resources = {
    cpu    = 500
    memory = 512
  }
NameTypeDefaultDescription
job_name string
"sillytavern"
The name of the Nomad job.
namespace string
"default"
The Nomad namespace to deploy into.
datacenters list
["*"]
The datacenters to deploy to.
image string
"ghcr.io/sillytavern/sillytavern:latest"
The SillyTavern container image. Pin a tag in production.
port number
8000
Host port for the SillyTavern web UI.
basic_auth string
"false"
Enable HTTP basic authentication (true/false). Strongly recommended if exposed.
basic_auth_user string
"user"
Basic-auth username (used when basic_auth is true).
basic_auth_password set me string
"sillytavern_change_me"
Basic-auth password (used when basic_auth is true). CHANGE THIS.
config_volume string
"sillytavern_config"
Named volume for SillyTavern config (/home/node/app/config).
data_volume string
"sillytavern_data"
Named volume for user data: chats, characters, settings (/home/node/app/data).
plugins_volume string
"sillytavern_plugins"
Named volume for server plugins (/home/node/app/plugins).
extensions_volume string
"sillytavern_extensions"
Named volume for third-party UI extensions.
constraints list
[]
Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
resources object
{
    cpu    = 500
    memory = 512
  }
The task resources.
Back up this pack

This pack stores data in 4 Docker named volumes: sillytavern_configsillytavern_datasillytavern_pluginssillytavern_extensions

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/sillytavern_config/_data \
  /var/lib/docker/volumes/sillytavern_data/_data \
  /var/lib/docker/volumes/sillytavern_plugins/_data \
  /var/lib/docker/volumes/sillytavern_extensions/_data

rclone (sync to S3/R2)

rclone sync /var/lib/docker/volumes/sillytavern_config/_data backup:<bucket>/sillytavern_config
rclone sync /var/lib/docker/volumes/sillytavern_data/_data backup:<bucket>/sillytavern_data
rclone sync /var/lib/docker/volumes/sillytavern_plugins/_data backup:<bucket>/sillytavern_plugins
rclone sync /var/lib/docker/volumes/sillytavern_extensions/_data backup:<bucket>/sillytavern_extensions

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

sillytavern

SillyTavern is a powerful, locally hosted frontend for chatting and roleplaying with large language models. It connects to a wide range of backends (OpenAI, Anthropic, Google, Mistral, OpenRouter, Ollama, KoboldAI, text-generation-webui and more) and adds rich character cards, group chats, world info/lorebooks, prompt tooling, TTS and a big extension ecosystem.

This pack runs SillyTavern as a single host-networked Nomad service.

Deploy

nomad-pack run sillytavern --registry=nomploy \
  --var basic_auth=true --var basic_auth_password=$(openssl rand -hex 12)

Open http://<node-ip>:8000 and add your backend API keys in the connections panel.

Configuration

Variable Default Description
image ghcr.io/sillytavern/sillytavern:latest Container image (pin a tag in production).
port 8000 Host port for the web UI.
basic_auth false Enable HTTP basic authentication.
basic_auth_user user Basic-auth username.
basic_auth_password placeholder Basic-auth password — change this.
config_volume sillytavern_config Volume for config.
data_volume sillytavern_data Volume for chats/characters/settings.
resources 500 MHz / 512 MB CPU and memory for the task.

Security: This pack disables whitelist mode so the UI is reachable over the network. If it's exposed beyond a trusted LAN, enable basic_auth or put it behind an authenticating reverse proxy.

Config, data, plugins and extensions each persist in their own volume.