Nomploy Nomad Packs

← All packs

webtop v0.1.0

Dev tools

Webtop — a full Linux desktop environment (XFCE, KDE, and more) that runs in a container and streams to your browser. Handy for a disposable, always-available workstation or a jump box. Deployed as a host-networked Nomad service with a persistent home volume.

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

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

1 task http 3000 1 volume image lscr.io/linuxserver/webtop:ubuntu-xfce pinned :ubuntu-xfce image bumped today
Variables 12
values.hcl

Save as values.hcl, edit, then run:

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

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

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

# The Webtop image. Pick a flavor tag (e.g. ubuntu-xfce, alpine-kde, debian-mate). Pin a tag in production.
image = "lscr.io/linuxserver/webtop:ubuntu-xfce"

# Host port for the web desktop. The container listens on 3000.
port = 3000

# User ID the desktop runs as (PUID).
puid = 1000

# Group ID the desktop runs as (PGID).
pgid = 1000

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

# Shared-memory size in bytes (browsers/apps in the desktop need a large /dev/shm).
shm_size = 1073741824

# Named volume for the desktop home / config (/config).
config_volume = "webtop_config"

# 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 Webtop task. A desktop needs generous CPU/RAM.
resources = {
    cpu    = 2000
    memory = 2048
  }
NameTypeDefaultDescription
job_name string
"webtop"
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/webtop:ubuntu-xfce"
The Webtop image. Pick a flavor tag (e.g. ubuntu-xfce, alpine-kde, debian-mate). Pin a tag in production.
port number
3000
Host port for the web desktop. The container listens on 3000.
puid number
1000
User ID the desktop runs as (PUID).
pgid number
1000
Group ID the desktop runs as (PGID).
tz string
"UTC"
Container timezone (TZ), e.g. Europe/Bratislava.
shm_size number
1073741824
Shared-memory size in bytes (browsers/apps in the desktop need a large /dev/shm).
config_volume string
"webtop_config"
Named volume for the desktop home / config (/config).
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    = 2000
    memory = 2048
  }
Resources for the Webtop task. A desktop needs generous CPU/RAM.
Back up this pack

This pack stores data in one Docker named volume: webtop_config

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/webtop_config/_data

rclone (sync to S3/R2)

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

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

webtop

Webtop — a full Linux desktop environment in a container, streamed to your browser (no VNC client needed). Choose XFCE, KDE, MATE, i3 and more via the image tag. Great as a disposable workstation, a jump box, or a place to run GUI apps on your server.

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

Deploy

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

Configure

Variable Default Description
port 3000 Web desktop port (CUSTOM_PORT).
image lscr.io/linuxserver/webtop:ubuntu-xfce Flavor tag (e.g. alpine-kde, debian-mate, fedora-i3). Pin in production.
shm_size 1073741824 (1 GB) Shared memory — browsers/apps in the desktop need a large /dev/shm.
config_volume webtop_config /config — the desktop home directory.
puid / pgid 1000 / 1000 User/group (PUID/PGID).
tz UTC Container timezone (TZ).
resources { cpu = 2000, memory = 2048 } Task resources. A desktop needs generous CPU/RAM.

Security: Webtop gives full shell + GUI access to a container on your host. Never expose it to the internet without an authenticating reverse proxy over TLS — treat it like remote root access. Pin the job to the node holding the volume with constraints.