Self-host templates without Caddy

(#582) Feature Shipped self-hosting

Thread

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