Self-host templates without Caddy

(#582) Feature Shipped self-hosting

What needs fixing?

Good afternoon dear Fluxer Team, Caddy, or Traefik, are in my opinion a blight on the infrastructure. Many systems are already in place (almost always without Caddy/Traefik), and I would like to use a server I already own and have setup infrastructure on (pure NGINX in this case), rather than having to buy a completely new server just for Fluxer, as Fluxer's current setup would overwrite my entire network stack. Your current documentation and template is basically intertwined with Caddy and nearly impossible to remove without major issues. The problem is that most people do not necessarily use Caddy (or Traefik for that matter), and so if you'd be so kind as to write reverse-proxy neutral Docker templates, that would be really helpful. Because when you do, everyone can use whichever one they like, be it Caddy, Traefik, NPM, pure NGINX, etc. Best regards,

Location

https://docs.fluxer.app/operator/get-started/#step-2-download-the-stack

Suggested change

Remove Caddy, or keep Caddy as a template option and create a new template without Caddy (reverse-proxy neutral)
  1. Rex changed the status from Needs triage to Under consideration

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 #595 Self-host LAN only, without Caddy/Reverse-proxies

RexSystemoriginally by @RikudouGoku on GitHub

Report details

What needs fixing?

Would like it if there was a template that works with LAN only setup that does not use a reverse proxy. Would likely be an easier and faster way to spin it up to give it a try and/or if you just want to keep it LAN only (or access it remotly with VPN like Wireguard).

28 comments

Sign in with Fluxer to comment and vote.
Comment by Rex
RexSystem 1 vote
Status changed from Under consideration to Shipped
The stack now runs behind any reverse proxy without Caddy. See https://docs.fluxer.app/operator/reverse-proxy/ for the docker-compose.proxy.yml overlay and examples for nginx, Traefik, HAProxy and others.
Comment by @concienciadesventurada
RexSystem 1 vote edited originally by @concienciadesventurada on GitHub
i was looking for anyone who wanted a more agnostic approach to self hosting too! i've found a couple of comments mentioning people putting it behind nginx, even in another issue, but no actual steps or a rough template of the expected headers and parameters fluxer actually wants; im super stoked for the official launch of the docs -albeit still in progress-, but being able to switch caddy for any other reverse proxy would be awesome
Comment by @LokeYourC3PH
RexSystem 1 vote edited originally by @LokeYourC3PH on GitHub OP
i was looking for anyone who wanted a more agnostic approach to self hosting too! i've found a couple of comments mentioning people putting it behind nginx, even in another issue, but no actual steps or a rough template of the expected headers and parameters fluxer actually wants; im super stoked for the official launch of the docs -albeit still in progress-, but being able to switch caddy for any other reverse proxy would be awesome
I would suggest that you share this issue with others who want to self-host, so that we get more visibility on this and have it fixed as soon as possible. That way, Fluxer self-hosting will take off a lot faster as well.
Comment by @Mar0xy
RexSystem 1 vote originally by @Mar0xy on GitHub
Agreed making caddy basically the only option is a bad idea imo, sure it leads to less "headaches" when it comes to issues with self-hosting having it all focused on one single stack as you don't have to constantly try it out between different web servers and how they might just handle stuff slightly different, but I myself also mainly use NGINX as a reverse-proxy via npmplus for all my applications and obviously there are many more that use just NGINX by itself or Traefik
Comment by @LokeYourC3PH
RexSystem 1 vote originally by @LokeYourC3PH on GitHub OP
Agreed making caddy basically the only option is a bad idea imo, sure it leads to less "headaches" when it comes to issues with self-hosting having it all focused on one single stack as you don't have to constantly try it out between different web servers and how they might just handle stuff slightly different, but I myself also mainly use NGINX as a reverse-proxy via npmplus for all my applications and obviously there are many more that use just NGINX by itself or Traefik
The problem in particular is how absolutely crazily intertwined Caddy is into this stack. It isn't just added next to Fluxer, or on top of it, so you can just remove it and replace the one env. variable that calls for it. Nope, aside from Caddy itself being a part of the stack which is removable, there are multiple calls directly to Caddy from other parts of the stack. Looking at the Caddy file, you can adapt it to NGINX proxy templates, that isn't a huge deal in and of itself. The major issue is that the stack basically expects Caddy to be present, and I have no idea what will happen if you just rip it out.
Comment by @shleeable
RexSystem 1 vote originally by @shleeable on GitHub
the original post seems to be a little aggressive against Caddy... but it look me about 15 seconds to remove the dependency Nginx doesn't support zstd and http3 without a lot of messing around. Caddy doesn't support caching without compiling a module and traefik is overkill in most cases... There isn't a simple middle ground for me.....and a lot of us are throwing cloudflare tunnels or even pangolin in front of this so it's kind of a reverse proxy sandwich. The caddyfile is simply enough with just basic path based redirections so I'm planning on trying pangolin without caddy.
Comment by @RikudouGoku
RexSystem 1 vote originally by @RikudouGoku on GitHub
Would also like a template without reverse proxies and just works LAN only.
Comment by @retropele
RexSystem 1 vote originally by @retropele on GitHub
Would also like a template without reverse proxies and just works LAN only.
Agreed. This is my ideal usecase
Comment by @concienciadesventurada
RexSystem 1 vote edited originally by @concienciadesventurada on GitHub
the original post seems to be a little aggressive against Caddy... but it look me about 15 seconds to remove the dependency Nginx doesn't support zstd and http3 without a lot of messing around. Caddy doesn't support caching without compiling a module and traefik is overkill in most cases... There isn't a simple middle ground for me.....and a lot of us are throwing cloudflare tunnels or even pangolin in front of this so it's kind of a reverse proxy sandwich. The caddyfile is simply enough with just basic path based redirections so I'm planning on trying pangolin without caddy.
hey @shleeable could you share how you did it? i'd love to see it. i personally have no issues with caddy being a critical portion of the stack as i understand the limitations you bring up of these solutions, but i think it would be great if the documentation could point to a way that caddy resolves the things it needs like zstd and http3 and just give nginx or any other reverse proxy what it needs to properly communicate with fluxer
Comment by @InsertDisc
RexSystem 1 vote originally by @InsertDisc on GitHub

What needs fixing?

Good afternoon dear Fluxer Team, Caddy, or Traefik, are in my opinion a blight on the infrastructure. Many systems are already in place (almost always without Caddy/Traefik), and I would like to use a server I already own and have setup infrastructure on (pure NGINX in this case), rather than having to buy a completely new server just for Fluxer, as Fluxer's current setup would overwrite my entire network stack. Your current documentation and template is basically intertwined with Caddy and nearly impossible to remove without major issues. The problem is that most people do not necessarily use Caddy (or Traefik for that matter), and so if you'd be so kind as to write reverse-proxy neutral Docker templates, that would be really helpful. Because when you do, everyone can use whichever one they like, be it Caddy, Traefik, NPM, pure NGINX, etc. Best regards,
Maybe you have very specific circumstances but changing the host port for Caddy in the compose file to something else, say 8180, and commenting out the others, and then following the cloudflared tunnel setup (without actually using Cloudflare) the rest of the way allowed me to just point my reverse proxy at 8180 http without issue.
Comment by @IamLurking
RexSystem 1 vote originally by @IamLurking on GitHub
Maybe you have very specific circumstances but changing the host port for Caddy in the compose file to something else, say 8180, and commenting out the others, and then following the cloudflared tunnel setup (without actually using Cloudflare) the rest of the way allowed me to just point my reverse proxy at 8180 http without issue.
I'm really confused how you made it work without Caddy. Following what you said you did and still cannot access chat.[redacted].com. I changed the Caddy port to 8181, commented the 443 ports, changed FLUXER_CADDY_SITE_ADDRESS=:8181 I am a new user of Caddy, that is not on the same host as fluxer, I cannot have 2 caddy setup and just cannot seem to figure out how to make it work.... I have also tried with cloudflare tunnel and it doesn't work either... I just get a blank page...
Comment by @InsertDisc
RexSystem 1 vote originally by @InsertDisc on GitHub
> Maybe you have very specific circumstances but changing the host port for Caddy in the compose file to something else, say 8180, and commenting out the others, and then following the cloudflared tunnel setup (without actually using Cloudflare) the rest of the way allowed me to just point my reverse proxy at 8180 http without issue. I'm really confused how you made it work without Caddy. Following what you said you did and still cannot access chat.[redacted].com. I changed the Caddy port to 8181, commented the 443 ports, changed FLUXER_CADDY_SITE_ADDRESS=:8181 I am a new user of Caddy, that is not on the same host as fluxer, I cannot have 2 caddy setup and just cannot seem to figure out how to make it work.... I have also tried with cloudflare tunnel and it doesn't work either... I just get a blank page...
FLUXER_CADDY_SITE_ADDRESS=:80 Caddy port in compose 8181:80 Everything else is fine. Point reverse proxy at 8181. Check my comment here https://github.com/orgs/fluxerapp/discussions/1041
Comment by @kazak-99
RexSystem 1 vote edited originally by @kazak-99 on GitHub
the original post seems to be a little aggressive against Caddy... but it look me about 15 seconds to remove the dependency Nginx doesn't support zstd and http3 without a lot of messing around. Caddy doesn't support caching without compiling a module and traefik is overkill in most cases... There isn't a simple middle ground for me.....and a lot of us are throwing cloudflare tunnels or even pangolin in front of this so it's kind of a reverse proxy sandwich. The caddyfile is simply enough with just basic path based redirections so I'm planning on trying pangolin without caddy.
@shleeable I dont suppose you got anywhere with using pangolin at all?
Comment by @LokeYourC3PH
RexSystem 1 vote originally by @LokeYourC3PH on GitHub OP
> > Maybe you have very specific circumstances but changing the host port for Caddy in the compose file to something else, say 8180, and commenting out the others, and then following the cloudflared tunnel setup (without actually using Cloudflare) the rest of the way allowed me to just point my reverse proxy at 8180 http without issue. > > > I'm really confused how you made it work without Caddy. Following what you said you did and still cannot access chat.[redacted].com. I changed the Caddy port to 8181, commented the 443 ports, changed FLUXER_CADDY_SITE_ADDRESS=:8181 > I am a new user of Caddy, that is not on the same host as fluxer, I cannot have 2 caddy setup and just cannot seem to figure out how to make it work.... I have also tried with cloudflare tunnel and it doesn't work either... I just get a blank page... FLUXER_CADDY_SITE_ADDRESS=:80 Caddy port in compose 8181:80 Everything else is fine. Point reverse proxy at 8181. Check my comment here https://github.com/orgs/fluxerapp/discussions/1041
This was the way for me, works with bare NGINX and my proxy template from HestiaCP adjusted to use the (on my end) 8585 port. Only issue I had is that I didn't comment out 443 for SSL, and so it couldn't launch. All I did was assign 443 another port like for 80 to 8585, to 8586, and that solved the issue. I don't use the SSL port and merely did the redirect to Caddy part, and it works perfectly fine for me now.
Comment by @Gelantious
RexSystem 1 vote originally by @Gelantious on GitHub
Would very much like an option without caddy as most of us in the self-hosting world already have a reverse proxy system in place for other things we host. Having to go through editing this and possibly having it break in the future, resulting in more time spent troubleshooting isn't that alluring :) So pretty please, give us options.
Comment by @InsertDisc
RexSystem 1 vote originally by @InsertDisc on GitHub
Would very much like an option without caddy as most of us in the self-hosting world already have a reverse proxy system in place for other things we host. Having to go through editing this and possibly having it break in the future, resulting in more time spent troubleshooting isn't that alluring :) So pretty please, give us options.
I've been using NPM for years and do with Fluxer as well. It's two config lines to use your own reverse proxy. Put the stack on 80 internally so it doesn't do certs and set a host port. That's simpler than some other services... how can this be easier? You only have to set FLUXER_CADDY_SITE_ADDRESS=:80 And pick whatever you want for the Caddy port. 1234:80 done.
Comment by @Jerroder
RexSystem 1 vote originally by @Jerroder on GitHub
How do you port forward 7881/tcp and 7882/udp for LiveKit media? Is it also handled by Nginx?
Comment by @InsertDisc
RexSystem 1 vote originally by @InsertDisc on GitHub
How do you port forward 7881/tcp and 7882/udp for LiveKit media? Is it also handled by Nginx?
You could probably do streams, but it's just a regular straight port forward as they don't carry host header information. Just forward those ports to the machine running fluxer. Unless it's a public facing VPS, then you would just need to open them in your firewall.
Comment by @Jerroder
RexSystem 1 vote originally by @Jerroder on GitHub
I should have specified, I meant for IPv6. In my registrar I can add a record for fluxer.mydomain.tld so it points to my public IPv4, which is the same for fluxer or Nginx and the firewall will forward depending on the port. However for IPv6 I need to add 2 records for 2 different IPs since they're globally routable, aside from streams is there a way to deal with this that I don't know about?
Comment by @InsertDisc
RexSystem 1 vote originally by @InsertDisc on GitHub
I should have specified, I meant for IPv6. In my registrar I can add a record for fluxer.mydomain.tld so it points to my public IPv4, which is the same for fluxer or Nginx and the firewall will forward depending on the port. However for IPv6 I need to add 2 records for 2 different IPs since they're globally routable, aside from streams is there a way to deal with this that I don't know about?
I don't know a whole lot about ipv6 but I'm pretty sure you want your A and AAAA records to point to whatever is doing your ssl termination. You'd have to just redirect the ports from your nginx machine to the fluxer machine directly or incorporate an l4 proxy in front of nginx. This is getting a bit off topic though.
Comment by @RikudouGoku
RexSystem 1 vote originally by @RikudouGoku on GitHub
> Would very much like an option without caddy as most of us in the self-hosting world already have a reverse proxy system in place for other things we host. Having to go through editing this and possibly having it break in the future, resulting in more time spent troubleshooting isn't that alluring :) > So pretty please, give us options. I've been using NPM for years and do with Fluxer as well. It's two config lines to use your own reverse proxy. Put the stack on 80 internally so it doesn't do certs and set a host port. That's simpler than some other services... how can this be easier? You only have to set FLUXER_CADDY_SITE_ADDRESS=:80 And pick whatever you want for the Caddy port. 1234:80 done.
I assume this is a different issue? image
  • 620100432-f9fcaaaf-d0b0-41ed-8539-28f3a113cee1.png

    620100432-f9fcaaaf-d0b0-41ed-8539-28f3a113cee1.png

    653×741 | 109 kB

Comment by @mvahaste
RexSystem 1 vote originally by @mvahaste on GitHub
> > Would very much like an option without caddy as most of us in the self-hosting world already have a reverse proxy system in place for other things we host. Having to go through editing this and possibly having it break in the future, resulting in more time spent troubleshooting isn't that alluring :) > > So pretty please, give us options. > > > I've been using NPM for years and do with Fluxer as well. It's two config lines to use your own reverse proxy. Put the stack on 80 internally so it doesn't do certs and set a host port. That's simpler than some other services... how can this be easier? > You only have to set FLUXER_CADDY_SITE_ADDRESS=:80 And pick whatever you want for the Caddy port. 1234:80 done. I assume this is a different issue? image
Yes. I've been using the aforementioned method to put Traefik in front of Caddy without issues.
  • 620100432-f9fcaaaf-d0b0-41ed-8539-28f3a113cee1.png

    620100432-f9fcaaaf-d0b0-41ed-8539-28f3a113cee1.png

    653×741 | 109 kB

Comment by @RikudouGoku
RexSystem 1 vote originally by @RikudouGoku on GitHub
> > > Would very much like an option without caddy as most of us in the self-hosting world already have a reverse proxy system in place for other things we host. Having to go through editing this and possibly having it break in the future, resulting in more time spent troubleshooting isn't that alluring :) > > > So pretty please, give us options. > > > > > > I've been using NPM for years and do with Fluxer as well. It's two config lines to use your own reverse proxy. Put the stack on 80 internally so it doesn't do certs and set a host port. That's simpler than some other services... how can this be easier? > > You only have to set FLUXER_CADDY_SITE_ADDRESS=:80 And pick whatever you want for the Caddy port. 1234:80 done. > > > I assume this is a different issue? > image Yes. I've been using the aforementioned method to put Traefik in front of Caddy without issues.
Weird as i get the same error when i use the http link....
  • 620100432-f9fcaaaf-d0b0-41ed-8539-28f3a113cee1.png

    620100432-f9fcaaaf-d0b0-41ed-8539-28f3a113cee1.png

    653×741 | 109 kB

Comment by @mvahaste
RexSystem 1 vote originally by @mvahaste on GitHub
> > > > Would very much like an option without caddy as most of us in the self-hosting world already have a reverse proxy system in place for other things we host. Having to go through editing this and possibly having it break in the future, resulting in more time spent troubleshooting isn't that alluring :) > > > > So pretty please, give us options. > > > > > > > > > I've been using NPM for years and do with Fluxer as well. It's two config lines to use your own reverse proxy. Put the stack on 80 internally so it doesn't do certs and set a host port. That's simpler than some other services... how can this be easier? > > > You only have to set FLUXER_CADDY_SITE_ADDRESS=:80 And pick whatever you want for the Caddy port. 1234:80 done. > > > > > > I assume this is a different issue? > > image > > > Yes. I've been using the aforementioned method to put Traefik in front of Caddy without issues. Weird as i get the same error when i use the http link....
Is there anything useful in the browser console on container logs?
  • 620100432-f9fcaaaf-d0b0-41ed-8539-28f3a113cee1.png

    620100432-f9fcaaaf-d0b0-41ed-8539-28f3a113cee1.png

    653×741 | 109 kB

Comment by @RikudouGoku
RexSystem 1 vote originally by @RikudouGoku on GitHub
> > > > > Would very much like an option without caddy as most of us in the self-hosting world already have a reverse proxy system in place for other things we host. Having to go through editing this and possibly having it break in the future, resulting in more time spent troubleshooting isn't that alluring :) > > > > > So pretty please, give us options. > > > > > > > > > > > > I've been using NPM for years and do with Fluxer as well. It's two config lines to use your own reverse proxy. Put the stack on 80 internally so it doesn't do certs and set a host port. That's simpler than some other services... how can this be easier? > > > > You only have to set FLUXER_CADDY_SITE_ADDRESS=:80 And pick whatever you want for the Caddy port. 1234:80 done. > > > > > > > > > I assume this is a different issue? > > > image > > > > > > Yes. I've been using the aforementioned method to put Traefik in front of Caddy without issues. > > > Weird as i get the same error when i use the http link.... Is there anything useful in the browser console on container logs?
image Fluxer-app-proxy (ghcr.io/fluxerapp/fluxer-app-proxy-self-hosted:v1) logs:
[fluxer-app-proxy-1] 2026-07-10T15:17:11.194917300Z 2026-07-10T15:17:11.194822Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:17:11.195129554Z 2026-07-10T15:17:11.195081Z  WARN fluxer_app_proxy: invite metadata resolver disabled; failed to connect to database err=failed to connect to Postgres
[fluxer-app-proxy-1] 2026-07-10T15:17:11.195405112Z 2026-07-10T15:17:11.195378Z  INFO fluxer_app_proxy: starting Fluxer app proxy addr=0.0.0.0:8080
[fluxer-app-proxy-1] 2026-07-10T15:17:15.922401279Z 2026-07-10T15:17:15.922306Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:17:15.975622736Z 2026-07-10T15:17:15.975527Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:18:11.205417878Z 2026-07-10T15:18:11.205226Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:19:11.213457205Z 2026-07-10T15:19:11.213325Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:20:11.221567530Z 2026-07-10T15:20:11.221371Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:21:11.229100640Z 2026-07-10T15:21:11.228831Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:22:11.239560949Z 2026-07-10T15:22:11.239251Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:22:20.376439690Z 2026-07-10T15:22:20.376338Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:22:20.552914147Z 2026-07-10T15:22:20.552851Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:22:21.234757036Z 2026-07-10T15:22:21.234446Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:23:11.245664857Z 2026-07-10T15:23:11.245586Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:24:11.255533124Z 2026-07-10T15:24:11.255383Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:25:11.264719950Z 2026-07-10T15:25:11.264453Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:26:11.275152424Z 2026-07-10T15:26:11.274868Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:27:11.285744793Z 2026-07-10T15:27:11.285570Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:28:11.293454922Z 2026-07-10T15:28:11.293335Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:29:11.303027896Z 2026-07-10T15:29:11.302874Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:30:11.312532344Z 2026-07-10T15:30:11.312386Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:31:11.322876577Z 2026-07-10T15:31:11.322693Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:32:11.331672389Z 2026-07-10T15:32:11.331418Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:33:11.339259922Z 2026-07-10T15:33:11.339016Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:34:11.349386038Z 2026-07-10T15:34:11.349163Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-10T15:35:11.359103269Z 2026-07-10T15:35:11.358956Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-11T11:39:08.102131405Z 2026-07-11T11:39:08.100932Z  WARN fluxer_app_proxy: initial discovery fetch failed; will retry in background err=upstream discovery returned 502 Bad Gateway url=http://caddy:8088/api/.well-known/fluxer
[fluxer-app-proxy-1] 2026-07-11T11:39:08.104641864Z 2026-07-11T11:39:08.102814Z  WARN fluxer_app_proxy: invite metadata resolver disabled; failed to connect to database err=failed to connect to Postgres
[fluxer-app-proxy-1] 2026-07-11T11:39:08.114570893Z 2026-07-11T11:39:08.113984Z  INFO fluxer_app_proxy: starting Fluxer app proxy addr=0.0.0.0:8080
[fluxer-app-proxy-1] 2026-07-11T11:39:45.766119912Z 2026-07-11T11:39:45.766041Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-11T11:39:45.958495386Z 2026-07-11T11:39:45.958314Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-11T11:40:08.111415297Z 2026-07-11T11:40:08.111221Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-11T11:41:08.120405274Z 2026-07-11T11:41:08.120107Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
[fluxer-app-proxy-1] 2026-07-11T11:42:08.128228843Z 2026-07-11T11:42:08.128042Z  INFO fluxer_app_proxy::discovery_cache: discovery cache updated url="http://caddy:8088/api/.well-known/fluxer" api_code_version=unknown
Caddy logs:
[fluxer-caddy-1] 2026-07-10T15:17:10.538443698Z {"level":"info","ts":1783696630.5383127,"msg":"maxprocs: Leaving GOMAXPROCS=16: CPU quota undefined"}
[fluxer-caddy-1] 2026-07-10T15:17:10.538545708Z {"level":"info","ts":1783696630.538455,"msg":"GOMEMLIMIT is updated","package":"github.com/KimMachineGun/automemlimit/memlimit","GOMEMLIMIT":90851014656,"previous":9223372036854775807}
[fluxer-caddy-1] 2026-07-10T15:17:10.538572674Z {"level":"info","ts":1783696630.5384774,"msg":"using config from file","file":"/etc/caddy/Caddyfile"}
[fluxer-caddy-1] 2026-07-10T15:17:10.539654469Z {"level":"info","ts":1783696630.5395966,"msg":"adapted config to JSON","adapter":"caddyfile"}
[fluxer-caddy-1] 2026-07-10T15:17:10.540681784Z {"level":"info","ts":1783696630.5406272,"logger":"admin","msg":"admin endpoint started","address":"localhost:2019","enforce_origin":false,"origins":["//localhost:2019","//[::1]:2019","//127.0.0.1:2019"]}
[fluxer-caddy-1] 2026-07-10T15:17:10.541824359Z {"level":"info","ts":1783696630.5417645,"logger":"tls.cache.maintenance","msg":"started background certificate maintenance","cache":"0xc00046ce80"}
[fluxer-caddy-1] 2026-07-10T15:17:10.541862810Z {"level":"warn","ts":1783696630.5418046,"logger":"http.auto_https","msg":"server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server","server_name":"srv0","http_port":80}
[fluxer-caddy-1] 2026-07-10T15:17:10.543672149Z {"level":"warn","ts":1783696630.5435662,"logger":"http","msg":"HTTP/2 skipped because it requires TLS","network":"tcp","addr":":80"}
[fluxer-caddy-1] 2026-07-10T15:17:10.543693544Z {"level":"warn","ts":1783696630.5435953,"logger":"http","msg":"HTTP/3 skipped because it requires TLS","network":"tcp","addr":":80"}
[fluxer-caddy-1] 2026-07-10T15:17:10.543695875Z {"level":"info","ts":1783696630.543601,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
[fluxer-caddy-1] 2026-07-10T15:17:10.543700090Z {"level":"warn","ts":1783696630.543662,"logger":"http","msg":"HTTP/2 skipped because it requires TLS","network":"tcp","addr":":8088"}
[fluxer-caddy-1] 2026-07-10T15:17:10.543701767Z {"level":"warn","ts":1783696630.5436683,"logger":"http","msg":"HTTP/3 skipped because it requires TLS","network":"tcp","addr":":8088"}
[fluxer-caddy-1] 2026-07-10T15:17:10.543703232Z {"level":"info","ts":1783696630.5436711,"logger":"http.log","msg":"server running","name":"srv1","protocols":["h1","h2","h3"]}
[fluxer-caddy-1] 2026-07-10T15:17:10.543980681Z {"level":"info","ts":1783696630.5439441,"msg":"autosaved config (load with --resume flag)","file":"/config/caddy/autosave.json"}
[fluxer-caddy-1] 2026-07-10T15:17:10.543983525Z {"level":"info","ts":1783696630.543956,"msg":"serving initial configuration"}
[fluxer-caddy-1] 2026-07-10T15:17:10.544934000Z {"level":"info","ts":1783696630.5448878,"logger":"tls","msg":"storage cleaning happened too recently; skipping for now","storage":"FileStorage:/data/caddy","instance":"1df8523d-53a5-4f97-bfe8-572a11235811","try_again":1783783030.5448868,"try_again_in":86399.999999765}
[fluxer-caddy-1] 2026-07-10T15:17:10.544958899Z {"level":"info","ts":1783696630.5449338,"logger":"tls","msg":"finished cleaning storage units"}
[fluxer-caddy-1] 2026-07-10T15:22:20.560803415Z {"level":"warn","ts":1783696940.560624,"logger":"http.handlers.reverse_proxy","msg":"aborting with incomplete response","upstream":"app-proxy:8080","duration":0.038468074,"request":{"remote_ip":"172.23.0.1","remote_port":"57836","client_ip":"172.23.0.1","proto":"HTTP/1.1","method":"GET","host":"fluxer.REDACTED.dedyn.io","uri":"/assets/8cbe6afe043ceca0.js","headers":{"Sec-Fetch-Site":["same-origin"],"Accept":["*/*"],"Sec-Fetch-Mode":["cors"],"Sec-Gpc":["1"],"User-Agent":["Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36"],"X-Real-Ip":["192.168.0.171"],"X-Forwarded-Host":["fluxer.REDACTED.dedyn.io"],"Accept-Language":["en-US,en;q=0.9"],"Sec-Ch-Ua":["\"Not;A=Brand\";v=\"8\", \"Chromium\";v=\"150\", \"Brave\";v=\"150\""],"Priority":["u=1"],"Dnt":["1"],"Via":["1.1 Caddy"],"X-Forwarded-Proto":["http"],"Origin":["https://fluxer.REDACTED.dedyn.io"],"Referer":["https://fluxer.REDACTED.dedyn.io/"],"Sec-Ch-Ua-Platform":["\"Linux\""],"Sec-Ch-Ua-Mobile":["?0"],"Sec-Fetch-Dest":["script"],"X-Forwarded-For":["172.23.0.1"]}},"error":"writing: write tcp 172.23.0.22:80->172.23.0.1:57836: write: broken pipe"}
[fluxer-caddy-1] 2026-07-10T15:22:20.561076669Z {"level":"warn","ts":1783696940.5608904,"logger":"http.handlers.reverse_proxy","msg":"aborting with incomplete response","upstream":"app-proxy:8080","duration":0.022230972,"request":{"remote_ip":"172.23.0.1","remote_port":"57824","client_ip":"172.23.0.1","proto":"HTTP/1.1","method":"GET","host":"fluxer.REDACTED.dedyn.io","uri":"/assets/917509b233647fe1.js","headers":{"X-Forwarded-Host":["fluxer.REDACTED.dedyn.io"],"Sec-Ch-Ua-Mobile":["?0"],"Accept-Language":["en-US,en;q=0.9"],"Sec-Fetch-Mode":["cors"],"Via":["1.1 Caddy"],"Origin":["https://fluxer.REDACTED.dedyn.io"],"Dnt":["1"],"Priority":["u=1"],"Sec-Ch-Ua":["\"Not;A=Brand\";v=\"8\", \"Chromium\";v=\"150\", \"Brave\";v=\"150\""],"Accept":["*/*"],"User-Agent":["Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36"],"Sec-Gpc":["1"],"X-Forwarded-For":["172.23.0.1"],"Sec-Fetch-Dest":["script"],"Referer":["https://fluxer.REDACTED.dedyn.io/"],"Sec-Fetch-Site":["same-origin"],"X-Real-Ip":["192.168.0.171"],"Sec-Ch-Ua-Platform":["\"Linux\""],"X-Forwarded-Proto":["http"]}},"error":"writing: write tcp 172.23.0.22:80->172.23.0.1:57824: write: broken pipe"}
[fluxer-caddy-1] 2026-07-10T15:35:36.883255245Z {"level":"info","ts":1783697736.8797798,"msg":"shutting down apps, then terminating","signal":"SIGTERM"}
[fluxer-caddy-1] 2026-07-10T15:35:36.883478524Z {"level":"warn","ts":1783697736.8798878,"msg":"exiting; byeee!! 👋","signal":"SIGTERM"}
[fluxer-caddy-1] 2026-07-10T15:35:36.883489432Z {"level":"info","ts":1783697736.880027,"logger":"http","msg":"servers shutting down with eternal grace period"}
[fluxer-caddy-1] 2026-07-10T15:35:36.883494250Z {"level":"info","ts":1783697736.8805993,"logger":"admin","msg":"stopped previous server","address":"localhost:2019"}
[fluxer-caddy-1] 2026-07-10T15:35:36.883500981Z {"level":"info","ts":1783697736.880637,"msg":"shutdown complete","signal":"SIGTERM","exit_code":0}
[fluxer-caddy-1] 2026-07-11T11:39:07.087544960Z {"level":"info","ts":1783769947.086967,"msg":"maxprocs: Leaving GOMAXPROCS=18: CPU quota undefined"}
[fluxer-caddy-1] 2026-07-11T11:39:07.088846269Z {"level":"info","ts":1783769947.0880795,"msg":"GOMEMLIMIT is updated","package":"github.com/KimMachineGun/automemlimit/memlimit","GOMEMLIMIT":90851010969,"previous":9223372036854775807}
[fluxer-caddy-1] 2026-07-11T11:39:07.090038523Z {"level":"info","ts":1783769947.0885236,"msg":"using config from file","file":"/etc/caddy/Caddyfile"}
[fluxer-caddy-1] 2026-07-11T11:39:07.093298466Z {"level":"info","ts":1783769947.093133,"msg":"adapted config to JSON","adapter":"caddyfile"}
[fluxer-caddy-1] 2026-07-11T11:39:07.108909589Z {"level":"info","ts":1783769947.1002452,"logger":"admin","msg":"admin endpoint started","address":"localhost:2019","enforce_origin":false,"origins":["//localhost:2019","//[::1]:2019","//127.0.0.1:2019"]}
[fluxer-caddy-1] 2026-07-11T11:39:07.111847672Z {"level":"info","ts":1783769947.1093779,"logger":"tls.cache.maintenance","msg":"started background certificate maintenance","cache":"0xc00090a000"}
[fluxer-caddy-1] 2026-07-11T11:39:07.112110120Z {"level":"warn","ts":1783769947.1094198,"logger":"http.auto_https","msg":"server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server","server_name":"srv0","http_port":80}
[fluxer-caddy-1] 2026-07-11T11:39:07.115587310Z {"level":"warn","ts":1783769947.1147661,"logger":"http","msg":"HTTP/2 skipped because it requires TLS","network":"tcp","addr":":80"}
[fluxer-caddy-1] 2026-07-11T11:39:07.115635691Z {"level":"warn","ts":1783769947.1148095,"logger":"http","msg":"HTTP/3 skipped because it requires TLS","network":"tcp","addr":":80"}
[fluxer-caddy-1] 2026-07-11T11:39:07.115643602Z {"level":"info","ts":1783769947.1148894,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
[fluxer-caddy-1] 2026-07-11T11:39:07.115649757Z {"level":"warn","ts":1783769947.1149573,"logger":"http","msg":"HTTP/2 skipped because it requires TLS","network":"tcp","addr":":8088"}
[fluxer-caddy-1] 2026-07-11T11:39:07.115654225Z {"level":"warn","ts":1783769947.1149619,"logger":"http","msg":"HTTP/3 skipped because it requires TLS","network":"tcp","addr":":8088"}
[fluxer-caddy-1] 2026-07-11T11:39:07.115658465Z {"level":"info","ts":1783769947.114966,"logger":"http.log","msg":"server running","name":"srv1","protocols":["h1","h2","h3"]}
[fluxer-caddy-1] 2026-07-11T11:39:07.116582967Z {"level":"info","ts":1783769947.1163833,"msg":"autosaved config (load with --resume flag)","file":"/config/caddy/autosave.json"}
[fluxer-caddy-1] 2026-07-11T11:39:07.116614306Z {"level":"info","ts":1783769947.1164813,"msg":"serving initial configuration"}
[fluxer-caddy-1] 2026-07-11T11:39:07.121816161Z {"level":"info","ts":1783769947.1207364,"logger":"tls","msg":"storage cleaning happened too recently; skipping for now","storage":"FileStorage:/data/caddy","instance":"1df8523d-53a5-4f97-bfe8-572a11235811","try_again":1783856347.1207314,"try_again_in":86399.999998889}
[fluxer-caddy-1] 2026-07-11T11:39:07.122252940Z {"level":"info","ts":1783769947.1208522,"logger":"tls","msg":"finished cleaning storage units"}
[fluxer-caddy-1] 2026-07-11T11:39:08.092791418Z {"level":"error","ts":1783769948.09248,"logger":"http.log.error","msg":"dial tcp 172.23.0.16:8080: connect: connection refused","request":{"remote_ip":"172.23.0.13","remote_port":"58272","client_ip":"172.23.0.13","proto":"HTTP/1.1","method":"GET","host":"caddy:8088","uri":"/api/.well-known/fluxer","headers":{"Accept":["application/json"],"Accept-Encoding":["gzip,deflate,br"]}},"duration":0.010315233,"status":502,"err_id":"jrrny9umy","err_trace":"reverseproxy.statusError (reverseproxy.go:1390)"}
The other container logs seems to be ok at least.
  • 620100432-f9fcaaaf-d0b0-41ed-8539-28f3a113cee1.png

    620100432-f9fcaaaf-d0b0-41ed-8539-28f3a113cee1.png

    653×741 | 109 kB

  • 620417946-9a61424d-b6ae-497a-8e99-8cfa6631a3bd.png

    620417946-9a61424d-b6ae-497a-8e99-8cfa6631a3bd.png

    1657×810 | 445 kB

Comment by @mvahaste
RexSystem 1 vote edited originally by @mvahaste on GitHub
@RikudouGoku the screenshot shows that it's a CORS issue; your browser is making requests to 192.168.0.153 instead of an actual domain, which I assume should be fluxer.<something>.dedyn.io in your case. How exactly did you set this up? If you're unsure, I'd suggest starting over and following the docs exactly. Assuming you have Traefik set up and working, the only thing you should have to change is FLUXER_CADDY_SITE_ADDRESS=:80 in your .env file. PSA: If you or anyone else wants quicker help then the #self-hosting channel in the Fluxer Developers community is pretty active.
Comment by @RikudouGoku
RexSystem 1 vote edited originally by @RikudouGoku on GitHub
@RikudouGoku the screenshot shows that it's a CORS issue; your browser is making requests to 192.168.0.153 instead of an actual domain, which I assume should be fluxer.<something>.dedyn.io in your case.
Note that i get this same issue even if i use the http://192.160.0.153:1234/ link instead. And not the https link (dedyn.io). I spun up a nginx proxy manager plus and added my fluxer.redacted.dedyn.io and created a cert for it then made a proxy host for it pointing to the lan ip being 192.168.0.153 and the forward port being 1234, TLS settings being to have "force https", "HSTS Enabled", "HTTP/3 Support" and "HSTS Subdomains+Preload" turned on. (im doing all this on my test server.)
How exactly did you set this up? If you're unsure, I'd suggest starting over and following the docs exactly. Assuming you have Traefik set up and working, the only thing you should have to change is FLUXER_CADDY_SITE_ADDRESS=:80 in your .env file.
And yes i did change that fluxer caddy site address to that exactly. I did comment out the 443:443 ports for caddy though since i needed that port for npm. So this part:
services:
  caddy:
    image: caddy:2.10-alpine
    restart: unless-stopped
    networks: [fluxer]
    ports:
      - "1234:80"
      #- "443:443"
      #- "443:443/udp"
Comment by @lazy-media
RexSystem 1 vote originally by @lazy-media on GitHub
Not sure if this was mentioned, I kind of scanned through the comments and didn't see this mentioned, but with Caddy, if you want to have caddy just pass through the traffic and assume there is another reverse proxy available to handle certificates, you can enter in your FLUXER_CADDY_SITE_ADDRESS as something like http://fluxer.example.com instead of example.com and it will serve Fluxer on port 80 instead of 443 and if you have it setup through another reverse proxy. Example: FLUXER_CADDY_SITE_ADDRESS=http://fluxer.example.com I personally use Authentik as my reverse proxy and I did this with my Fluxer instance and pointed Authentik to the Fluxer internal IP address and port 80. Works fine for me, but it prefers to use the domain name instead of local address for accessing. I found this solution here: https://caddy.community/t/running-a-caddy-server-behind-another-solved/13122/7 Hope this is helpful. Also wish this would have been mentioned in their documentation.
Deleted comment
Removed by moderator Rex: Removed a general status note that was posted on many GitHub threads. It no longer applies here.