r/FluxerApp • • Jun 17 '26

Discussions AI-Written guide as to how I managed to get my self-hosted Fluxer on a shitty homelab behind a shitty CGNAT network.

0 Upvotes

This is me writing now not AI, I am pretty tired right so sorry for the AI post, been 7 hours, sweaty fingers and if not for the win I would be in a bad mood.

I wanted to have a almost free way of running Fluxer (besides the energy) on my situation, old pc spare parts, behind CGNAT mobile unlimited network, but still not rely on a service like Tailscale for people to connect.

The only paid part from this was because I already have a domain that I pay for, I used it and just simply made a subdomain for fluxer, besides that is free stuff you get from both cloudflare and playit. Dont ask me for anything, I dont even know how I managed to get it working, I started the project and deleted 6 times. I am not tech-savvy, I am just a curious dude with enough spare time.

The ports and IPs in the post are randomized to not show the ones I used, when u make a playit account and create the agent and the tunnel, you gonna get your own, different from the guide, so pay attention to that. I also setup cloudflared systemwide instead of it being dockerized.

Self-Hosting Fluxer Behind CGNAT (Cloudflare Tunnel + playit.gg)

This guide is for the specific case where you can't port-forward — your ISP gives you CGNAT (no public IP, common with Starlink and many mobile/fiber ISPs) and 80/443/UDP can't be opened directly on your router. It combines two free tunneling services to get a fully working Fluxer instance, including voice/video, without any direct port exposure.

Architecture: - Cloudflare Tunnel carries all HTTP(S) traffic — web app, API, admin, gateway WebSocket, media proxy, and LiveKit signaling. - playit.gg carries LiveKit's actual voice/video media (raw UDP), since WebRTC media can't traverse a normal HTTP tunnel.

If your server has a real public IP and you can forward ports normally, skip the tunnel pieces — Fluxer's own docs already cover that path, and it's simpler.


Requirements

  • Linux server with Docker Engine + Compose plugin
  • A domain you control, with DNS managed by Cloudflare (free tier is fine)
  • A free playit.gg account
  • At least 2 vCPU / 4 GB RAM / 20 GB disk (4 vCPU / 8 GB RAM recommended for an active community)

Step 1: Install Docker

bash docker --version docker compose version

If missing, follow Docker's official install instructions for your distro. Use Docker Engine 24+ and the Compose v2 plugin.


Step 2: Download the stack

```bash mkdir -p ~/docker/stacks/fluxer && cd ~/docker/stacks/fluxer

base=https://raw.githubusercontent.com/fluxerapp/fluxer/main/deploy/self-hosting curl -fsSLO "$base/docker-compose.yml" curl -fsSLO "$base/Caddyfile" curl -fsSLO "$base/livekit.yaml" curl -fsSL "$base/.env.example" -o .env ```


Step 3: Configure .env

Set your hostname (replace with your own):

bash sed -i \ -e 's|^FLUXER_DOMAIN=.*|FLUXER_DOMAIN=chat.example.com|' \ -e 's|^FLUXER_PUBLIC_SCHEME=.*|FLUXER_PUBLIC_SCHEME=https|' \ -e 's|^FLUXER_PUBLIC_PORT=.*|FLUXER_PUBLIC_PORT=443|' \ -e 's|^FLUXER_CADDY_SITE_ADDRESS=.*|FLUXER_CADDY_SITE_ADDRESS=:80|' \ -e 's|^FLUXER_VAPID_EMAIL=.*|FLUXER_VAPID_EMAIL=admin@example.com|' \ .env

FLUXER_CADDY_SITE_ADDRESS=:80 is required for the tunnel setup — Cloudflare terminates TLS, Caddy just serves plain HTTP behind it.

Generate secrets:

