Nomploy Nomad Packs

← All packs

thelounge v0.1.0

Messaging

The Lounge — a modern, self-hosted web IRC client that stays connected for you and syncs across devices. Deployed as a single host-networked Nomad service.

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

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

1 task http 9000 1 volume image lscr.io/linuxserver/thelounge:latest tracks :latest image bumped today
Variables 11
values.hcl

Save as values.hcl, edit, then run:

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

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

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

# The The Lounge container image. Pin a tag in production.
image = "lscr.io/linuxserver/thelounge:latest"

# Host port for the The Lounge web UI.
port = 9000

# Named volume mounted at /config (users, logs and settings).
data_volume = "thelounge_data"

# User ID that owns the files (PUID).
puid = 1000

# Group ID that owns the files (PGID).
pgid = 1000

# Container timezone (TZ), e.g. Europe/Bratislava.
tz = "UTC"

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

# The task resources.
resources = {
    cpu    = 300
    memory = 256
  }
NameTypeDefaultDescription
job_name string
"thelounge"
The name of the Nomad job.
namespace string
"default"
The Nomad namespace to deploy into.
datacenters list
["*"]
The datacenters to deploy to.
image string
"lscr.io/linuxserver/thelounge:latest"
The The Lounge container image. Pin a tag in production.
port number
9000
Host port for the The Lounge web UI.
data_volume string
"thelounge_data"
Named volume mounted at /config (users, logs and settings).
puid number
1000
User ID that owns the files (PUID).
pgid number
1000
Group ID that owns the files (PGID).
tz string
"UTC"
Container timezone (TZ), e.g. Europe/Bratislava.
constraints list
[]
Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
resources object
{
    cpu    = 300
    memory = 256
  }
The task resources.
Back up this pack

This pack stores data in one Docker named volume: thelounge_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/thelounge_data/_data

rclone (sync to S3/R2)

rclone sync /var/lib/docker/volumes/thelounge_data/_data backup:<bucket>/thelounge_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

thelounge

The Lounge — a modern, self-hosted web IRC client. It stays connected to IRC networks on your server (so you never miss messages), syncs across all your devices, and offers a clean, responsive UI with push notifications, link previews and multiple users.

Single host-networked Nomad service with a persistent config volume.

Deploy

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

Configure

Variable Default Description
port 9000 Web UI port.
image lscr.io/linuxserver/thelounge:latest Container image. Pin a tag in production.
data_volume thelounge_data /config — users, logs and settings.
puid / pgid 1000 / 1000 User/group that owns the files (PUID/PGID).
tz UTC Container timezone (TZ).
resources { cpu = 300, memory = 256 } Task resources.

Create a user from the container to log in, e.g. thelounge add <name> (exec into the task), or enable public mode in the config. Put it behind an authenticating reverse proxy over TLS if exposed. Pin the job to the node holding the volume with constraints.