- Docker Compose, or knowledge how to read a docker-compose file and run the docker containers yourself.
- A Matrix homeserver that supports application services (e.g. Synapse)
These instructions use theThe upstream image has been updated to match the maunium image.
dock.mau.dev/maunium/signaldimage instead of
docker.io/finn/signaldfor signald, as the former has a more recent version of Java and a sane default data directory.
- By default, the bridge runs as root. You can run it as a different user, but
make sure you
chownall the files and make signald run as the same user. Additionally set the log file to a path where the user is able to write (e.g.
- Create a directory for the bridge and cd into it:
mkdir mautrix-signal && cd mautrix-signal.
docker-compose.ymlthat contains something like this:
version: "3.7" services: mautrix-signal: container_name: mautrix-signal image: dock.mau.dev/mautrix/signal restart: unless-stopped volumes: - ./bridge:/data - ./signald:/signald depends_on: - signald # If synapse is running outside of docker, you'll need to expose the port. # Note that in most cases you should either run everything inside docker # or everything outside docker, rather than mixing docker things with # non-docker things. #ports: #- "29328:29328" # You'll also probably want this so the bridge can reach Synapse directly # using something like `http://host.docker.internal:8008` as the address: #extra_hosts: #- "host.docker.internal:host-gateway" # If synapse is in a different network, then add this container to that network. # Note the networks object at the bottom too. #networks: #- default # keep the container in the default network too so that the db container is reachable. #- synapsenet signald: container_name: signald image: docker.io/signald/signald restart: unless-stopped volumes: - ./signald:/signald db: image: postgres:13-alpine restart: unless-stopped environment: POSTGRES_USER: mautrixsignal POSTGRES_DATABASE: mautrixsignal POSTGRES_PASSWORD: foobar volumes: - ./db:/var/lib/postgresql/data # When synapse is in a different network (note the networks object in the service too): #networks: # synapsenet: # external: # name: synapsenet
docker-compose up -d signaldto start signald and make sure it doesn't crash.
docker-compose up mautrix-signalto make the bridge generate a config file for you, then
docker-compose stop mautrix-signalso it doesn't try to keep restarting while you're fixing the config.
- Update the config to your liking.
- As usual, you'll at least need to change the homeserver settings and add yourself to the permissions section.
- Only postgres is supported as the bridge database, so configure that too.
If you use the docker-compose example above directly,
postgres://mautrixsignal:foobar@db/mautrixsignalas the database URI (but change the password to something else than
- Additionally, you need to update the paths in the
/signald/attachments(if you can figure out how, you could even use a shared tmpfs for that directory to avoid unencrypted files being temporarily stored on disk).
- Generate the appservice registration by running the container again, same command as above.
- Add the path to the registration file to your Synapse's
- Restart Synapse to apply changes.
docker-compose up -dto start the bridge.
docker-compose up -d