Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/qbdesu/docker-murmur

A configurable docker image running Murmur, the official Mumble server.
https://github.com/qbdesu/docker-murmur

docker docker-compose docker-image mumble mumble-server murmur

Last synced: about 1 month ago
JSON representation

A configurable docker image running Murmur, the official Mumble server.

Awesome Lists containing this project

README

        

# docker-murmur

## Description

This docker image runs [Murmur](https://wiki.mumble.info/wiki/Main_Page), the server for the Mumble VOIP protocol. It consists of a small starter script to start Murmur in Alpine.

This isn't the most minimal and most resource efficient image there is, but this image is intended to provide easier and better configurability. The starter script allows setting most config options using environment variables which would otherwise not be possible using Murmur.

## Usage

### Quick Start

You want to expose the ports used by Mumble almost all of the time. If you don't clients won't be able to connect.

```bash
$ docker run -d \
-p 64738:64738 -p 64738:64738/udp \
necr0/murmur
```

### Persistent Data

By default this image will store all data in an SQLite3 database located in `/var/lib/murmur/murmur.sqlite`
```bash
$ docker run -d \
-p 64738:64738 -p 64738:64738/udp \
-v /path/to/data:/var/lib/murmur \
necr0/murmur
```

### Cutom Super User Password

Murmur will automatically set a randomly generated password for the `SuperUser` account on the first start and log it. If you want to use another password than the one generated by Murmur you need to set the `MURMUR_SUPERUSER_PASSWORD` environment variable. This will also change the password if another one has already been set by Murmur.
```bash
$ docker run -d \
-p 64738:64738 -p 64738:64738/udp \
-e MURMUR_SUPERUSER_PASSWORD= \
necr0/murmur
```

### Cutom TLS Certificate

While Murmur automatically generates a self-signed TLS certificate on startup you may want to use your own certificate and key. To do so you'll need to mount the certificate and key and set the `MURMUR_SSLCERT` and `MURMUR_SSLKEY` environment variables to point to the mounted files.
```bash
$ docker run -d \
-p 64738:64738 -p 64738:64738/udp \
-v /path/to/certificate:/opt/certificate:ro \
-v /path/to/key:/opt/key:ro \
-e MURMUR_SSLCERT=/opt/certificate \
-e MURMUR_SSLKEY=/opt/key \
necr0/murmur
```

## Docker Compose

Docker Compose should automatically create and manage a volume for your data if you don't do it yourself. It might still be worth considering to create a volume or bind mount yourself so you can manage it yourself.

### Persistent Data

By default this image will store all data in an SQLite3 database located in `/var/lib/murmur/murmur.sqlite`
```yaml
version: '3.1'
services:
murmur:
image: necr0/murmur
ports:
- 64738:64738
- 64738:64738/udp
volumes:
- /opt/mumble/data:/var/lib/murmur
```

### Cutom Super User Password

By default this image will store all data in an SQLite3 database located in `/var/lib/murmur/murmur.sqlite`
```yaml
version: '3.1'
services:
murmur:
image: necr0/murmur
ports:
- 64738:64738
- 64738:64738/udp
volumes:
- /opt/mumble/data:/var/lib/murmur
environment:
- MURMUR_SUPERUSER_PASSWORD=
```

### Cutom TLS Certificate

```yaml
version: '3.1'
services:
murmur:
image: necr0/murmur
ports:
- 64738:64738
- 64738:64738/udp
volumes:
- /path/to/certs:/opt/certs:ro
environment:
- MURMUR_SSLCERT=/opt/certs/cert.pem
- MURMUR_SSLKEY=/opt/certs/key.pem
```

## More Config Options

Most if not all of the options that would normally be configurable in the `murmur.ini` config file can be set using environment variables in this image.

The schema for these variables name is quite easy. Take whatever the config key in the `murmur.ini` file would be, replace all letters with their UPPERCASE variant, replace all dots(`.`) with underscores(`_`), and prefix the result with `MURMUR_`.
Examples:
* `registerName` becomes `MURMUR_REGISTERNAME`
* `sqlite_wal` becomes `MURMUR_SQLITE_WAL`
* `usersperchannel` becomes `MURMUR_USERSPERCHANNEL`
* `Ice.Warn.UnknownProperties` becomes `MURMUR_ICE_WARN_UNKNOWNPROPERTIES`

As you can see the `murmur.ini` file is a hot mess of cases. But the rule used to get the environment variable name doesn't change.

The config file is generated based on a template located at `/etc/murmur.ini`. The startup script of this image reads said template and interpolates variables into it. The resulting config file is placed in `/etc/murmur/config.ini`. If there is already a config file present this templating step is skipped.

You can mount a custom `murmur.ini` file either at `/etc/murmur.ini` so it will be templated or at `/etc/murmur/config.ini` so it will not be templated. The `MURMUR_SUPERUSER_PASSWORD` and `MURMUR_DEBUG_LOG_CONFIG` variables are handled somewhere else and are not affected by changing the `murmur.ini` file in any way.

If `MURMUR_DEBUG_LOG_CONFIG` is `true` the startup script will log the contents of `/etc/murmur/config.ini` before starting the server.

## Production Example

Below you can see an example like you would likely run it in production.
```yaml
version: '3.1'
services:
murmur:
image: necr0/murmur
ports:
- 64738:64738
- 64738:64738/udp
volumes:
- /opt/mumble/data:/var/lib/murmur
- /var/lib/dehydrated/certs/example.com:/var/lib/dehydrated/certs/mumble.example.com:ro
environment:
- MURMUR_REGISTERNAME=Example Server
- MURMUR_WELCOMETEXT=Welcome to Example Server, the best example server of them all!
- MURMUR_SSLCERT=/var/lib/dehydrated/certs/mumble.example.com/fullchain.pem
- MURMUR_SSLKEY=/var/lib/dehydrated/certs/mumble.example.com/privkey.pem
- MURMUR_SUPERUSER_PASSWORD=
```

## Feedback

If there are any problems with the image or if you have ideas on how to improve it please open an issue on [GitHub](https://github.com/Necr0/docker-murmur/issues).