2019-06-13 09:14:47 +02:00
2019-06-13 09:14:47 +02:00
2019-06-12 18:33:30 +02:00
2019-06-13 09:14:47 +02:00
2019-06-12 12:42:50 +02:00
2019-06-12 09:47:29 +00:00
2019-06-12 12:28:07 +02:00
2019-06-12 17:09:19 +02:00
2019-06-11 15:52:59 +00:00

Docker Image containing the Mosquitto MQTT Broker and the mosquitto-auth-plug

This project includes the mosquitto MQTT broker (https://github.com/eclipse/mosquitto, see also https://mosquitto.org/) and the mosquitto-auth-plug (https://github.com/jpmens/mosquitto-auth-plug, forked into https://github.com/wollud1969/mosquitto-auth-plug) as submodules.

Using Gitlab CI and a Dockerfile included in this project a Docker image based on Debian Linux is created.

Note, please: the author of mosquitto-auth-plug has archived his project because he don't want to be bothered concerning this software he is not longer using anymore. So, please, don't be tempted to send him questions again because you find this image useful but run into problems. Read the available resources first, finally you may contact me.

Mosquitto MQTT Broker

The Mosquitto MQTT Broker in this Docker image is built beyond the default build configuration with websockets support.

mosquitto-auth-plug

The mosquitto-auth-plug is build only with the MySQL/MariaDB backend. More than that I do not need at the moment.

Running the container

The container exposed the ports 1883 (MQTT), 8883 (MQTT over SSL) and 9001 (MQTT over websockets). Only the configuration directory containing mosquitto.conf and friends is prepared as a volume.

All logging is send to stdout, so it can be inspected using docker logs -f <mosquitto-container>

To start the container a script is provided, which might need to adjusted to the actual environment:

#!/bin/bash

IMAGE=registry.gitlab.com/wolutator/mosquitto-with-auth:latest
VOLUME=mosquitto-config

docker volume inspect $VOLUME > /dev/null || docker volume create $VOLUME

docker pull $IMAGE

docker run \
-d \
--rm \
-p1883:1883 \
-p8883:8883 \
-p9001:9001 \
-v $VOLUME:/opt/etc/mosquitto \
--link mariadb \
--name mosquitto \
$IMAGE

The container expects the main configuration file in the root of the volume named mosquitto.conf.

A very simple configuration, only supporting MQTT on port 1883 is:

pid_file /var/run/mosquitto.pid
log_dest stdout

persistence false

listener 1883
protocol mqtt
#allow_anonymous true
allow_anonymous false

auth_plugin /opt/lib/auth-plug.so
auth_opt_backends mysql
auth_opt_host mariadb
auth_opt_port 3306
auth_opt_dbname mosquittoauth
auth_opt_user mosquittoauth
auth_opt_pass xxx
auth_opt_userquery SELECT pw FROM users WHERE username = '%s'
auth_opt_aclquery SELECT topic FROM acls WHERE username = '%s' and rw >= %d

The required schema in the database is

CREATE TABLE users (
    id INTEGER AUTO_INCREMENT,
    username VARCHAR(25) NOT NULL,
    pw VARCHAR(128) NOT NULL,
    super INT(1) NOT NULL DEFAULT 0,
    PRIMARY KEY (id)
);
CREATE UNIQUE INDEX users_username ON users (username);

CREATE TABLE acls (
    id INTEGER AUTO_INCREMENT,
    username VARCHAR(25) NOT NULL,
    topic VARCHAR(256) NOT NULL,
    rw INTEGER(1) NOT NULL DEFAULT 1,	-- 1: read-only, 2: read-write
    PRIMARY KEY (id)
    );
CREATE UNIQUE INDEX acls_user_topic ON acls (username, topic(228));

The password is generated using the np tool provided by mosquitto-auth-plug, which is included in the image at /opt/bin. It can be used either within the container using docker exec -it <mosquitto-container> /opt/bin/np. You may also try to copy it from the container onto your Linux host. It should run, since it is only linked against typical Linux libraries, however, I wouldn't do that.

For further information consult the readme and the examples in the mosquitto-auth-plug project (https://github.com/jpmens/mosquitto-auth-plug or https://github.com/wollud1969/mosquitto-auth-plug).

Description
No description provided
Readme 109 KiB
Languages
Python 56%
Shell 23.7%
Dockerfile 20.3%