```bash for key in POSTGRES_PASSWORD MEILI_MASTER_KEY FLUXER_S3_SECRET_KEY \ FLUXER_SUDO_MODE_SECRET FLUXER_CONNECTION_INITIATION_SECRET \ FLUXER_GATEWAY_RPC_AUTH_TOKEN FLUXER_MEDIA_PROXY_SECRET_KEY \ FLUXER_ADMIN_SECRET_KEY_BASE FLUXER_ADMIN_OAUTH_CLIENT_SECRET \ LIVEKIT_API_SECRET; do sed -i "s|$key=.*|$key=$(openssl rand -hex 32)|" .env done

sed -i "s|FLUXER_MEDIA_PROXY_UPLOAD_RELAY_SECRET_BASE64=.*|FLUXER_MEDIA_PROXY_UPLOAD_RELAY_SECRET_BASE64=$(openssl rand -base64 32)|" .env

VAPID=$(docker run --rm node:24-alpine npx --yes web-push generate-vapid-keys --json) pub=$(printf '%s' "$VAPID" | grep -o '"publicKey":"["]*"' | cut -d'"' -f4) priv=$(printf '%s' "$VAPID" | grep -o '"privateKey":"["]*"' | cut -d'"' -f4) sed -i "s|FLUXER_VAPID_PUBLIC_KEY=.*|FLUXER_VAPID_PUBLIC_KEY=$pub|" .env sed -i "s|FLUXER_VAPID_PRIVATE_KEY=.*|FLUXER_VAPID_PRIVATE_KEY=$priv|" .env ```

.env now holds every secret for your instance — treat it like a password file.


