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).
Needs nomad-pack on PATH. The script only adds the nomploy registry and runs this pack.
Source ↗ Project ↗ ★ 21.1k ⚑ Report an issue
Save as values.hcl, edit, then run:
# 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
}
| Name | Type | Default | Description |
|---|---|---|---|
| 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. |
No variables match.
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.
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.
nomad-pack run wekan --registry=nomploy --var root_url=https://boards.example.com
Open http://<node-ip>:8080 and register the first account.
| 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.