Unset default voice region disables LiveKit

(#679) Bug Fixed self-hosting voice

Reproduction steps

  1. Follow the official 'Get Started' guide for deployment. Use the provided deploy/self-hosting/docker-compose.yml
  2. Put the Fluxer instance behind reverse proxy (may not be necessary for reproduction)
  3. Attempt to join a community VC

Expected behaviour

Joining a VC on a self-hosted instance works with default env vars. If voice region is not set to a sensible default automatically, LiveKit should fail loudly at startup.

Actual behaviour

Joining a VC fails with a 403, implying that VC features are disabled.

Details

What needs fixing?

Summary

VC is disabled unless a Voice Region is set, either in the Fluxer Admin panel or in the env var FLUXER_LIVEKIT_DEFAULT_REGION.

What the problem may be

The region topology is empty with default configuration. The 403 error symptom appears to occur due to the getVoiceToken RPC giving a FeatureTemporarilyDisabledError if the voice region DB is empty. the 403 symptom surfaced in the API logs:
{"level":"info","time":"2026-06-25T22:40:48.542Z","service":"fluxer-api",...,"path":"/internal/rpc","status":403,"durationMs":24,"msg":"Request completed"}
{"level":"info","time":"2026-06-25T23:09:11.441Z",...,"path":"/internal/rpc","status":403,...}
{"level":"info","time":"2026-06-25T23:12:18.725Z",...,"path":"/internal/rpc","status":403,...}

What fixed it for me

Setting FLUXER_LIVEKIT_DEFAULT_REGION to a region JSON object in the the docker-compose.yml ensures the voice.defaultRegion startup condition is satisfied. docker-compose.yml
  FLUXER_LIVEKIT_ENABLED: "true"
  FLUXER_LIVEKIT_API_KEY: ${LIVEKIT_API_KEY:?set LIVEKIT_API_KEY in .env}
  FLUXER_LIVEKIT_API_SECRET: ${LIVEKIT_API_SECRET:?set LIVEKIT_API_SECRET in .env}
  FLUXER_LIVEKIT_WEBHOOK_URL: http://api:8080/webhooks/livekit
  FLUXER_LIVEKIT_URL: wss://${FLUXER_DOMAIN}/livekit
  # Ensures startup condition voice.defaultRegion is set, this example sets it to Europe/Oslo
  FLUXER_LIVEKIT_DEFAULT_REGION: '{"id":"home","name":"Home","emoji":"🏠","latitude":59.91,"longitude":10.75}' 

LLM disclosure

LLM has been utilized for troubleshooting purposes. However, none of the text in this report is generated.

Suggested change

The documentation does not make it clear that a Voice Region is mandatory. Ship a sensible default region by adding FLUXER_LIVEKIT_DEFAULT_REGION to deploy/self-hosting/docker-compose.yml, or at minimum make the join-time error explicitly state "no voice region provisioned".

Merged posts

These posts were merged into this one. Their comments are now part of the conversation below, marked with where they came from.

Merged from #596 Self-Hosted: Unable to connect to voice

RexSystemoriginally by @nadd3r on GitHub

Report details

Summary

When trying to connect to voice channel you will see the yellow "Connecting..." in the bottom left of the web browser window for a few seconds before getting the error "Cannot connect to voice. Please try again later." This deployment is directly exposed to the internet with ports 80, 443, 7881, and 7882 exposed. There are no tunnels or VPNs involved.

Steps to reproduce

  1. Install Fluxer using Docker Compose
  2. Configure for direct internet exposure without tunnels or VPN
  3. Start containers
  4. Create initial admin account
  5. Create community
  6. Try and join voice

Environment

Version: 149.0.7827.103 (Official Build) (64-bit) OS: Ubuntu 26.04 Browser: Firefox

Logs or screenshots

api-1               | {"level":"info","time":"2026-06-16T16:54:31.380Z","service":"fluxer-api","env":"production","method":"GET","path":"/.well-known/fluxer","status":200,"durationMs":6,"msg":"Request completed"}
app-proxy-1         | 2026-06-16T16:54:31.382469Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
api-1               | {"level":"info","time":"2026-06-16T16:54:31.766Z","service":"fluxer-api","env":"production","method":"GET","path":"/.well-known/fluxer","status":200,"durationMs":6,"msg":"Request completed"}
app-proxy-1         | 2026-06-16T16:54:31.768925Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
api-1               | {"level":"info","time":"2026-06-16T16:54:32.467Z","service":"fluxer-api","env":"production","method":"POST","path":"/internal/rpc","status":200,"durationMs":75,"msg":"Request completed"}
api-1               | {"level":"info","time":"2026-06-16T16:54:32.564Z","service":"fluxer-api","env":"production","method":"GET","path":"/v1/premium/state","status":200,"durationMs":21,"msg":"Request completed"}
api-1               | {"level":"info","time":"2026-06-16T16:54:34.858Z","service":"fluxer-api","env":"production","method":"GET","path":"/v1/channels/1516480804572626948/messages","status":200,"durationMs":51,"msg":"Request completed"}
api-1               | {"level":"info","time":"2026-06-16T16:54:36.805Z","service":"fluxer-api","env":"production","method":"POST","path":"/internal/rpc","status":403,"durationMs":13,"msg":"Request completed"}

5 comments

Sign in with Fluxer to comment and vote.
Comment by @zehDonut
RexSystem 1 vote Merged from #596 originally by @zehDonut on GitHub
You will need to set up a voice server and voice region in the admin panel. I think the region can be mostly arbitrary, the voice server endpoint has to be wss://your-fluxer-domain.com/livekit
Comment by @davefatkin
RexSystem 1 vote Merged from #596 originally by @davefatkin on GitHub
Can confirm. Ran into the same issue but found the above and got it working. /admin/voice-regions
Comment by @nadd3r
RexSystem 1 vote Merged from #596 originally by @nadd3r on GitHub
You will need to set up a voice server and voice region in the admin panel. I think the region can be mostly arbitrary, the voice server endpoint has to be wss://your-fluxer-domain.com/livekit
Just a little extra for anyone also running into this issue:
  1. Go to chat.example.com/admin/voice-regions and create a region
  2. Refresh the page and you should see your new region
  3. Click the "Manage Servers" button to add a server
  4. Add your server. API key and API Secret are from the .env and your Endpoint should be something like wss://chat.example.com/livekit
Comment by @Seb1Zero
RexSystem 1 vote originally by @Seb1Zero on GitHub
You're my savior dude, thanks. Voice Channels never worked for me and I tried several different approaches but I never imagined I have to Add two lines in the docker-compose.yml. Now it works how it should.
Comment by @HanFarJR
RexSystem 1 vote originally by @HanFarJR on GitHub OP
This issue appears to have been resolved with the latest releases.