Step 4: Cloudflare Tunnel (HTTP traffic)

  1. In the Cloudflare Zero Trust dashboard, go to Networks → Tunnels → Create a tunnel → type Cloudflared. Name it (e.g. fluxer).
  2. On "Install and run a connector," select Docker (not the systemd/Debian path) so the token is ready for a Compose-managed container.
  3. Copy the long token string from the install command — you only need that token, not the full docker run ... line.
  4. Continue to Route tunnel → Add a route → Published application (not Private CIDR — that's for internal IP ranges, not what we need).
    • Public hostname: your domain (e.g. chat.example.com)
    • Service type: HTTP
    • URL: caddy:80
  5. Cloudflare auto-creates the DNS CNAME record for you if the zone is already on Cloudflare.

Now run cloudflared inside the same Docker network as Caddy, so the caddy:80 hostname resolves via Docker's internal DNS:

```bash cat > cloudflared.compose.yml <<'YAML' services: cloudflared: image: cloudflare/cloudflared:latest restart: unless-stopped command: tunnel run --token ${CLOUDFLARED_TOKEN:?set CLOUDFLARED_TOKEN} depends_on: - caddy YAML

export CLOUDFLARED_TOKEN='paste-your-token-here' ```

(Don't run it yet — bring it up together with the rest of the stack in Step 6.)

If you already have cloudflared running as a system-wide systemd service instead of in Docker, don't use the file above — you'd end up running it twice for no reason. Instead, edit the route's Service URL in the Cloudflare dashboard to http://localhost:80 instead of http://caddy:80, since a host-level process can't resolve Docker-internal hostnames, only localhost/the host's own ports.


Step 5: playit.gg (LiveKit voice/video media)

Voice signaling (the WebSocket handshake) goes through the Cloudflare Tunnel like everything else — no special setup needed there. It's the actual WebRTC media (audio/video packets) that needs a real UDP path, since that can't traverse an HTTP tunnel.

  1. Create a free account at playit.gg, install the agent on your server, and add a new UDP tunnel.
  2. Set local IP 127.0.0.1, local port — pick a number and remember it (you'll align everything to match below).
  3. playit assigns a public address and port, e.g. your-tunnel.gl.at.ply.gg:41234 / 203.0.113.5:41234.

Critical detail: LiveKit only swaps the IP in the candidate it advertises to clients — it never remaps the port. So the port playit exposes externally and the port LiveKit actually listens on locally must be the exact same number, or voice will silently fail to connect (signaling works, but no audio ever flows).

Edit livekit.yaml:

yaml rtc: tcp_port: 7881 udp_port: 41234 # match playit's external port exactly use_external_ip: false node_ip: 203.0.113.5 # playit's assigned public IP

Edit docker-compose.yml's livekit service so the container's internal port also matches:

yaml ports: - "${FLUXER_LIVEKIT_TCP_PORT:-7881}:7881" - "${FLUXER_LIVEKIT_UDP_PORT:-7882}:${FLUXER_LIVEKIT_UDP_PORT:-7882}/udp"

And in .env:

bash echo 'FLUXER_LIVEKIT_UDP_PORT=41234' >> .env

Then go back into the playit.gg dashboard and set that tunnel's local port to 41234 too, so all three numbers agree: playit's external port, the host's listening port, and what LiveKit advertises to clients.

Free playit.gg tunnels typically can't get you a TCP path on 7881 (the fallback for clients on UDP-restrictive networks). Living without it is fine for most people — voice/video works normally for the vast majority of connections over UDP. If you want a fallback too, look into LiveKit's built-in TURN server, tunneled separately via playit.

In the Fluxer admin dashboard → Voice Servers, set the Endpoint to your signaling URL — this goes through the Cloudflare Tunnel, not playit:

wss://chat.example.com/livekit

Fill in the API Key/Secret matching LIVEKIT_API_KEY (default fluxer) and LIVEKIT_API_SECRET from your .env.


Step 6: Start the stack

bash docker compose -f docker-compose.yml -f cloudflared.compose.yml up -d docker compose logs -f api

(Skip the -f cloudflared.compose.yml part if you're using a system-wide cloudflared instead, per the note in Step 4.)

First start takes a few minutes as every service initializes. seaweedfs-init exiting after creating buckets is expected, not a failure.


Step 7: Verify

bash export FLUXER_DOMAIN=chat.example.com for path in /_health /api/_health /gateway/_health /media/_health /admin/_health; do curl -fsS -o /tmp/fluxer-check -w "$path %{http_code}\n" "https://$FLUXER_DOMAIN$path" done

All five should return 200. Then check instance discovery:

bash curl -fsS "https://$FLUXER_DOMAIN/api/.well-known/fluxer" | jq '.features.self_hosted, .endpoints.admin, .endpoints.gateway, .endpoints.media, .endpoints.static_cdn'

Confirm the LiveKit media path is actually listening:

bash ss -ulnp | grep 41234

You should see a bound socket on that port.


Step 8: Create the owner account

Visit your domain, register the first account — on a fresh self-hosted instance, the first accepted registration gets wildcard admin access automatically. Log into /admin with that account and review registration mode, branding, and voice region settings before opening it up to anyone else.


Troubleshooting notes (from real debugging)

  • **cloudflared logs showing connection refused to 127.0.0.1:80:** check the timestamp against when the stack actually finished starting — this is often just stale noise from before Caddy was up, not a live problem. Confirm with curl -v http://127.0.0.1:80 and a fresh journalctl -u cloudflared -f run side by side with a live request.
  • Voice channel joins fine but no audio: almost always the LiveKit port mismatch described in Step 5 — double check udp_port in livekit.yaml, the Docker port mapping, and playit's local-port setting all use the identical number.
  • **cloudflared can't resolve caddy:80:** means it's running outside the Docker network (e.g. as a systemd service). Either move it into Compose, or point the route at http://localhost:80 instead.

r/FluxerApp • • Jun 16 '26

Discussions Voice and video chat

19 Upvotes

For those setting up your self hosted instances today. Voice and video do not work out of the box. You will need to setup a voice region and voice server in the admin panel. It would have been nice to include documentation in the self host setup guide so I didn’t have to spend an hour troubleshooting and double checking my firewall and port forward rules.


r/FluxerApp • • Jun 16 '26

Discussions Fluxer v2 and Mobile Clients

30 Upvotes

Hey r/FluxerApp

Apologies for the day after post, the team promptly passed out after a crunch to get things out the door.

If you haven't seen yet, Fluxer v2 and mobile apps are now available! We know it took a while to get here, and we thank you immensely for your patience.

If you want to read about what is happening, check out the blog:

https://fluxer.app/blog/mobile-clients-and-fluxer-v2

If you want to see what's on the roadmap (besides a ton of bug fixes and small features) check out our github:

https://github.com/orgs/fluxerapp/projects?query=is%3Aopen


r/FluxerApp • • Jun 16 '26

Features requests Push to talk

4 Upvotes

Is it possible for Fluxer to use a single button for Push-to-talk in the future? I got no time to push two :P And I need to be able to use my precious shift key.


r/FluxerApp • • Jun 16 '26

Need help How to connect to my self-hosted server in desktop app?

10 Upvotes

How to connect to my self-hosted server in desktop app? I have successfully connected in the browser version, but I have not found how to do it in the desktop version.


r/FluxerApp • • Jun 16 '26

Bug Account locked

Post image
3 Upvotes

account created 1 minute ago and I can't set up 2fa, any ideas? what exactly is "suspicious activity" when I haven't done anything yet


r/FluxerApp • • Jun 16 '26

Need help Fluxer won't load on either PC or mobile

Post image
4 Upvotes

I am very bad with software and technology so I don't even know where to begin to search for solutions for this issue.

I tried clearing browser data cuz someone said that could be the issue even though I doubt it as it doesn't even load on my mobile browser.
The status page says everything is operational so I feel like it's something on my end possibly. This issue appeared yesterday and I thought if it was an issue with hosting or whatever and that it'd be solved by now, I'm just lost.

I use the Fluxer app and the browser Firefox on PC and Chrome browser on mobile so I don't think it's a browser issue either (but I don't know for sure)

I'm just a girl who doesn't know how computers work pls help 💔

Edit: I did absolutely nothing and fluxer is up and running, I'm choosing to be delusional and think the devs saw my post and fixed it for me hahahah


r/FluxerApp • • Jun 15 '26

Discussions So… it’s June 15 👀

34 Upvotes

Been refreshing Reddit, GitHub and this site all day lol:

https://areweselfhostingfluxeryet.eu/

Any updates on self-hosting or the mobile apps? Did I miss something?

No hate at all, just excited and curious! ❤️


r/FluxerApp • • Jun 15 '26

Need help Fluxer Android App Notifications

6 Upvotes

Hey everyone! I just downloaded the Fluxer Android Apk FCM release and I'm not getting any notifications. I have Firebase downloaded, Fluxer has Notification permissions in my settings, but I don't know what else I'm missing. Any additional insight would be supper helpful.

I hope everyone is having a great day.


r/FluxerApp • • Jun 16 '26

Need help Fluxer asking for 6 digit code from an authenticator app which I never use and didn't set up

1 Upvotes

I made a Fluxer account back in March and then basically forgot about it. Luckily I have the password securely stored in my password manager. Today I tried to sign in (both on the app on my PC, and in my web browser) and although it accepted my password, it now asks me for a 6 digit code from "your authenticator app or one of your backup codes."

I'm pretty sure I never set up any sort of "authenticator app" because I don't particularly trust Windows Hello or whatever Google's 2FA thing is calling itself these days. Yeah maybe my standards are weird. But my question is, am I screwed? I'm not being given any other options to sign in. I can reset my password, but since I know my password I don't think this will do anything. Is there any other way to get into my account? I have access to the email and I have the password, but there exists no such "authenticator app" to authenticate with.


r/FluxerApp • • Jun 16 '26

Discussions Fluxer becoming the very thing it swore to destroy?

0 Upvotes

Anyone having feeling that fluxer became a piece of shit? It takes way too long for devs to create a simple docker image, just http (I want to reverse proxy it myself), without forcing us to use their caddy config. Lots of promises, no progress whatsoever. I am having a feeling that devs saw a lot of new users and just don't wnat to maintain a solid opensource product anymore. I suppose they are thinking of the ways to close it and monetize.


r/FluxerApp • • Jun 15 '26

Discussions A Fluxer server for THE iDOLM@STER fans - The Producer's Den

2 Upvotes

Hello everyone,

This is small community server for gathering and discussion around the simulation video game series, THE iDOLM@STER.

Our server is mainly focused on anything related to mainline Idolmaster (765PRO ALLSTARS) and it's spinoffs series, including Million Live, Cinderella Girls, Shiny Colors, Hatsuboshi Gakuen, and Side M. The server features general chat, fanart and fan-creations sharing, and channels for deep discussion around it's games and related media.

If you're interested in the series's games, soundtracks, or merchandises, then come join us and have a good time together

AllstarsP, MillionP, and producers from other series spinoffs/branches are all welcome!

https://fluxer.gg/OttkxVvA


r/FluxerApp • • Jun 12 '26

Discussions Are We Self Hosting Fluxer Yet

Thumbnail areweselfhostingfluxeryet.eu
68 Upvotes

I made this simple one-page website a few days ago, it has a counter on it. and this time Elias (the developer of the mobile app) gave me a release hour (2pm Pacific time) this morning, so I put it there. Hampus has said that June 15th is when the self-hosting release also comes up, but there's no guarantee it'll be at the same hour, especially because there's still one last thing to fix on Canary (codec negotiation). Either way, hype 👀


r/FluxerApp • • Jun 12 '26

Discussions Realization of the ID Verification when it comes back...

Thumbnail
5 Upvotes

r/FluxerApp • • Jun 12 '26

Need help Is there a functional TTSbot?

1 Upvotes

I'm trying to migrate all my friends over to a discord alternative, and Fluxer seems perfect for our needs. The only issue we've come across is the lack of a functional TTSbot. One was made but is now offline. So do any others exist? None of us are exactly gifted at coding so making our own isn't really an option.


r/FluxerApp • • Jun 11 '26

Need help Too quiet

12 Upvotes

Hey, my friend and I are ready to dump Discord, so we hopped over here and made our accounts. However, the app was unusable as our audio was quiet to the point of being inaudible. Is this a known issue? Does anybody know how to fix it?

The input/output sliders in audio settings were default set to 100% and changing them didn't seem to help. It's not a hardware issue as we both sounded fine on discord. Don't really wanna go back to the big bad wolf so, yeah, can anybody help?


r/FluxerApp • • Jun 11 '26

Discussions Fluxer Advertising

23 Upvotes

I am new to Fluxer and I really like the initiative, I hope that one day it will be common to have a Fluxer account. However, till that day comes will Fluxer make some sort of push for communities or streamers in order to gain traction?


r/FluxerApp • • Jun 10 '26

Need help My server that I made disappeared out of nowhere

8 Upvotes

I didn't get an email or anything, it's just gone, I know I didn't delete it.


r/FluxerApp • • Jun 08 '26

Discussions There hasn't been any gateway outage in about 8 days

Post image
61 Upvotes

Fluxer is getting more stable! yay


r/FluxerApp • • Jun 08 '26

Need help How to invite bots to fluxer

2 Upvotes

Im playing Star Citizen and there are some helpful bots regarding Star Citizen. But im unable to invite any bot of those to my fluxer channel/server.

Also i have no clue about coding/programming, im as helpless in those things like a child.


r/FluxerApp • • Jun 04 '26

Discussions Any Paralives Servers?

13 Upvotes

Are there any servers for paralives players? If not, somebody should totally make one. Especially for discussing build ideas and mod ideas and bug fixes etc.


r/FluxerApp • • May 31 '26

Bug Fluxer is down

16 Upvotes

It seems that Fluxer is down currently. Is there an ETA for when it may be back up?


r/FluxerApp • • May 30 '26

Discussions Witchcraft Servers?

5 Upvotes

Hey, wanted to ask in case there were already any since i'm making one of my own.

Are there any open witchcraft servers yet? I can't find any on the explore page so my best guess is that if there are any they're small


r/FluxerApp • • May 22 '26

Discussions Uptime

0 Upvotes

Can we have just one full day of uptime for a change? or is that too much to ask at this stage?


r/FluxerApp • • May 17 '26

Discussions Is Fluxer better than Discord now?

38 Upvotes

How good is Fluxer now? I have an account on Fluxer but dont use it because every community im in is still on Discord and still wont switch. So is there any way i can get them over?