Nomploy Nomad Packs

← All packs

wekan v0.1.0

Productivity

WeKan — an open-source kanban board (a self-hosted Trello alternative) with boards, swimlanes, cards, checklists, due dates and multi-user collaboration. Deployed as an all-in-one host-networked Nomad job (MongoDB + app).

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

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

2 tasks http 8080mongo 27017 2 volumes image ghcr.io/wekan/wekan:latest tracks :latest image bumped today
Variables 13
values.hcl

Save as values.hcl, edit, then run:

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

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

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

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

# The MongoDB image for the bundled database (needs a CPU with AVX for 5.0+).
mongo_image = "mongo:7.0"

# Host port for the WeKan web UI.
port = 8080

# Host port for the bundled MongoDB.
mongo_port = 27017

# Public URL WeKan is served from (used in links/emails). Set to your address.
root_url = "http://localhost:8080"

# Named volume for WeKan uploads/attachments (/data).
data_volume = "wekan_data"

# Named volume for MongoDB data.
mongo_data_volume = "wekan_mongo_data"

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

# Resources for the WeKan app task (Meteor/Node is memory-hungry).
resources = {
    cpu    = 1000
    memory = 1536
  }

# Resources for the bundled MongoDB task.
mongo_resources = {
    cpu    = 500
    memory = 512
  }
NameTypeDefaultDescription
job_name string
"wekan"
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/wekan/wekan:latest"
The WeKan container image. Pin a tag in production.
mongo_image string
"mongo:7.0"
The MongoDB image for the bundled database (needs a CPU with AVX for 5.0+).
port number
8080
Host port for the WeKan web UI.
mongo_port number
27017
Host port for the bundled MongoDB.
root_url string
"http://localhost:8080"
Public URL WeKan is served from (used in links/emails). Set to your address.
data_volume string
"wekan_data"
Named volume for WeKan uploads/attachments (/data).
mongo_data_volume string
"wekan_mongo_data"
Named volume for MongoDB data.
constraints list
[]
Placement constraints. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
resources object
{
    cpu    = 1000
    memory = 1536
  }
Resources for the WeKan app task (Meteor/Node is memory-hungry).
mongo_resources object
{
    cpu    = 500
    memory = 512
  }
Resources for the bundled MongoDB task.
Back up this pack

This pack stores data in 2 Docker named volumes: wekan_mongo_datawekan_data

⚠ This pack bundles a database. A cold copy of the volume can be inconsistent — for a reliable backup, dump the DB (pg_dump / mysqldump) or stop the job while backing up.

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/wekan_mongo_data/_data \
  /var/lib/docker/volumes/wekan_data/_data

rclone (sync to S3/R2)

rclone sync /var/lib/docker/volumes/wekan_mongo_data/_data backup:<bucket>/wekan_mongo_data
rclone sync /var/lib/docker/volumes/wekan_data/_data backup:<bucket>/wekan_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

wekan

WeKan is an open-source kanban board — a self-hosted alternative to Trello. It offers boards with swimlanes and lists, cards with checklists, labels, due dates, attachments and comments, role-based sharing, rules/automation, and import from Trello, all running on your own server.

This pack deploys WeKan all-in-one as a single host-networked Nomad job: MongoDB (bundled as a prestart sidecar) plus the WeKan app.

Deploy

nomad-pack run wekan --registry=nomploy --var root_url=https://boards.example.com

Open http://<node-ip>:8080 and register the first account.

Configuration

Variable Default Description
image ghcr.io/wekan/wekan:latest App image (pin a tag in production).
mongo_image mongo:7.0 Bundled MongoDB (needs AVX for 5.0+).
port 8080 Host port for the web UI.
mongo_port 27017 Host port for MongoDB.
root_url http://localhost:8080 Public URL used in generated links/emails.
data_volume wekan_data Volume for uploads/attachments (/data).
resources 1000 MHz / 1536 MB App resources (Meteor/Node wants memory).

Boards and data persist in MongoDB (mongo_data_volume); uploaded files in data_volume. Set root_url to the exact address users reach WeKan at.