Skip to content

Upgrade & backup

Two things you should do regularly. Both take minutes.

Three things matter:

ItemWhereWhy
The server database/data/mumble-server.sqlite (in the volume)Channels, users, ACLs, chat history.
The file storage/data/file-server-storage/ (in the volume)Avatars, emotes, attachments.
Your .env fileon the hostServer settings, secrets.

The whole /data volume covers items 1 and 2. Back up the host-side config separately.

The simplest approach is to stop the server, copy the volume, and restart:

  1. Stop the server:

    Terminal window
    docker compose stop mumble-server
  2. Copy the volume:

    Terminal window
    docker run --rm \
    -v mumble-data:/source:ro \
    -v "$(pwd)":/dest \
    alpine \
    tar -czf /dest/mumble-backup-$(date +%F).tar.gz -C /source .
  3. Restart the server:

    Terminal window
    docker compose start mumble-server
  4. Also back up your .env:

    Terminal window
    cp .env "/secure/place/.env-mumble-$(date +%F)"

You can also back up without stopping if you accept the small risk of an inconsistent SQLite snapshot. For production it is safer to stop briefly.

A cron job that runs the steps above weekly is enough for most servers. Adjust the retention to your taste:

/etc/cron.weekly/mumble-backup
#!/bin/bash
set -e
cd /srv/mumble
docker compose stop mumble-server
docker run --rm \
-v mumble-data:/source:ro \
-v /backups/mumble:/dest \
alpine \
tar -czf /dest/mumble-$(date +%F).tar.gz -C /source .
docker compose start mumble-server
find /backups/mumble -mtime +60 -delete

Make it executable and you are done.

  1. Stop the server:

    Terminal window
    docker compose stop mumble-server
  2. Remove the existing volume:

    Terminal window
    docker volume rm mumble-data
    docker volume create mumble-data
  3. Restore:

    Terminal window
    docker run --rm \
    -v mumble-data:/dest \
    -v "$(pwd)":/source \
    alpine \
    tar -xzf /source/mumble-backup-2026-05-01.tar.gz -C /dest
  4. Start the server:

    Terminal window
    docker compose start mumble-server
  5. Reset the SuperUser password if needed:

    Terminal window
    docker exec mumble-server mumble-server \
    --ini /data/mumble_server_config.ini \
    --set-su-pw "new-password"

The official image is published to ghcr.io/fancy-mumble/mumble-server:latest.

  1. Take a backup (see above).

  2. Pull the new image:

    Terminal window
    docker compose pull mumble-server
  3. Recreate the container:

    Terminal window
    docker compose up -d mumble-server
  4. Watch the logs for migration messages:

    Terminal window
    docker compose logs -f mumble-server
  5. Connect with a client and sanity-check that channels, chat history, and avatars are all there.

If an upgrade goes wrong:

  1. Stop the server.
  2. Restore the previous backup (see “Restore” above).
  3. Set the image back to the previous tag.
  4. Start the server.

The database schema is only ever added to in minor versions, never removed, so rolling back the binary is safe as long as you also restore the database.

  1. On the old host: stop the server, take a backup.
  2. Copy the backup file and .env to the new host.
  3. On the new host: install Docker, copy your docker-compose.yml, restore from the backup, start the server.
  4. Update DNS to point at the new host.
  5. Once you have confirmed it works, retire the old server.

If you also change the public IP, update webrtcsfupublicip in your config or screen sharing will be broken until you do.

The two big spenders are persistent chat and link previews:

  • Lower pchatdefaultretentiondays to clear out old messages.
  • Lower plugin.file-server.retentionDays to clear out old files.

Then run VACUUM once to reclaim space:

Terminal window
docker exec mumble-server sqlite3 /data/mumble-server.sqlite "VACUUM;"

Restore from the most recent backup. Mumble’s SQLite database is normally robust, but a disk failure or a sudden power-cut can truncate it. Backups are your friend.

You are done with the server section. Continue with the admin pages to learn how to manage users, channels, and permissions: