this post was submitted on 18 Oct 2025
30 points (100.0% liked)

Selfhosted

60253 readers
581 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

Detailed Rules Post

  1. Be civil.

  2. No spam.

  3. Posts are to be related to self-hosting.

  4. Don't duplicate the full text of your blog or readme if you're providing a link.

  5. Submission headline should match the article title.

  6. No trolling.

  7. Promotion posts require active participation, with an account that is at least 30 days old. F/LOSS without a paywall has exceptions, with requirements. See the rules link for details.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 3 years ago
MODERATORS
 

Hi there! Recently I've been setting up a self-hosted instance of matrix, using Synapse in docker, but I've been struggling to get voice chat working, could anyone give me some pointers? It looks like I need something called a TURN server, but I can't find any good instructions to set this up, or if this is actually what I need to enable voice chat.

Thank you so much to any responses!

Edit: this is what my compose file looks like (with some information ommitted)

services:  
  synapse:  
    image: ghcr.io/element-hq/synapse:latest  
    restart: unless-stopped  
    environment:  
      - SYNAPSE_CONFIG_PATH=/data/homeserver.yaml  
    volumes:  
      - ./files:/data  
    depends_on:  
      - db  
    ports:  
      - 8008:8008/tcp  
    networks:  
      - npm_proxy  
  db:  
    image: docker.io/postgres:15-alpine  
    environment:  
      - POSTGRES_USER=**Ommitted**  
      - POSTGRES_PASSWORD=**Ommitted**  
      - POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C  
    volumes:  
      - ./schemas:/var/lib/postgresql/data  
    restart: unless-stopped  
networks:  
  npm_proxy:  
    external: true  

Update: someone on windows is able to call me, but on their phone, it says MISSING_MATRIX_RTC_FOCUS. I'm going to look into this

top 11 comments
sorted by: hot top controversial new old
[–] domoel@feddit.org 5 points 8 months ago (1 children)

Thanks! I had gotten it working by setting element_call in the .well-known to call.element.io, but I followed this and it works great! Unfortunately, the legacy call is oddly inconsistent, some people can use it, but some can't.

[–] yaroto98@lemmy.world 4 points 8 months ago* (last edited 8 months ago) (2 children)

Did you create your own docker container, or did you use the official one?

I have the official one up and running, voice and video chat work out of the box.

I just updated the post with my compose.yaml file in case that's helpful

[–] guynamedzero@piefed.zeromedia.vip 2 points 8 months ago* (last edited 8 months ago)

I've tried using the docker container at ghcr.io/element-hq/synapse and https://hub.docker.com/r/matrixdotorg/synapse, whenever someone tries to call another, it just stays on "connecting" forever

[–] JadedBlueEyes@programming.dev 3 points 8 months ago* (last edited 8 months ago) (1 children)

All of the other answers mentioning coturn here are wrong - your friend is trying to call you using element call, which needs an instance of a livekit and a JWT micro service to grant permissions to use the livekit instance. You can use a livekit cloud account, but you do need to host the JWT service. I would suggest looking up Element's documentation

[–] suzune@ani.social 1 points 8 months ago

This is probably the reason. Older element versions has video and telephony via native interfaces and coturn/turnserver for firewall hole poking.

The newer Element X uses a different infrastructure that even allows multi user conferences. You need to update your well-known server response to point it to the new infrastructure: https://github.com/element-hq/element-call

[–] Eirikr70@jlai.lu 3 points 8 months ago
[–] olorin99@kbin.earth 2 points 8 months ago

I'd recommend using https://github.com/spantaleev/matrix-docker-ansible-deploy. It makes managing synapse and related services pretty easy.

[–] tekato@lemmy.world 2 points 8 months ago

You have a higher chance of solving this issue if you ask in #webrtc:matrix.org

[–] stratself@lemdro.id 2 points 8 months ago

You'll need a TURN server to relay calls and provide signalling capabilities, which is needed most of the time. Here's Synapse docs on it, and I'll probably use coturn:

https://element-hq.github.io/synapse/latest/turn-howto.html


There's also this new technology called Element Call, which uses a diffent tool called LiveKit. You should check it out too

https://github.com/element-hq/element-call/blob/livekit/README.md