Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added templates/bunkerm/assets/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added templates/bunkerm/assets/screenshot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
47 changes: 47 additions & 0 deletions templates/bunkerm/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { Output, Services, randomPassword, randomString } from "~templates-utils";
import { Input } from "./meta";

export function generate(input: Input): Output {
const services: Services = [];
const mqttPassword = randomPassword();
const jwtSecret = randomString(32);
const apiKey = randomString(32);
const authSecret = randomString(32);

services.push({
type: "app",
data: {
serviceName: input.appServiceName,
source: { type: "image", image: input.appServiceImage },
env: [
`MQTT_BROKER=localhost`,
`MQTT_PORT=1900`,
`MQTT_USERNAME=bunker`,
`MQTT_PASSWORD=${mqttPassword}`,
`JWT_SECRET=${jwtSecret}`,
`API_KEY=${apiKey}`,
`AUTH_SECRET=${authSecret}`,
`COOKIE_SECURE=true`,
`FRONTEND_URL=https://$(PRIMARY_DOMAIN)`,
`ALLOWED_ORIGINS=https://$(PRIMARY_DOMAIN)`,
`ALLOWED_HOSTS=*`,
`RATE_LIMIT_PER_MINUTE=100`,
`LOG_LEVEL=INFO`,
`API_LOG_FILE=/var/log/api/api_activity.log`,
`BROKER_LOG_PATH=/var/log/mosquitto/mosquitto.log`,
`CLIENT_LOG_PATH=/var/log/api/api_activity.log`,
`DYNSEC_PATH=/var/lib/mosquitto/dynamic-security.json`,
`MAX_UPLOAD_SIZE=10485760`,
].join("\n"),
ports: [{ published: 1900, target: 1900, protocol: "tcp" }],
mounts: [
{ type: "volume", name: "next-data", mountPath: "/nextjs/data" },
{ type: "volume", name: "mosquitto-data", mountPath: "/var/lib/mosquitto" },
{ type: "volume", name: "history-data", mountPath: "/var/lib/history" },
],
domains: [{ host: "$(EASYPANEL_DOMAIN)", port: 2000 }],
},
});

return { services };
}
83 changes: 83 additions & 0 deletions templates/bunkerm/meta.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
name: BunkerM
description:
BunkerM is a free, open-source, containerized MQTT management platform that
bundles Eclipse Mosquitto with a full-featured web dashboard in a single
Docker image. It provides dynamic security management for clients, roles,
groups, and ACLs, real-time monitoring of connections and broker logs, a
built-in MQTT browser for exploring topics and payloads, message history with
replay, local automation through schedulers and watchers, anomaly detection,
and optional cloud AI integration via BunkerAI. Everything deploys with a
single container — no external database or message broker needed.
instructions:
After deployment open the web UI at your configured domain. Log in with the
default credentials — email "admin@example.com" and password "password123".
Change the password immediately after the first login / signup using the
wizard. The MQTT broker is accessible on port 1900 (TCP). Use the MQTT
Username and MQTT Password environment variables to connect external IoT
clients.
changeLog:
- date: 2026-07-01
description: first release
links:
- label: Website
url: https://www.bunkerai.dev
- label: Documentation
url: https://github.com/bunkeriot/BunkerM#-table-of-contents
- label: GitHub
url: https://github.com/bunkeriot/BunkerM
contributors:
- name: Ahson Shaikh
url: https://github.com/Ahson-Shaikh
schema:
type: object
required:
- appServiceName
- appServiceImage
properties:
appServiceName:
type: string
title: App Service Name
default: bunkerm
appServiceImage:
type: string
title: App Service Image
default: bunkeriot/bunkerm:v2.1.0
benefits:
- title: All-in-One MQTT Platform
description:
A complete MQTT broker and management dashboard in a single container — no
separate Mosquitto install, no external databases, no complex setup.
- title: Dynamic Security Management
description:
Create and manage MQTT clients, roles, groups, and ACLs at runtime through
the web UI without restarting the broker.
- title: Real-Time Monitoring
description:
Live dashboard shows connected clients, message throughput, subscription
counts, and byte transfer charts updated in real time.
features:
- title: Eclipse Mosquitto Broker
description:
Runs a full production-grade Mosquitto MQTT broker on port 1900 with
dynamic security plugin enabled out of the box.
- title: MQTT Browser
description:
Explore topics, inspect payloads, and replay historical messages directly
from the web UI without a separate MQTT client.
- title: Local Automations
description:
Define schedulers and watchers to trigger MQTT publishes or alerts based
on time, topic patterns, or payload conditions.
- title: Anomaly Detection
description:
Built-in anomaly detection flags unusual message patterns or unauthorized
connection attempts in the broker log view.
- title: BunkerAI Integration
description:
Optionally connect to the BunkerAI cloud service to query broker state and
automate responses via web chat, Slack, or Telegram.
tags:
- MQTT
- IoT
- Monitoring
- Self-Hosted