Guide

Host your own Mumble server

Mumcord doesn't need a special server: a plain Mumble server is all it takes. With Docker yours is up in about 15 minutes, even if you've never done this before.

  • 64738 port, TCP and UDP
  • 1 core and 512 MB RAM handle dozens of people
  • €0 open source; you only pay for the machine

In eight steps

  1. Pick a machine

    The easiest choice is a small Linux server from a hosting provider (a “VPS” for a few euros a month). It runs around the clock and has a fixed address. A computer at home or a Raspberry Pi works too; then you have to open a port on your router (step 5).

    Mumble needs very little power. The connection matters more: each person talking uses about 40–100 kbit/s.

  2. Install Docker

    Log in to the server over SSH. On Linux this command installs Docker including Compose. On Windows and macOS use Docker Desktop instead.

    Terminal
    curl -fsSL https://get.docker.com | sudo sh
    docker compose version

    If you see a version number, you're ready.

  3. Create a folder and a password

    Create a folder and generate a random password for the admin account SuperUser:

    Terminal
    mkdir -p ~/mumble && cd ~/mumble
    openssl rand -base64 24
    .env
    # Stays on the server. Never share it in Git, chats or screenshots.
    SUPERUSER_PASSWORD=paste-the-random-password-here
    SERVER_PASSWORD=

    Save the second file as .env and paste in the generated password (for example with nano .env). If not everyone with the address should get in, set a SERVER_PASSWORD that you give to your people. Then chmod 600 .env keeps other users of the machine out of the file.

  4. The docker-compose.yml

    This file goes into the same folder as docker-compose.yml. Change the server name and welcome text as you like; the rest is fine as it is.

    docker-compose.yml
    # Mumble server for Mumcord and any other Mumble client
    name: mumble
    
    services:
      mumble-server:
        image: mumblevoip/mumble-server:v1.5.735   # pinned version; raise it here to update
        restart: unless-stopped
        ports:
          - "64738:64738/tcp"   # connection and chat
          - "64738:64738/udp"   # voice
        volumes:
          - data:/data          # channels, registrations and certificate
        environment:
          # Passwords come from the .env file next to this one, never straight in here.
          MUMBLE_SUPERUSER_PASSWORD: ${SUPERUSER_PASSWORD:?SUPERUSER_PASSWORD is missing in .env}
          MUMBLE_CONFIG_SERVER_PASSWORD: ${SERVER_PASSWORD:-}   # empty = anyone with the address can join
          MUMBLE_CONFIG_REGISTER_NAME: "Our Server"              # name of the top channel
          MUMBLE_CONFIG_WELCOME_TEXT: "Welcome! Say hi in the chat."   # pinned at the top of the chat in Mumcord
          MUMBLE_CONFIG_USERS: "50"                             # at most this many at once
          MUMBLE_CONFIG_IMAGE_MESSAGE_LENGTH: "1048576"         # images in chat up to 1 MB (default: 128 KB)
          MUMBLE_CONFIG_TEXT_MESSAGE_LENGTH: "10000"            # longer messages (default: 5000 characters)
    
    volumes:
      data:

    The last two settings are there for Mumcord: pasted images may be larger, and long messages aren't cut off. Every other setting follows the same MUMBLE_CONFIG_… pattern, see the image documentation.

  5. Start it and open the port

    Start the server and take a quick look at the log:

    Terminal
    docker compose up -d
    docker compose logs -f   # Ctrl+C only stops the output

    Once it says Server listening on 0.0.0.0:64738, it's running. Now port 64738 for TCP and UDP has to be reachable from outside:

    Server with a firewall (for example ufw): sudo ufw allow 64738/tcp and sudo ufw allow 64738/udp. Some providers also have a firewall in their customer panel.

    Computer at home: set up port forwarding on your router for 64738 TCP and UDP to this computer.

  6. Connect with Mumcord

    In Mumcord, click + in the server bar and enter your server's IP address or name. A name is nicer than an IP: create an A record at your domain provider, such as voice.example.org, pointing to the IP.

    On first connect Mumcord shows the certificate's fingerprint. That's expected: the server created its own certificate on first start. Confirm it once; if it changes unexpectedly later, Mumcord warns you.

  7. Invite people

    Send your people a link. Clicking it opens Mumcord (or any other Mumble client) and connects right away; add a channel name at the end to land in the right channel:

    Terminal
    mumble://voice.example.org
    mumble://voice.example.org/Gaming

    Anyone who doesn't have Mumcord yet finds it at mumcord.app. Send a server password separately from the link.

  8. Set up channels and permissions

    Creating channels and handing out permissions comes to Mumcord with Epic 4. Until then, use the official Mumble client once:

    1. Connect with the username SuperUser and the password from .env.

    2. Right-click the top channel → Add, for every channel you want.

    3. So you don't need SuperUser every time: connect with Mumcord under your own name and click your name at the bottom left → Register on this server. Then, as SuperUser, top channel → Edit → Groups → add your name to the admin group.

Upkeep and problems

How do I update the server?

Put the new version after image: in docker-compose.yml (see the list on Docker Hub), then run docker compose pull and docker compose up -d. Channels and registrations are kept.

How do I make a backup?

Everything that matters lives in the mumble_data volume. Pause, pack, resume: docker compose stop, then docker run --rm -v mumble_data:/data -v "$PWD":/backup alpine tar czf /backup/mumble-backup.tar.gz -C /data . and finally docker compose start.

Nobody can reach the server.

Almost always the port is closed. Check with docker compose ps that the container runs, then the firewall, the provider's firewall and your router (step 5). If the server is at home, you may not reach the public address from inside your own network; test with the local IP then.

Connecting works, but voice lags.

Usually only TCP is open, not UDP. Mumcord then falls back to TCP on its own. That works but is slower. Open UDP 64738 as well.

I forgot the SuperUser password.

Put a new one in .env and run docker compose up -d. The server applies it on every start.

More help is in the wiki and the issues on GitHub. Wiki → Issues →